C'è un grande articolo su TechNet della serie Hey, Scripting Guy che si riferisce a una situazione molto simile a quella che stai descrivendo: Rinominare un computer e riprendere lo script dopo il riavvio. La magia è quello di utilizzare i nuovi flussi di lavoro che fanno parte della versione 3:
workflow Rename-And-Reboot {
param ([string]$Name)
Rename-Computer -NewName $Name -Force -Passthru
Restart-Computer -Wait
Do-MoreStuff
}
Una volta che il flusso di lavoro è stato dichiarato (non si assegna a una variabile), si può chiamare come se si trattasse di un normale cmdlet. La vera magia è il parametro -Wait
nel cmdlet Riavvia-Computer.
Rename-And-Reboot PowerShellWorkflows
Fonte: http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/23/powershell-workflows-restarting-the-computer.aspx
Se PowerShell v3 o poi non è una scelta a disposizione, si potrebbe rompere il vostro script esistente in più script più piccoli e avere uno script principale che viene eseguito all'avvio, controlla qualche stato salvato da qualche parte (file, registro, ecc.), quindi avvia l'esecuzione di un nuovo script per continuare laddove appropriato. Qualcosa di simile:
$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" }
}
Basta essere sicuri di ricordare di impostare il tuo stato in modo appropriato come ci si sposta attraverso i vostri script più piccoli.
In passato il modo in cui ho fatto questo negli script è quello di impostare una chiave RunOnce nel Registro di sistema che esegue lo script con un parametro che dovrebbe fare la parte dopo il riavvio dello script. – EBGreen
Come specificare da quale parte dello script continuare? – PnP
In ritardo verso la parte, ma un modo è eseguito 'script1.ps1' che prima di riavviare il server aggiunge un programma RunOnce per eseguire' script2.ps1' ma mi piacerebbe aggiungere un po 'di sonno per consentire al server di avviarsi completamente prima di tentare di eseguire una sceneggiatura. – user4317867