Azure Devops:值不能为空,参数令牌

时间:2019-09-10 13:48:59

标签: azure powershell azure-active-directory azure-powershell

我正在Azure DevOps中运行Azure Powershell任务。 在脚本中,我使用以下命令

Get-AzureRmADUser -UserPrincipalName $adusernameNewPermission

但是我的发布管道失败,并显示以下错误代码

 ##[error]Value cannot be null.
Parameter name: token

首先,我认为该命令没有正确的上下文或足够的权限,所以我添加了默认配置文件。

Get-AzureRmADUser -DefaultProfile (Get-AzureRmContext) -UserPrincipalName $adusernameNewPermission

如果我打印该命令的输出,则GetAzureRmContext确实转到了正确的上下文。

该命令本身在本地运行时(使用我自己的用户帐户)没有任何问题,所以我认为其标题的唯一原因是服务连接无权执行该操作。但是,我的用户帐户对租户的权限最少,而天蓝色devops中的服务连接具有更多的权限。

这使我发疯,这是问题所在。这是什么意思?没有合理的错误信息:( 有人遇到相同的问题还是知道我想念的是什么?

PS:$ adusernameNewPermission变量的工作原理就像我说的一样,完全相同的代码可以在本地计算机上完美运行,唯一的区别是已登录的用户。

4 个答案:

答案 0 :(得分:0)

您尝试改为使用Get-azureaduser吗?这是一条命令,需要针对Azure AD对功能进行身份验证。

$azurePassword = ConvertTo-SecureString $env:client_secret -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($env:clientid , $azurePassword)
Connect-AzAccount -Credential $psCred -TenantId $env:tenantid -ServicePrincipal

答案 1 :(得分:0)

如果您使用“脚本文件路径”的脚本类型,请检查您是否没有尝试传递任何参数(例如-token)。

答案 2 :(得分:0)

我会尝试两件事以使您重温基础知识。这将让您知道它是否实际上是AzDO服务主体,以及在管道中使用的对象类型。

  1. 以最简单的形式测试命令的功能,并以帐户作为字符串运行它:
Get-AzureRmADUser -UserPrincipalName "achahbar@stankoverflow.com"

#OR

$UPN = "achahbar@stankoverflow.com"
Get-AzureRmADUser -UserPrincipalName $UPN

假设这可行,并且根据变量包含的内容,您只需要将UPN / Email对象传递给命令:

Get-AzureRmADUser -UserPrincipalName $adusernameNewPermission.UPN
  1. 如果这不起作用,请将您的任务更新为第4版(预览),然后将命令更新为Get-AzADUser,然后再次测试步骤1.

答案 3 :(得分:0)

我通过更改使用托管身份创建的Azure DevOps中的服务连接来解决此问题。我使用服务主体创建了一个新的服务连接,但这并没有给我关于值令牌的任何错误。希望以后寻找这个问题的任何人都能得到答案。