azure - 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。
解决方案
我想您没有在 devops 管道中授予资源管理器服务连接的服务主体的权限。
我可以使用无权获取服务主体的服务主体重现您的问题,没有错误消息,也没有输出,如果您在本地运行命令,捕获请求,您会发现403
错误。
但它适用于云壳。
在 cloud shell 中,它使用您登录到 cloud shell 的用户帐户的凭据。如果有效,则仅表示您的用户帐户有权获取服务主体。
要解决此问题,请导航到Azure Active Directory
门户中的 -> App registrations
-> All applications
-> 找到与服务连接对应的应用程序,其名称应为organizationname-projectname-513f22f1-befd-xxxxxxcfe90f1
. 然后单击它-> 添加权限,如屏幕截图(注意:您的用户帐户需要管理员角色才能单击Grant admin consent
按钮,例如Global admin
)。
授予权限后,稍等片刻,服务连接的服务主体就能获取到服务主体,脚本应该可以正常运行了。
推荐阅读
- prolog - 带分解的 Prolog 练习
- imagemagick - ImageMagick - 部分伽玛校正
- javascript - 获取下拉菜单值的日期时间并将其与文本框日期时间一起添加
- c# - 使用正则表达式验证 SQL 查询
- c# - 在 .NET C# 中忽略 64 位程序集中的 32 位第三方 dll 错误
- ios - 如何通过使用 Ionic1 在 iPhone/iPad 上点击下一个键进入下一个输入?
- mysql - 从现在到一周 MYSQL 从客户那里获得生日
- sql-server - 由于 SQL Server 嵌套循环运算符中的基数估计错误导致的性能问题
- sapui5 - 上传多个员工的集合
- laravel - 如何将查询构建器代码转换为 Eloquent?