PowerShell start-sleep cmdlet

时间:2014-05-02 14:31:29

标签: powershell sleep cmdlet

嘿,我是PowerShell的新手,在他的博客上找到了Ed Wilson的一个有用的脚本: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 cmdlet的方式,因为我可以在没有Start-Sleep的情况下成功运行Restart-Computer cmdlet。问题是它没有等待gpupdate完成所以政策没有被推动。我运行脚本时没有出现任何错误,只是挂起。我让它运行了大约10分钟但没有成功。

感谢您提供有关使此脚本正常运行的任何帮助或建议。提前感谢任何意见。

2 个答案:

答案 0 :(得分:1)

您的睡眠调用没有任何问题,但这不是最好的方法。您可以等待作业完成超时(如果命令挂起),例如:

$job = icm -Session $session -ScriptBlock {gpupdate /force} -AsJob
Wait-Job $job -Timeout 120
Remove-PSSession $session
Restart-Computer $cn.name

答案 1 :(得分:0)

@Keith Hill说得对,睡觉看起来不错。您可以做的另一件事是将sleep / restart命令推送到目标计算机上:

icm -Session $session -ScriptBlock {
    gpupdate /force; Start-Sleep -s 120; Restart-Computer -Force}