Как сохранить только 1 часть ответа REST в хеш-таблице? - PullRequest
0 голосов
/ 02 мая 2019

Предположим, у меня есть следующий ответ на вызов Invoke-RestMethod:

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
}
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":  ""
             }
}
{
    "key1":  "value1",
    "key2":  "value2",
    "key3":  "value3"
}

Предположим, я храню этот ответ в переменной:

$response

Как тогда выбрать только этот раздел ответа:

    "key1":  "value1",
    "key2":  "value2",
    "key3":  "value3"

для хранения в хеш-таблице?

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

1 Ответ

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

Воссоздание объекта как PSCustomObject, где key1, key2 и key3 являются частью одного ответа:

$response =

[PSCustomObject]@{
    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=  "";
    }
    key1= 'value1';
    key2= 'value2';
    key3= 'value3';
}

Получать только ключи, в названии которых есть строка 'key':

$targetKeys = $response.psobject.Properties | ? {$_.Name -match 'key'}

Создайте новую таблицу и добавьте в нее каждый из желаемых ключей:

$newTable = @{}

foreach($key in $targetKeys)
{
    $newTable.Add($key.Name, $key.Value)
}

return $newTable

Выход:

Name                           Value                                                                                           
----                           -----                                                                                           
key3                           value3                                                                                          
key1                           value1                                                                                          
key2                           value2                                                                                          

Если во втором ответе есть только key1, key2 и key3, вы можете получить доступ к свойствам напрямую, например, скажем

$secondResponse = [PSCustomObject]@{
    key1=  "value1";
    key2=  "value2";
    key3=  "value3";
}

Вы можете получить доступ к этому:

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