Проверьте, нужна ли перезагрузка, и продолжите сценарий Powershell после перезагрузки?
Этот вопрос задавался несколько раз прежде, но я не мог найти решение моего сценария ни в одном из них.
По сути, мне нужно, чтобы скрипт продолжал работу после перезагрузки, если это необходимо. Он проверит несколько ключей реестра и определит необходимость перезагрузки компьютера.
Я пытался использовать "рабочий процесс" по-разному, но не смог заставить его работать успешно.
Вот примерное описание моего кода:
function (check-if-computer-needs-a-reboot){
if(this and that)
try{
return $true
}
catch{}
return $false
}
if(check-if-computer-needs-a-reboot = $true){
Write-Host "The machine is rebooting..."
Restart-Computer -Wait -Force
Write-Host "The machine was successfully rebooted"
}
else
{
Write-Host "No pending reboot"
}
Надеясь на волшебников переполнения стека, может помочь.
Любая помощь будет оценена!!!
1 ответ
Чтобы продолжить что-то делать после перезагрузки, вам нужно добавить значение в ключ реестра Runonce, чтобы указать, что делать после перезагрузки.
Break Разбейте ваш скрипт на две части (Preboot и Postboot). Поместите следующее в конец Preboot.ps1:
if(check-if-computer-needs-a-reboot){
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce" /V "Postboot" /d "\"%~dpPostboot.ps1\" MyParameters" /t REG_SZ /f
Write-Host "The machine is rebooting..."
Restart-Computer -Wait -Force
}
# Fall through if reboot was not needed, so continue with part 2
Write-Host "No pending reboot... continuing"
"%~dpPostboot.ps1"
Заметки:
Я скопировал это из файла .bat. В файле .bat «%~dp0» означает «диск и путь, с которого выполняется текущий скрипт». Синтаксис в Powershell может немного отличаться.
Хотя Powershell может запускать другие программы, такие как REG.EXE, у Powershell есть собственный встроенный HKLM: PSdrive. Это должно быть более эффективно, чем использование REG.EXE. Я оставляю это вам, чтобы сделать преобразование.
В своем коде вы проверяете, "равно" ли логическое значение $True. Это сравнение никогда не требуется, если только значение не является логическим и может быть чем-то отличным от True или False. Просто проверьте само логическое значение, как показано выше.