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

时间:2018-11-05 12:56:47

标签: powershell

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

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

1 个答案:

答案 0 :(得分: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
}
相关问题