我知道这是不可能的,但我已经管理过了。从SQL查询中,我拉了1,2或3个链接到设备的电子邮件地址。我将它们扔进哈希表中。从那里,我循环,检查第二个哈希表,它由第一个表中的值组成。如果有一个电子邮件地址,则有效,但如果有多个电子邮件地址,则表示找不到匹配项,并且正在创建新密钥。
$DeviceList = @{
"Device1" = "Sally.Johnson@Domain.com";
"Device7" = "Sally.Johnson@Domain.com";
"Device8" = "Sally.Johnson@Domain.com";
"Device2" = "Bob.Davis@domain.com", "Jane.Doe@domain.com";
"Device3" = "Bob.Davis@domain.com", "Jane.Doe@domain.com";
"Device4" = "Jane.Doe@domain.com", "Sally.Johnson@domain.com", "Bob.Davis@domain.com";
"Device5" = "Jane.Doe@domain.com", "Sally.Johnson@domain.com", "Bob.Davis@domain.com";
"Device6" = "Jane.Doe@domain.com", "Sally.Johnson@domain.com", "Bob.Davis@domain.com"
}
$CompletedDevices = @{}
foreach ($Device in $DeviceList.GetEnumerator()) {
$Devicename = ($Device.Key).ToLower()
$OwnerEmail = ($Device.Value).ToLower()
if ($CompletedDevices.ContainsKey($OwnerEmail)) {
$CompletedDevices.$OwnerEmail += "$Devicename"
} else {
$CompletedDevices += @{$OwnerEmail = " ", $Devicename}
}
}
$CompletedDevices
脚本运行后,如果我只运行$CompletedDevices += @{$owneremail = " ", $Devicename}
,它会给我一个错误
项目已添加
但它没有在ContainsKey()
支票中找到它,而是将其添加为第二个三分之一或五十分之一的重复密钥。
这是此示例的最终结果:
上面的例子复制了这个问题。我真的希望我只是忽略了一些非常简单的东西。
答案 0 :(得分:0)
MathiasR.Jessen 将答案放在评论中:
“你没有生成重复的密钥 - 你在循环中复制值数组,哈希表将接受结果对象作为键,而不是按值而是通过标识。
$CompletedDevices.GetEnumerator()|%{"$($_.Key): $($_.Key.GetHashCode())" }
将$OwnerEmail = ($Device.Value).ToLower()
更改为$OwnerEmail = "$($Device.Value)".ToLower()
“
这两个解决方案对我帮助很大,谢谢!