Командлет PowerShell start-sleep
Эй, я очень новичок в PowerShell и нашел один из полезных сценариев Эда Уилсона в его блоге: http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/12/force-a-domain-wide-update-of-group-policy-with-powershell.aspx.
Мне нужно было немного подстроить его под свои нужды, и мне нужна помощь в написании правильного кода.
Я просто буду использовать его код, потому что все, что я сделал, это заменил его своими учетными данными и информацией AD:
$cn = Get-ADComputer -filt *
$cred = Get-Credential iammred\administrator
$session = New-PSSession -cn $cn.name -cred $cred
icm -Session $session -ScriptBlock {gpupdate /force}
Я добавил следующие две строки, чтобы попытаться приостановить выполнение сценария, чтобы gpupdate обработал, а затем перезагрузить компьютер (-ы):
Start-Sleep -s 120
Restart-Computer -ComputerName $cn.name
Когда я запускаю скрипт все вместе, кажется, что он просто зависает после ввода моих учетных данных. Думаю, мне не понравится способ представления командлета Start-Sleep, потому что я могу успешно выполнить командлет Restart-Computer без Start-Sleep. Проблема в том, что gpupdate не дожидается завершения, чтобы политика не выдвигалась. Я не получаю никаких ошибок при запуске скрипта, он просто зависает. Я оставил его на 10 минут безуспешно.
Я ценю любую помощь или предложения, чтобы этот скрипт работал правильно. Спасибо заранее за любые данные.
2 ответа
Там нет ничего плохого в вашем вызове сна, но это не лучший способ пойти. Вы можете подождать, пока задание закончится, с таймаутом (в случае зависания команды), например:
$job = icm -Session $session -ScriptBlock {gpupdate /force} -AsJob
Wait-Job $job -Timeout 120
Remove-PSSession $session
Restart-Computer $cn.name
@ Кит Хилл прав, сон выглядит хорошо. Еще одна вещь, которую вы можете сделать, это отправить команды sleep/restart на ваши целевые машины:
icm -Session $session -ScriptBlock {
gpupdate /force; Start-Sleep -s 120; Restart-Computer -Force}