Как сохранить 1 вывод из одного скрипта в другой? - PullRequest
0 голосов
/ 13 мая 2019

Предположим, у меня есть script1.ps1 со следующим кодом:

Function Renew_Token($token) {
    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("X-Vault-Token", $token)
    $response = Invoke-RestMethod  -method POST -uri "https://vault.com:8243/v1/auth/token/renew-self" -ContentType 'application/json' -headers $headers
    $response| ConvertTo-Json  -depth 100
}
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
}
Renew_Token $token
write-host "token renewed!"
write-host "Vault Values:"
getValues $token

Это возвращает мне ответ, подобный этому:

{
    "request_id":  "ghgdf5-yuhgt886-gfd76trfd",
    "lease_id":  "",
    "renewable":  false,
    "lease_duration":  0,
    "data":  null,
    "wrap_info":  null,
    "warnings":  null,
    "auth":  {
                 "client_token":  "i657ih4rbg68934576y",
                 "accessor":  "t543qyt54y64y654y",
                 "policies":  [
                                  "default",
                                  "vault"
                              ],
                 "token_policies":  [
                                        "default",
                                        "vault"
                                    ],
                 "metadata":  null,
                 "lease_duration":  2000,
                 "renewable":  true,
                 "entity_id":  ""
             }
}
token renewed!
Vault Values:
{
    "abc":  "1234",
    "def":  "897",
    "klm":  "something12"
}

Теперь рассмотрим в Script2.ps1, яВызовите script1

$second_response = & ".\Script1.ps1"

. Конечно, $second_response сохранит 2 ответа выше в качестве вывода.

Как я могу сохранить ПРОСТО второй ответ, как говорят ключи / значения в таблице в Script2?то есть эта часть:

{
    "abc":  "1234",
    "def":  "897",
    "klm":  "something12"
}

$HashTable = @{ }
$HashTable.Add($second_response.key, $second_response.value)

другими словами, каким-то образом переменная $second_response должна хранить только эти выходные данные:

{
    "abc":  "1234",
    "def":  "897",
    "klm":  "something12"
}

Примечание: этот второй ответ значительно динамичен.Это означает, что в разных средах могут быть разные значения.поэтому я хочу иметь возможность ДИНАМИЧЕСКИ хранить все, что есть в этом ответе, а не жестко кодировать значения

Кроме того, мне нужны 2 ответа в сценарии 1, потому что я использую script1 для других целей, таких как, скажем, хочутолько просматривать содержимое хранилища.У script2 будут операции над ответом от script1, поэтому я выделил их для удобства и гибкости

ОБНОВЛЕНИЕ: Следуя предложению @kuzimoto, я удалил выходные данные и преобразовал ответ обратно из JSON, я получил эти выходные данные изСкрипт2:

abc:  1234
def:  897
klm:  something12

1 Ответ

1 голос
/ 13 мая 2019

Я пока не могу комментировать, но есть несколько вариантов:

  1. Редактировать script1.ps1

Вы не упоминаете, нужен ли вам первый наборРезультаты.Если вы этого не сделаете, просто удалите или закомментируйте эту строку $response| ConvertTo-Json -depth 100 из функции Renew_Token.

Анализ выходных данных script1.ps1 как json

Передача выходных данных script1 в script2 в виде простого текста.Просто измените $second_response = & ".\Script1.ps1" на $second_response = & ".\Script1.ps1" | ConvertFrom-Json.Затем, когда вы захотите получить доступ ко второму ответу, используйте $second_response[1], поскольку оба набора JSON добавляются к пользовательскому объекту PS, и к ним можно обращаться по отдельности, как к массиву.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...