Почему эта команда не выполняется со сборкой TFS?

У меня есть 2 скрипта powershell

script1.ps1 содержит вызовы REST к Vault, которые возвращают ответ 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 результат, как и ожидалось

теперь я настроил удаленную задачу powershell WinRM на TFS как часть сборки, которая вызывает script2.ps1.

конечно, я записываю почти все в файл журнала в моем script2, чтобы я мог видеть все, что происходит на выходе, кроме ответа. ответ не возвращается вообще!

$pass ничего не печатает, когда я запускаю сборку TFS, но локально печатает нормально

есть ли что-то особенное, что я должен обернуть этой командой специально для TFS? я что-то пропустил здесь??

запись-вывод может быть?

lloyd 30.05.2019 02:30

@lloyd нет, не работает. чего я не понимаю, так это того, что я даже не пытаюсь распечатать это на консоли TFS, а просто получаю значение, хранящееся в переменной, и использую его где-то еще. он ничего не хранит

Cataster 30.05.2019 02:32

что содержит ответ?

lloyd 30.05.2019 02:33

@lloyd ключ1:значение123 . Затем $pass должен содержать значение123. он отлично работает локально, но сборка из TFS, нет

Cataster 30.05.2019 02:33

вы возвращаете его как массив ,$stuff в сценарии 1? как вы мешаете ps возвращать журналы в сценарии 1?

lloyd 30.05.2019 02:36

@lloyd нет. проверьте мой пост, я обновил то, что у меня есть в script1

Cataster 30.05.2019 02:37
Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ возвращает массив, поэтому мне не нужно преобразовывать его туда и обратно из этой точки, если только вы не хотите передать его в виде строки. return ,$response не должен требовать convertto-json и convertfrom-json?
lloyd 30.05.2019 02:49

@lloyd Я следил за ответом здесь, который с тех пор отлично работает локально: stackoverflow.com/a/56119686/8397835?

Cataster 30.05.2019 02:59

@Cataster, где существуют оба скрипта? на целевой машине или на машине агента?

Shayki Abramczyk 30.05.2019 08:23

@Shayki Abramczyk, сценарии находятся на целевой машине, поэтому я выбрал удаленное управление PowerShell (WinRM)

Cataster 30.05.2019 08:36

@Cataster Хорошо, вы пробовали запускать сценарии на машине агента (с помощью обычного тасла powershell), чтобы проверить, работает ли он?

Shayki Abramczyk 30.05.2019 08:44

@ShaykiAbramczyk я понял это! поэтому я использовал переменную среды для набора токенов в переменных USER env. По-видимому, это должно быть сохранено в системных переменных env.

Cataster 30.05.2019 17:39

@lloyd наконец-то понял!! см. ответ

Cataster 30.05.2019 17:46

Здорово! Хорошо поймал!

Shayki Abramczyk 30.05.2019 18:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
14
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я наконец-то разобрался с проблемой

У нас был токен, сохраненный в переменных окружения USER, из которого скрипт не смог вызвать. Я думаю, что когда я тестировал, потому что я вошел на сервер как указанный пользователь, сценарий работал, потому что он распознал пользователя и смог получить переменную среды.

Однако, когда я запускаю TFS с помощью удаленного Powershell, он не распознает пользовательскую переменную env.

Установка токена переменной env в системных переменных env сработала!

Другие вопросы по теме