【发布时间】:2013-08-08 20:46:38
【问题描述】:
我有一个脚本 (webdeploy.ps1),可以通过调用命令在本地或远程正常运行。由于某种原因,webdeploy.ps1 将在到达脚本末尾之前失败并退出,这是由于 webdeploy.ps1 无法处理的一些灾难性错误(即磁盘空间不足)。脚本在记录错误的写入错误后终止。最终用户会收到通知。一切都很好。
现在,当通过 Invoke-Command -asjob 远程执行 webdeploy.ps1 时,即使脚本失败,作业状态也始终返回“已完成”。有什么方法可以将作业状态设置为失败,这样当我运行 get-job 时,我可以立即看到哪个服务器失败/成功完成。
foreach ($webserver in $webServers)
{
Invoke-Command -ComputerName $webServer -FilePath .\webdeploy.ps1 -AsJob -JobName "WebDeploy"
}
get-job | select name, id, State, Location | Format-Table -AutoSize
Name Id State Location
---- -- ----- --------
WebDeploy 102 Completed dev-web1
WebDeploy 104 Completed dev-web2
【问题讨论】:
-
你检查过
receive-job的输出吗?有时错误隐藏在我(有限的)经验中。 -
哦,是的,它记录在receive-job中。但是,检查每项工作是否存在失败或现在有点麻烦。想象一下这是一个大约 50 个 Web 服务器的部署。
-
我感受到你的痛苦。也许与$ErrorActionPreference 搞混可能有助于解决您的问题,尽管我还没有尝试过。
标签: powershell remoting exit-code invoke-command