【问题标题】:Determining if a Powershell command was successful确定 Powershell 命令是否成功
【发布时间】:2011-04-28 08:16:15
【问题描述】:

嗨,我对 Powershell 很陌生,但我有一个琐碎的问题。我希望能够判断命令是否已成功完成,以便向主机发送有意义的消息。

我正在使用appcmd 命令在 IIS 中添加绑定。基本上是这样的:

./appcmd set site /site.name:........................

但是我如何进行检查以确保它成功与否?

我想如果我只是在该语句之后加上Write-Host "Successfully added binding",无论appcmd 是否成功,它都会触发。

我猜我需要做类似的事情:

$successful = ./appcmd set site /site.name:........................

但是$successful 似乎是一个包含 msg 结果的字符串?

感谢任何帮助!干杯

【问题讨论】:

    标签: powershell logic appcmd


    【解决方案1】:

    假设 appcmd 是一个控制台 exe,即使它出错,脚本中的下一行也会执行。

    如果您想测试 EXE 是否出错并且 EXE 使用标准的 0 退出代码表示成功,则只需在调用 EXE 后立即检查 $? 特殊变量。如果它是 $true,那么 EXE 返回一个 0 退出代码。

    如果 EXE 在其成功返回的退出代码方面是非标准的(可能它有多个成功代码),则检查 $LastExitCode 以获取最后一个 EXE 返回的确切退出代码。

    【讨论】:

    • 感谢您的回答。所以我假设$?$LastExitCode 是相对的?假设我在整个脚本中执行这个(或另一个)cmd - 这些变量与执行的最后一个命令相关?
    • 没错。 $? 适用于所有命令执行。表示上一条命令成功。请注意,非终止错误 (Get-ChildItem idontexist) 仍会导致 $? 返回 true。如果命令引发终止错误,则 $? 返回 $false。如有必要,您可以使用通用参数-ErrorAction Stop 强制命令将非终止错误转换为终止错误。 $LastExitCode 保存最近执行的 EXE 的退出代码。