我的关机脚本使用Shutdown -R
命令对机器进行大规模重新启动。如果Shutdown -R
抛出类似"RPC服务不可用,或访问被拒绝"的错误,我无法捕捉到它,或者只是不知道如何捕捉。有人能帮忙吗?我不想在powershell中使用"重新启动计算机",因为您不能延迟重新启动,也不能添加注释。
foreach($PC in $PClist){
ping -n 2 $PC >$null
if($lastexitcode -eq 0){
write-host "Rebooting $PC..." -foregroundcolor black -backgroundcolor green
shutdown /r /f /m \$PC /d p:1:1 /t 300 /c "$reboot_reason"
LogWrite "$env:username,$PC,Reboot Sent,$datetime"
} else {
write-host "$PC is UNAVAILABLE" -foregroundcolor black -backgroundcolor red
LogWrite "$env:username,$PC,Unavailable/Offline,$datetime"
}
}
如果在$PC
上启用PowerShell远程处理,则可能会出现以下情况:
Invoke-Command -Computer $PC { shutdown /r /f /d p:1:1 /t 300 /c $ARGV[0] } `
-ArgumentList $reboot_reason
-Computer
选项采用一组名称/IP。
如果你想坚持你的方法,只从shutdown.exe
中捕捉错误,那么在命令之后评估$LastExitCode
:
shutdown /r /f /m \$PC /d p:1:1 /t 300 /c "$reboot_reason" 2>$null
if ($LastExitCode -ne 0) {
Write-Host "Cannot reboot $PC ($LastExitCode)" -ForegroundColor black `
-BackgroundColor red
} else {
LogWrite "$env:username,$PC,Reboot Sent,$datetime"
}
2>$null
抑制实际错误消息,并且对$LastExitCode
的检查触发成功/失败动作。