首页 > 解决方案 > Get-AzADServicePrincipal ApplicationId 在 powershell-pipeline 中为空,但在 shell 上工作

问题描述

Write-Host "Adding permissions to key vault"
$objectId=(Get-AzDataFactoryV2 -ResourceGroupName $rgName -Name $adfName).Identity.PrincipalId
$appId = (Get-AzADServicePrincipal -ObjectId $objectId).ApplicationId
Write-Host "~### error empty appId =" $appId
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $appId -PermissionsToSecrets Get

这个脚本是从管道执行的,“$appId”是空的。但它适用于云 shell。

标签: azureazure-powershell

解决方案


我想您没有在 devops 管道中授予资源管理器服务连接的服务主体的权限。

我可以使用无权获取服务主体的服务主体重现您的问题,没有错误消息,也没有输出,如果您在本地运行命令,捕获请求,您会发现403错误。

在此处输入图像描述

但它适用于云壳。

在 cloud shell 中,它使用您登录到 cloud shell 的用户帐户的凭据。如果有效,则仅表示您的用户帐户有权获取服务主体。

要解决此问题,请导航到Azure Active Directory门户中的 -> App registrations-> All applications-> 找到与服务连接对应的应用程序,其名称应为organizationname-projectname-513f22f1-befd-xxxxxxcfe90f1. 然后单击它-> 添加权限,如屏幕截图(注意:您的用户帐户需要管理员角色才能单击Grant admin consent按钮,例如Global admin)。

在此处输入图像描述

在此处输入图像描述

授予权限后,稍等片刻,服务连接的服务主体就能获取到服务主体,脚本应该可以正常运行了。


推荐阅读