Командлет 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}
Другие вопросы по тегам