为什么该命令不能与TFS构建一起执行?

时间:2019-05-30 00:07:59

标签: powershell tfs

我有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专门包装此命令?我在这里想念什么吗?

1 个答案:

答案 0 :(得分:1)

我终于找到了问题

我们将令牌保存在无法从脚本调用的USER环境变量中。我认为在进行测试时,因为我以所述用户身份登录服务器,所以脚本起作用是因为它可以识别用户并能够获取环境变量。

但是,当我使用远程Powershell从TFS运行时,它无法识别用户env变量。

在SYSTEM环境变量中设置环境变量标记有效!

相关问题