0

嘿,我对 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 分钟,但没有成功。

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

4

2 回答 2

1

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

$job = icm -Session $session -ScriptBlock {gpupdate /force} -AsJob
Wait-Job $job -Timeout 120
Remove-PSSession $session
Restart-Computer $cn.name
于 2014-05-02T14:37:52.247 回答
0

@Keith Hill 是对的,睡眠看起来不错。您可以做的另一件事是将睡眠/重启命令推送到目标机器上:

icm -Session $session -ScriptBlock {
    gpupdate /force; Start-Sleep -s 120; Restart-Computer -Force}
于 2014-05-02T14:41:09.450 回答