我有2个Powershell脚本
script1.ps1
包含对Vault的REST调用,该调用返回包含某些键/值的json响应。
Function getValues($token) {
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("X-Vault-Token", $token)
$response = Invoke-RestMethod -method GET -uri "https://vault.com:8243/v1/secret/vault/development" -ContentType 'application/json' -headers $headers
$response.data| ConvertTo-Json -depth 100
}
getValues $token
假设响应中的那些键之一如下:
key1:value123
script2.ps1
这样呼叫scrip1.ps1
$currentDirectory = "D:\\Scripts"
$response = & "$currentDirectory\script1.ps1" | ConvertFrom-Json
$pass = $response[1]."key1"
$pass
如果我在本地测试并且按预期获得value123
作为输出,则该块执行得很好
现在,作为调用script2.ps1
的构建的一部分,我在TFS上设置了WinRM远程Powershell任务。
当然,我几乎将所有内容都记录到了script2
中的一个日志文件中,因此我可以看到除响应之外的所有输出都令人兴奋。响应不会被返回!
当我运行TFS构建时,$ pass不打印任何内容,但在本地打印就可以了
我是否需要为TFS专门包装此命令?我在这里想念什么吗?
答案 0 :(得分:1)
我终于找到了问题
我们将令牌保存在无法从脚本调用的USER环境变量中。我认为在进行测试时,因为我以所述用户身份登录服务器,所以脚本起作用是因为它可以识别用户并能够获取环境变量。
但是,当我使用远程Powershell从TFS运行时,它无法识别用户env变量。
在SYSTEM环境变量中设置环境变量标记有效!