【问题标题】:PowerShell start-sleep cmdletPowerShell 启动睡眠 cmdlet
【发布时间】:2014-06-19 06:49:04
【问题描述】:

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

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

【问题讨论】:

    标签: powershell sleep cmdlet


    【解决方案1】:

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

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

    【讨论】:

    • 当我添加此代码时,我收到一条错误消息,指出客户端无法连接到目的地。我验证了我正在测试运行它的机器正在通过 winrm quickconfig 接受请求。还有什么我可能需要做的吗?顺便感谢您的帮助。
    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢。效果很好,感谢您提供有关如何使用 -AsJob cmdlet 的示例,我已经阅读过但不知道如何正确使用它。
    猜你喜欢
    • 1970-01-01
    • 2015-09-19
    • 2017-06-26
    • 2015-09-16
    • 2012-04-07
    • 1970-01-01
    • 2014-07-17
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多