В TechNet есть серия статей из серии Hey, Scripting Guy, которая описывает ситуацию, очень похожую на то, что вы описываете: переименование компьютера и возобновление сценария после перезагрузки. Магия использовать новые технологические процессы, которые являются частью 3-й версии:
workflow Rename-And-Reboot {
param ([string]$Name)
Rename-Computer -NewName $Name -Force -Passthru
Restart-Computer -Wait
Do-MoreStuff
}
После того, как рабочий процесс был объявлен (не присвоить его переменной), вы можете назвать это, как если бы это был обычный командлет. Настоящей магией является параметр -Wait
в командлете Restart-Computer.
Rename-And-Reboot PowerShellWorkflows
Источник: http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/23/powershell-workflows-restarting-the-computer.aspx
Если PowerShell v3 или более поздней версии не доступен выбор, вы могли бы сломать существующий скрипт на несколько небольших сценариев и есть мастер-скрипт, который запускается при старте, проверяет некоторое сохраненное состояние где-нибудь (файл, реестр и т. д.), затем начинает выполнение нового скрипта, чтобы продолжить, где это необходимо. Что-то вроде:
$state = Get-MyCoolPersistedState
switch ($state) {
"Stage1" { . \Path\To\Stage1.ps1 ; break }
"Stage2" { . \Path\To\Stage2.ps1 ; break }
"Stage3" { . \Path\To\Stage3.ps1 ; break }
default { "Uh, something unexpected happened" }
}
Просто не забудьте запомнить свое состояние надлежащим образом при перемещении по вашим маленьким сценариям.
В прошлом так, что я делал это в сценариях, чтобы установить ключ Runonce в реестре, который запускает скрипт с параметром, который он должен сделать пост перезагрузки часть сценария. – EBGreen
Как я могу указать, из какой части скрипта продолжить? – PnP
Поздно к вечеринке, но один из способов запускается 'script1.ps1', который перед перезагрузкой сервера добавляет ключ реестра RunOnce для запуска скрипта2.ps1, но я бы посоветовал добавить некоторый сон, чтобы позволить серверу полностью загрузиться, прежде чем пытаться запустить сценарий. – user4317867