1

我有一个脚本(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
4

2 回答 2

1

Write-Error我相信,只写非终止错误,所以也许工作是感觉到有错误,但不一定是终止错误。

您可能想尝试使用throw而不是Write-Error,或者使用非零返回码显式退出(尽管我不确定后者在报告作业状态时是否真的有很大的不同)。

要更深入地了解终止和非终止错误,以及何时使用Write-Errorvs. throw,请查看此线程

于 2013-08-08T21:17:13.360 回答
0

您可以使用throwwebdploy.ps1 中的命令将作业状态设置为失败。

例子:

PS F:\> Start-Job -ScriptBlock { throw "error" }

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
5               Job5            Running    True            localhost             throw "error"


PS F:\> Get-Job

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
5               Job5            Failed     False           localhost             throw "error"
于 2013-08-08T21:16:33.950 回答