Initialer Import der Synology Scripts
This commit is contained in:
Executable
+346
@@ -0,0 +1,346 @@
|
||||
############################################################
|
||||
# PART 2
|
||||
#
|
||||
# Resume Manager
|
||||
# Statusverwaltung
|
||||
# Pending Reboot
|
||||
# Registry Funktionen
|
||||
############################################################
|
||||
|
||||
############################################################
|
||||
# REGISTRY
|
||||
############################################################
|
||||
|
||||
function Test-RegistryValue {
|
||||
|
||||
param(
|
||||
|
||||
[string]$Path,
|
||||
|
||||
[string]$Name
|
||||
|
||||
)
|
||||
|
||||
try{
|
||||
|
||||
Get-ItemProperty `
|
||||
-Path $Path `
|
||||
-Name $Name `
|
||||
-ErrorAction Stop | Out-Null
|
||||
|
||||
return $true
|
||||
|
||||
}
|
||||
catch{
|
||||
|
||||
return $false
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function Get-RegistryValue {
|
||||
|
||||
param(
|
||||
|
||||
[string]$Path,
|
||||
|
||||
[string]$Name
|
||||
|
||||
)
|
||||
|
||||
try{
|
||||
|
||||
(Get-ItemProperty `
|
||||
-Path $Path `
|
||||
-Name $Name `
|
||||
-ErrorAction Stop).$Name
|
||||
|
||||
}
|
||||
catch{
|
||||
|
||||
return $null
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
# STATUSDATEI
|
||||
############################################################
|
||||
|
||||
function Save-State {
|
||||
|
||||
param(
|
||||
|
||||
[string]$Step
|
||||
|
||||
)
|
||||
|
||||
$State = [PSCustomObject]@{
|
||||
|
||||
Version = $Version
|
||||
|
||||
Computer = $env:COMPUTERNAME
|
||||
|
||||
Date = Get-Date
|
||||
|
||||
Step = $Step
|
||||
|
||||
}
|
||||
|
||||
$State |
|
||||
ConvertTo-Json |
|
||||
Set-Content `
|
||||
-Path $StateFile `
|
||||
-Encoding UTF8
|
||||
|
||||
Write-Log "Status gespeichert ($Step)"
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
|
||||
function Load-State {
|
||||
|
||||
if(!(Test-Path $StateFile))
|
||||
{
|
||||
|
||||
return $null
|
||||
|
||||
}
|
||||
|
||||
try{
|
||||
|
||||
Get-Content `
|
||||
$StateFile `
|
||||
-Raw |
|
||||
ConvertFrom-Json
|
||||
|
||||
}
|
||||
catch{
|
||||
|
||||
return $null
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
|
||||
function Remove-State {
|
||||
|
||||
if(Test-Path $StateFile)
|
||||
{
|
||||
|
||||
Remove-Item `
|
||||
$StateFile `
|
||||
-Force
|
||||
|
||||
Write-Log "Statusdatei entfernt"
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
# RESUME FLAG
|
||||
############################################################
|
||||
|
||||
function Set-ResumeFlag {
|
||||
|
||||
New-Item `
|
||||
-ItemType File `
|
||||
-Path $ResumeFlag `
|
||||
-Force |
|
||||
Out-Null
|
||||
|
||||
Write-Log "Resume Flag gesetzt"
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
|
||||
function Clear-ResumeFlag {
|
||||
|
||||
if(Test-Path $ResumeFlag)
|
||||
{
|
||||
|
||||
Remove-Item `
|
||||
$ResumeFlag `
|
||||
-Force
|
||||
|
||||
Write-Log "Resume Flag entfernt"
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
# PENDING REBOOT
|
||||
############################################################
|
||||
|
||||
function Test-PendingReboot {
|
||||
|
||||
Write-Log "Prüfe Pending Reboot"
|
||||
|
||||
$Pending = $false
|
||||
|
||||
if(Test-Path `
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending")
|
||||
{
|
||||
|
||||
$Pending = $true
|
||||
|
||||
}
|
||||
|
||||
if(Test-Path `
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired")
|
||||
{
|
||||
|
||||
$Pending = $true
|
||||
|
||||
}
|
||||
|
||||
if(Test-RegistryValue `
|
||||
"HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" `
|
||||
"PendingFileRenameOperations")
|
||||
{
|
||||
|
||||
$Pending = $true
|
||||
|
||||
}
|
||||
|
||||
if($Pending)
|
||||
{
|
||||
|
||||
Write-Log "Neustart erforderlich"
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Write-Log "Kein Neustart erforderlich"
|
||||
|
||||
}
|
||||
|
||||
return $Pending
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
# SCHEDULED TASK
|
||||
############################################################
|
||||
|
||||
function Register-ResumeTask {
|
||||
|
||||
Write-Log "Erstelle Resume Task"
|
||||
|
||||
$Action = New-ScheduledTaskAction `
|
||||
-Execute "powershell.exe" `
|
||||
-Argument "-ExecutionPolicy Bypass -File `"$PSCommandPath`" -Resume"
|
||||
|
||||
$Trigger = New-ScheduledTaskTrigger `
|
||||
-AtStartup
|
||||
|
||||
Register-ScheduledTask `
|
||||
-TaskName "VeeamInstallerResume" `
|
||||
-Action $Action `
|
||||
-Trigger $Trigger `
|
||||
-RunLevel Highest `
|
||||
-Force |
|
||||
Out-Null
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
|
||||
function Remove-ResumeTask {
|
||||
|
||||
if(Get-ScheduledTask `
|
||||
-TaskName "VeeamInstallerResume" `
|
||||
-ErrorAction SilentlyContinue)
|
||||
{
|
||||
|
||||
Unregister-ScheduledTask `
|
||||
-TaskName "VeeamInstallerResume" `
|
||||
-Confirm:$false
|
||||
|
||||
Write-Log "Resume Task entfernt"
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
# RESTART
|
||||
############################################################
|
||||
|
||||
function Restart-AndResume {
|
||||
|
||||
Write-Log "Automatischer Neustart"
|
||||
|
||||
Save-State `
|
||||
-Step "Resume"
|
||||
|
||||
Set-ResumeFlag
|
||||
|
||||
Register-ResumeTask
|
||||
|
||||
Restart-Computer `
|
||||
-Force
|
||||
|
||||
exit
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
# RESUME
|
||||
############################################################
|
||||
|
||||
function Resume-Installation {
|
||||
|
||||
if(!(Test-Path $ResumeFlag))
|
||||
{
|
||||
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
Write-Log "Installation wird fortgesetzt"
|
||||
|
||||
$State = Load-State
|
||||
|
||||
if($null -eq $State)
|
||||
{
|
||||
|
||||
Stop-Installation "Statusdatei beschädigt."
|
||||
|
||||
}
|
||||
|
||||
Remove-ResumeTask
|
||||
|
||||
Clear-ResumeFlag
|
||||
|
||||
Remove-State
|
||||
|
||||
Write-Log "Fortsetzung abgeschlossen"
|
||||
|
||||
}
|
||||
|
||||
############################################################
|
||||
# STARTPARAMETER
|
||||
############################################################
|
||||
|
||||
param(
|
||||
|
||||
[switch]$Resume
|
||||
|
||||
)
|
||||
|
||||
if($Resume)
|
||||
{
|
||||
|
||||
Resume-Installation
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user