使用"if"语句检查上一个命令的退出代码

use*_*725 15 powershell

我想检查最后一个命令的状态,并根据退出代码,命令将进一步执行.

最后一个命令执行:

$hiveJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition  $hiveJobDefinition
Wait-AzureHDInsightJob -Job $hiveJob -WaitTimeoutInSeconds 5400
Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $hiveJob.JobId -StandardOutput
Run Code Online (Sandbox Code Playgroud)

输出是:

Cluster         : crmhdinsight  
ExitCode        : 0  
Name            : Hive: show tables;  
PercentComplete :   
Query           : show tables;  
State           : Completed  
StatusDirectory : 7dc4b67f-99a9-4c6b-a9f3-ffe8b4e29c7e  
SubmissionTime  : 7/28/2014 11:44:04  
AMJobId         : job_1406103802152_0053  
Run Code Online (Sandbox Code Playgroud)

现在,我只想在exitcode为零时执行更多命令.我如何if为这种情况写一份声明?

Ada*_*ski 26

你在谈论"退出代码".如果您的意思是$LastExitCode 自动变量,它只会在您调用Windows程序时填充,例如RAR:

$x=rar
$LastExitCode
Run Code Online (Sandbox Code Playgroud)

它将返回退出代码7(如果您安装了RAR).

但是,cmdlet不会填充此变量.您可以使用另一个自动变量$?:

$x=gci
$?
Run Code Online (Sandbox Code Playgroud)

它仅$True在命令成功完成或$False出现错误时给出.


mjo*_*nor 6

来自获取帮助 about_If:

语法 以下示例显示 If 语句语法:

   if (<test1>)
       {<statement list 1>}
   [elseif (<test2>)
       {<statement list 2>}]
   [else
       {<statement list 3>}]
Run Code Online (Sandbox Code Playgroud)

注意:elseif 和 else 两边的方括号表示它们是可选的。

将返回的对象分配给变量:

$hiveJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition  $hiveJobDefinition
Wait-AzureHDInsightJob -Job $hiveJob -WaitTimeoutInSeconds 5400
$Result = Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $hiveJob.JobId -StandardOutput
Run Code Online (Sandbox Code Playgroud)

然后

if ($Result.ExitCode -eq 0)
  {
    #More commands
  }
Run Code Online (Sandbox Code Playgroud)