我想检查最后一个命令的状态,并根据退出代码,进一步执行命令。
最后一个执行命令是:
$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
语句?
答案 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
}