Создать Hashtable, где ключ имеет несколько значений массива - PullRequest
0 голосов
/ 16 мая 2018

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

Ключ = SERVERNAME

Значения:

ServerID (одиночное значение идентификатора)

GroupIDs (массив значений идентификатора, которые связаны с конкретным именем группы ниже)

GroupName (Массив значений, который связан с конкретным идентификатором группыиз массива выше)

Я перебираю список серверов и пытаюсь составить его.

$ServerHashTable = @{}
$ServerHashTable.ServerName = @()
$ServerHashTable.ServerID = @()
$ServerHashTable.GroupName = @()
$ServerHashTable.GroupID = @()

$ServerHashTable.ServerName += $ServerName
$ServerHashTable.ServerID += $ServerID
$ServerHashTable.GroupName += $GroupName
$ServerHashTable.GroupID += $GroupID

Проблема, с которой я столкнулся, заключается в том, что ключ не являетсяservername, и я не уверен, как связать GroupID и GroupNames при их добавлении.

Спасибо за любую помощь с этим

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Я думаю, вы неправильно понимаете, как работают хеш-таблицы.В вашем случае ServerName, ServerID, GroupName и GroupID являются ключами.Каждому из них соответствует массив в качестве соответствующего значения.

Не совсем ясно, что именно вы пытаетесь сделать, но коллекция пользовательских объектов может быть более подходящей.Как вы их построите, будет зависеть от того, как вы собираете / зацикливаете данные, но в целом вы можете сделать что-то вроде этого:

$servers = @()

$servers += [PsCustomObject]@{
                ServerName = $serverName
                ServerID =$serverID
                GroupName = $groupName
                GroupID = $groupID
            }
0 голосов
/ 16 мая 2018

Похоже, что структура данных, которую вы можете использовать, была бы объектом, а не хеш-таблицей, которая является ключом / значением (в единственном числе).

$ServerName = 'ExampleServerName'
$ServerID = 12345
$GroupName = @('ExampleGroup1','ExampleGroup2')
$GroupIDs = @(1,2,3)

$Servers = @()
$Servers += [pscustomobject]@{
    ServerName = $ServerName
    ServerID   = $ServerID
    GroupName  = $GroupName
    GroupID    = $GroupID
}

Тогда вы могли бы использовать Where-Object для фильтрацииname

$Servers | Where-Object {$_.ServerName -eq 'ExampleServerName'}

Обратите внимание, что ускоритель типа [pscustomobject] имеет версию 3 или новее.Более ранние версии должны использовать New-Object.

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