Powershell не вернет значение ключа таблицы ha sh - PullRequest
0 голосов
/ 01 мая 2020

У меня есть переменная, которая представляет собой таблицу ha sh:

PS C:\depot\code\rp4vm> $skey


key              value
---              -----
Splitter version 5.2.P1(a.362)
OS version       VMkernel na1-pdesx09

Я пытаюсь получить доступ к значениям для ключей, но мне не удается это сделать. Независимо от того, как я к ним обращаюсь, я ничего не получаю:

PS C:\depot\code\rp4vm> $skey."Splitter version"

PS C:\depot\code\rp4vm> $skey["Splitter version"]

Я проверил, есть ли в нем пары ключей и значений:

PS C:\depot\code\rp4vm> $skey.key

Splitter version
OS version
PS C:\depot\code\rp4vm> $skey.value

5.2.P1(a.362)
VMkernel na1-pdesx09.americas.global-legal.com 

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

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

То, что у вас есть, определенно не Хеш-таблица. Скорее всего, это массив объектов , которые имеют свойства key и value, подобные этим

$skey = [PsCustomObject]@{'key' = 'Splitter version'; 'value' = '5.2.P1(a.362)'},
        [PsCustomObject]@{'key' = 'OS version'; 'value' = 'VMkernel na1-pdesx09'}

Для демонстрации:

$skey | ForEach-Object {
    Write-Host ('{0} = {1}' -f $_.key, $_.value)
}

Должно отображаться

Splitter version = 5.2.P1(a.362)
OS version = VMkernel na1-pdesx09

Вы можете преобразовать в Hashtable, если хотите:

$hash = @{}
$skey | ForEach-Object {
    $hash[$_.key] = $_.value
}

Наберите это на мобильном телефоне, так что, надеюсь, вы получили правильное форматирование ..

0 голосов
/ 02 мая 2020

В дополнение к ответу от @Theo, я подозреваю, что на самом деле это касается списка KeyValuePair объектов, например:

$skey = 
    (new-object 'System.Collections.Generic.KeyValuePair[String, String]' 'Splitter version', '5.2.P1(a.362)'),
    (new-object 'System.Collections.Generic.KeyValuePair[String, String]' 'OS version', 'VMkernel na1-pdesx09'),
    (new-object 'System.Collections.Generic.KeyValuePair[String, String]' 'OS version', 'VMkernel na2-other')

В любом случае, Разница между таблицей ha sh и списком объектов [KeyValuePair] (или [pscustomobject]) заключается в том, что для списка объектов не требуются уникальные ключи (как показано в примере выше). Это означает, что проблема может заключаться в том, что преобразование их в таблицу ha sh может перезаписать дубликаты ключей.

Чтобы извлечь указанный ключ c из списка, используйте:

($skey | Where key -eq 'Splitter version').Value
5.2.P1(a.362)

или несколько клавиш:

($skey | Where key -eq 'OS version').Value
VMkernel na1-pdesx09
VMkernel na2-other
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...