创建哈希表,其中键具有多个数组值

Create Hashtable where key has multiple array values

我正在尝试使用 PowerShell 创建一个散列 table,其中键是一个服务器名,它有多个值,其中一些是数组。

密钥 = 服务器名称

值:

ServerID(单个 ID 值)

GroupIDs(ID 值数组,绑定到下面的特定组名称)

GroupName(值数组,与上面数组中的特定组 ID 相关联)

我正在遍历服务器列表并尝试构建它。

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

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

我遇到的问题是密钥似乎不是服务器名,我不确定如何在添加时 link GroupID 和 GroupName。

感谢您对此的任何帮助

看起来您可能想要使用的数据结构是一个对象,而不是哈希表,它是 key/value(单数)。

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

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

然后你可以使用 Where-Object 来过滤名称

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

请注意,[pscustomobject] 类型加速器是版本 3 或更新版本。早期版本需要使用New-Object.

我认为您误解了哈希表的工作原理。在您的例子中,ServerNameServerIDGroupNameGroupID 都是键。每个都有一个数组作为对应的值。

不清楚您要做什么,但自定义对象的集合可能更合适。如何构建它们将取决于您如何收集/循环数据,但一般来说,您可以这样做:

$servers = @()

$servers += [PsCustomObject]@{
                ServerName = $serverName
                ServerID =$serverID
                GroupName = $groupName
                GroupID = $groupID
            }