我正在运行以下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
另外,根据documentation,New-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
}