【发布时间】:2020-02-27 05:42:49
【问题描述】:
我有一个 powershell 脚本,我想将它作为发行版的一部分运行。该脚本将创建一个 ServiceNow 更改请求。如果我在脚本中嵌入用户和密码(存储为变量),该脚本就可以正常工作,这非常适合测试。现在我想将用户名和密码存储在 TFS 变量中。
当 TFS 变量存储为纯文本时,我成功地提取了它们。但是,当我“锁定”变量中的密码(使其隐藏)时,ServiceNow 的身份验证失败。我确定这与我使用的方法有关,但我不是真正的程序员,我只是将代码片段拼凑在一起。这是脚本的一部分:
$user = "tfs_changerequest"
$pass = "$env:SNPWD-Hidden" # doesn't work with hidden password
# Show SN Password #
Write-Output "SN Password #" $pass # This looks correct
Write-Output "SN PW Hidden #" $SNPWD-Hidden # This appears to have worked
# Build auth header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))
# Set proper headers
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
$headers.Add('Accept','application/json')
$headers.Add('Content-Type','application/json')
这只是一个 sn-p 但我得到的错误是:
##[error]Invoke-RestMethod : The remote server returned an error: (401) Unauthorized.
我认为这与 $base64AuthInfo 行有关,我猜密码变量 ($pass) 必须不隐藏,但我不知道该怎么做。
【问题讨论】:
标签: tfs passwords environment-variables