代码:
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”或common参数设置为Stop:计算机SP2为 跳过。无法通过WMI服务检索其LastBootUpTime,并显示以下错误消息:RPC服务器不可用。 (来自HRESULT的异常:0x800706BA)。 在行:433 char:25 + ...接收 - 工作 - 工作$ job -Wait -Verbose -Debug -ErrorAction ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo:NotSpecified:(:) [Write-Error],ActionPreferenceStopException + FullyQualifiedErrorId:System.Management.Automation.ActionPreferenceStopException,Microsoft.PowerShell.Commands.WriteErrorCommand + PSComputerName:[localhost]
我查看了RPC服务器不可用的问题。防火墙已关闭,RPC服务正在运行,服务器位于域中,工作流程从域成员计算机运行,作为域管理员。我可以成功地PSRemote进入机器并做任何事情。我甚至可以这样做:
workflow Test-LocalRebootRemotely{
param ([string[]]$serverNames)
foreach -parallel($server in $serverNames){
InlineScript { Restart-Computer -Force } -PSComputerName $server
}
}
Test-LocalRebootRemotely SP,SP2
问题是,我需要一个返回值来确定是否需要重新启动并处理远程计算机之外的其他逻辑。我注意到它出错之前就有一个异常的暂停。也许这是暂停?有人有类似的问题吗?
答案 0 :(得分:0)
您可以使用Restart-Computer
参数尝试-Protocol WSMan
cmdlet,而不是使用默认的DCOM over RPC协议(-Protocol DCOM
)。
这将确认您的RPC网络数据包在某处被阻止。