我知道這是不可能的,但我已經管理它。從一個SQL查詢中,我拉取了鏈接到設備的1,2或3個電子郵件地址。我把它們扔進散列表。從那裏開始,我循環查看第二個哈希表,該哈希表由第一個表中的值組成。這適用於有一個電子郵件地址的情況,但如果有多個電子郵件地址,則不會找到匹配項,而是創建一個新密鑰。我有一個散列表中的重複鍵
$DeviceList = @{
"Device1" = "[email protected]";
"Device7" = "[email protected]";
"Device8" = "[email protected]";
"Device2" = "[email protected]", "[email protected]";
"Device3" = "[email protected]", "[email protected]";
"Device4" = "[email protected]", "[email protected]", "[email protected]";
"Device5" = "[email protected]", "[email protected]", "[email protected]";
"Device6" = "[email protected]", "[email protected]", "[email protected]"
}
$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()
發現它檢查,並且將它添加爲第二或第五十個重複密鑰。
這是最終的結果應該是什麼這個例子:
上面的例子複製的問題。我真的希望我只是俯視一些非常簡單的東西。
你的方法似乎不必要地令人費解。你期望的結果是什麼?你想轉換設備 - >電子郵件地址映射到一個電子郵件地址 - >設備地圖? –
您的代碼不會複製任何問題。我已經運行它,並沒有錯誤。由此產生的散列表是可怕的,但它運行。如果我這樣做,我會創建一個具有設備名稱屬性的自定義PSObject,然後以數組對象的形式通知收件人。然後,您可以使用標準PowerShell cmdlet(其中,選擇,流水線,正則表達式等)完成您需要的任何過濾。 – thepip3r
因此'$ CompletedDevices'應該將電子郵件地址映射到地址發生的設備數量? –