在AzureDevOps API的Invoke-RestMethod上传递凭据以检索用户

时间:2018-10-10 09:12:57

标签: api azure powershell automation azure-devops

我正在尝试创建一个Powershell脚本,该脚本将使用REST API从AzureDevOps组织中检索大量用户。我已经加密了密码并将其放入凭据中,但是却出现了这样的错误:

Invoke-RestMethod : Cannot process argument transformation on parameter 
'Credential'. 
 userName
At D:\Others\Retrieve Users.ps1:11 char:80
+ ... stakeholderUrl -Method Get -Credential $webclient.Credentials).identi 
...
+                                            ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidData: (:) [Invoke-RestMethod], 
    ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : 
ParameterArgumentTransformationError,Microsoft.PowerShell.
Commands.InvokeRestMethodCommand

这是我的Powershell脚本代码:

$stakeholderUrl = 
"https://vsaex.dev.azure.com/[organizationName]/_apis/userentitlements?api- 
version=5.0-preview.2"

$password = Get-Content D:\GetUsers\password.txt | ConvertTo-SecureString - 
Key (Get-Content D:\GetUsers\aes.key)
$credential = New-Object 
System.Net.NetworkCredential("sample@abc.com",$password)


$stakeholder = (Invoke-RestMethod -Uri $stakeholderUrl -Method Get - 
Credential $credential).identities

$StakeholderUsers = @()

foreach($user in $stakeholder){

$customObject = new-object PSObject -property @{
      "Display Name" = $user.displayName
      "Email" = $user.mailAddress
      "License" = $user.licenseDisplayName
    } 

$StakeholderUsers += $customObject      
}

$StakeholderUsers | Select `
            displayName,
            mailAddress, 
            licenseDisplayName

如果能帮助我,我将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

以这种方式存储凭据:

domain\username:password

$Credentials= Get-Content D:\GetUsers\Credentials.txt

创建Base64编码的基本授权标头:

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}" -f $Credentials)))

调用其余部分:

$result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}