【问题标题】:Powershell Workflow to reboot computers用于重新启动计算机的 Powershell 工作流
【发布时间】:2017-11-08 22:24:25
【问题描述】:

代码:

workflow Test-RemoteReboot{
    param ([string[]]$serverNames)
    foreach -parallel($server in $serverNames){
        Restart-Computer -PSComputerName $server -Wait -Force
    }
}

Test-RemoteReboot SP,SP2

问题: 这是我在 powershell 中构建的相当长的工作流程的一小段摘录。无论如何,这应该可以工作,但我收到以下错误(即使单独运行此脚本):

Microsoft.PowerShell.Utility\Write-Error :运行命令停止,因为首选项变量“ErrorActionPreference”或通用参数设置为停止:计算机 SP2 是 跳过。无法通过 WMI 服务检索其 LastBootUpTime,并显示以下错误消息: RPC 服务器不可用。 (来自 HRESULT 的异常:0x800706BA)。 在行:433 字符:25 + ... Receive-Job -Job $job -Wait -Verbose -Debug -ErrorAction ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], ActionPreferenceStopException + FullyQualifiedErrorId:System.Management.Automation.ActionPreferenceStopException,Microsoft.PowerShell.Commands.WriteErrorCommand + PSComputerName : [本地主机]

我查看了 RPC 服务器不可用问题。防火墙已关闭,RPC 服务正在运行,服务器在域上,工作流从域成员计算机运行,作为域管理员。我可以成功地 PSRemote 进入机器并做任何事情。我什至可以这样做:

workflow Test-LocalRebootRemotely{
param ([string[]]$serverNames)
    foreach -parallel($server in $serverNames){
        InlineScript { Restart-Computer -Force } -PSComputerName $server
    }
}

Test-LocalRebootRemotely SP,SP2

问题是,我需要一个返回值来确定我是否需要重新启动并处理远程计算机之外的其他逻辑。我确实注意到在它出错之前有一个异常暂停。所以也许它是一个超时?有人有类似的问题吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以尝试使用带有-Protocol WSMan 参数的Restart-Computer cmdlet,而不是默认的DCOM over RPC 协议(-Protocol DCOM)。

    这将确认您的 RPC 网络数据包在某处被阻止。

    【讨论】:

    • 默认的 help page for Restart-Computer 显示版本 7 不再具有此属性。您必须查看version 5.1
    • @Stoinov 是的,PowerShell 7 不再使用 DCOM。因此,如果是防火墙问题,您将无法运行任何远程 cmdlet。
    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2021-11-19
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多