我撰寫了一個腳本,可以提取 WS2012 AD 中的所有重復電子郵件。
該腳本包含所有具有重復電子郵件的用戶pscustomobject
現在我想要實作的是洗掉第一個唯一的電子郵件條目并保留所有重復的電子郵件條目,這樣我就可以為重復的電子郵件條目構建虛擬電子郵件,只留下第一個唯一的電子郵件條目,這樣 AD 中的每個用戶都可以擁有一個唯一的電子郵件即使它是一個虛擬電子郵件。
這是pscustomobject匯出到 CSV 的示例:
Name Telephone Email Department
Max Smith 12345 [email protected] Billing
Max Jones 6789 [email protected] Facility
James Adams 52585 [email protected] Import
James Jones 46844 [email protected] Service
James Bones 68315 [email protected] Management
我需要從上面構建的是:
Name Telephone Email Department
Max Jones 6789 [email protected] Facility
James Jones 46844 [email protected] Service
James Bones 68315 [email protected] Management
第一個電子郵件條目消失了,所有重復的郵件仍然存在。
虛擬電子郵件是 [email protected],就像[email protected]James Jones 一樣。
pscustomobject如果沒有第一封獨特的電子郵件并且僅包含重復的電子郵件,我總是無法構建。
我希望 Stack Overflow 的向導可以幫助我。
感謝你并致以真誠的問候。
uj5u.com熱心網友回復:
為了只“保留重復”,您需要跟蹤您之前已經看到的電子郵件地址。
為此,我建議使用一個HashSet<string>- 一個集合只包含不同的值,并且非常快速地確定給定值是否已經是該集合的成員 - 非常適合這個用例。
在下文中,我假設包含問題中描述$data的 s 陣列pscustomobject:
$alreadySeen = [System.Collections.Generic.HashSet[string]]::new()
$duplicatesOnly = $data |Where-Object { -not $alreadySeen.Add($_.Email) }
$duplicatesOnly |Export-Csv path\to\output.csv
第一次向集合添加唯一值時,Add()將回傳$true,但隨后嘗試添加相同值將回傳$false- 這意味著我們的Where-Object過濾器將僅過濾該Email列之前已至少出現一次的物件。
如果電子郵件沒有統一大小寫,請在創建哈希集時提供不區分大小寫的字串比較器:
$alreadySeen = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::InvariantCultureIgnoreCase)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/526124.html
標籤:电源外壳powershell-5.0pscustomobject
