2014-05-02 66 views
0

嘿,我对PowerShell非常陌生,在他的博客中发现了一个Ed Wilson的有用脚本:http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/12/force-a-domain-wide-update-of-group-policy-with-powershell.aspxPowerShell启动 - 睡眠cmdlet

我需要为我的需要定制它,只需要一些帮助获取正确的代码。

我将只使用自己的代码,因为我所做的就是用我的凭据和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的方式,因为我可以在没有启动 - 睡眠的情况下成功运行Restart-Computer cmdlet。问题是它不会等待gpupdate完成,因此策略不会被推送。我在运行脚本时没有遇到任何错误,它只是挂起。我已经离开它跑了约10分钟,但没有成功。

我感谢任何帮助或建议,以使此脚本正常工作。预先感谢您的任何意见。

回答

0

你的睡眠调用没有问题,但它不是最好的方法。您可以等待在工作与超时(如果命令挂起)来完成例如: -

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

非常感谢。非常好,感谢您使用我已阅读过的-AsJob cmdlet的示例,但不知道如何正确使用它。 –

0

@Keith山是正确的,睡眠看起来不错。你可以做的另一件事是推动睡眠/重新启动命令到你的目标机器上:

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

当我添加此代码时,出现错误,指出客户端无法连接到目标。我验证了我正在测试的机器运行在通过winrm quickconfig接受请求。还有什么我可能需要做的?感谢您的帮助。 –