我已經寫得夠多了PS代碼要經過的串列displayNames(如“約翰史密斯”,“泰勒·漢森” -所有存盤在一個txt檔案的獨立線)吐回了足夠的資料到另一個文本檔案,它可以用于郵件合并等等。說服成千上萬的員工簡單地更新 Windows 就像打碎石頭一樣!它必須在某種程度上自動化......
這是代碼......讓用戶打開特定文本檔案并稍后保存的功能不在視野范圍內......
$displayname = @()
$names = get-content $FileIN
foreach ($name in $names) {
$displaynamedetails = Get-ADUser -filter { DisplayName -eq $name } | Select Name, GivenName, Surname, UserPrincipalName
$displayname = $displaynamedetails
}
$displayname | Export-Csv -NoTypeInformation -path $fileOUT -Encoding UTF8
有時,串列中的姓名拼寫可能不正確,或者員工可能已經離開了組織。
如果出現錯誤,是否有任何方法可以將諸如“未找到”之類的陳述句寫入文本檔案的特定行(以便可以輕松地并排比較兩個檔案?
對于我試圖找到的大多數其他解決方案,答案基于 samAccoutName 或將名字和姓氏合并在一起。在這里,我對顯示名稱特別感興趣。
謝謝
uj5u.com熱心網友回復:
你可以試試這個,因為-Filter還是-LDAPFilter不拋出任何例外只要物件無法找到(除非你喂null值),你可以添加一個if條件,以檢查是否在AD用戶物件將變被存盤不為空,如果是,您可以將此“未找到”用戶添加到不同的陣列中。
$domain = (Get-ADRootDSE).DefaultNamingContext
$names = Get-Content $FileIN
$refNotFound = [System.Collections.Generic.List[string]]::new()
$displaynamedetails = foreach($name in $names)
{
if($aduser = Get-ADUser -LDAPFilter "(DisplayName=$name)")
{
$aduser
continue
}
$refNotFound.Add(
"Cannot find an object with DisplayName: '$name' under: $domain"
)
}
$displaynamedetails | Select-Object Name, GivenName, Surname, UserPrincipalName |
Export-Csv -NoTypeInformation -path $fileOUT -Encoding UTF8
$refNotFound # => Here are the users that couldn't be found
側面說明,考慮停止使用$displayname = @(),并 =為眾所周知的原因。
對于 AD Cmdlet,-Filter {...}不支持使用基于腳本塊的過濾 ( ),即使它可以作業,它也會在將來給您帶來問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/381806.html
