如何确定脚本是否返回退出状态代码1或0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确定脚本是否返回退出状态代码1或0相关的知识,希望对你有一定的参考价值。

我正在运行以下PowerShell脚本,以便为存储帐户提供Azure IAM访问权限

#Read stdin as string
$jsonpayload = [Console]::In.ReadLine()

#Convert to JSON
$json = ConvertFrom-Json $jsonpayload

#Access JSON values
$userName = $json.userName
$resourceType = $json.resourceType
$resourceGroupName = $json.resourceGroupName

$objectid = (Get-AzureRmADUser -SearchString $userName).Id

$Result = New-AzureRmRoleAssignment -ObjectId $objectid -
RoleDefinitionName Reader -ResourceGroupName $resourceGroupName

if ($Result.ExitCode -ne 0) {
    exit 1
} else {
    # Return role result
    Write-Output '{ "roleResult" : "Role assigned successfully" }'
}

如果没有错误,如何显示成功消息,是否有任何替代解决方案来处理此问题

我收到了错误

命令“Powershell.exe”失败,没有错误消息

如果脚本没有抛出任何错误。

答案

这句话破了:

$Result = New-AzureRmRoleAssignment -ObjectId $objectid -
RoleDefinitionName Reader -ResourceGroupName $resourceGroupName

它应该如下所示:

$Result = New-AzureRmRoleAssignment -ObjectId $objectid -RoleDefinitionName Reader -ResourceGroupName $resourceGroupName

另外,根据documentationNew-AzureRmRoleAssignment返回一个PSRoleAssignment对象,它没有属性ExitCode,你也不会检查像这样的cmdlet的状态。 PowerShell有一个布尔值automatic variable $?,它指示最后一个cmdlet调用是否成功,因此您的代码应如下所示:

$Result = New-AzureRmRoleAssignment -ObjectId $objectid -RoleDefinitionName Reader -ResourceGroupName $resourceGroupName

if ($?) {
    # Return role result
    Write-Output '{ "roleResult" : "Role assigned successfully" }'
} else {
    exit 1
}

以上是关于如何确定脚本是否返回退出状态代码1或0的主要内容,如果未能解决你的问题,请参考以下文章

Python 的默认退出代码是啥?

返回与 bash 脚本中返回的命令不同的退出代码

从最后一个管道(stdin)获取退出代码

设置退出状态代码的最佳实践

使用 --help 参数调用的 bash 脚本应该返回 0 还是非零退出代码? [关闭]

源 shell 脚本的退出代码