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

时间:2014-07-28 11:48:30

标签: powershell

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

最后一个执行命令是:

$hiveJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition  $hiveJobDefinition
Wait-AzureHDInsightJob -Job $hiveJob -WaitTimeoutInSeconds 5400
Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $hiveJob.JobId -StandardOutput

输出结果为:

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  

现在,我想只在exitcode为零时执行更多命令。如何为此条件编写if语句?

2 个答案:

答案 0 :(得分:22)

你在谈论“退出代码”。如果您的意思是$LastExitCode automatic variable,则仅在您调用Windows程序时填充它,例如RAR:

$x=rar
$LastExitCode

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

但是,

cmdlet不会填充此变量。您可以使用另一个自动变量$?

$x=gci
$?

如果命令成功完成,则仅提供$True;如果出现错误,则仅提供$False

答案 1 :(得分:3)

来自Get-Help about_If:

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

   if (<test1>)
       {<statement list 1>}
   [elseif (<test2>)
       {<statement list 2>}]
   [else
       {<statement list 3>}]

注意:elseif周围的方括号表示它们是可选的。

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

$hiveJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition  $hiveJobDefinition
Wait-AzureHDInsightJob -Job $hiveJob -WaitTimeoutInSeconds 5400
$Result = Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $hiveJob.JobId -StandardOutput

然后

if ($Result.ExitCode -eq 0)
  {
    #More commands
  }