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

问题描述 投票:0回答:1

我正在运行以下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”失败,没有错误消息

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

powershell
1个回答
1
投票

这句话破了:

$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
}
© www.soinside.com 2019 - 2024. All rights reserved.