簡體   English   中英

從 txt 文件中提取名字和姓氏並使用它從 AD 中獲取用戶名並將其導入 csv

[英]Extracting first and last names from txt file and using it to get username from AD and import it into csv

作為一種測試和從 AD 獲取特定數據的方法,我正在嘗試根據填充了用戶姓名和姓氏的 txt 文件獲取數據。 我發現使用ConvertFrom-String cmdlet 可以將 txt 文件中的名稱拆分為兩個單獨的值,從而使您能夠(理論上)使用Get-ADUser從 AD 及其屬性中查找用戶。

到目前為止我使用的代碼如下,當我嘗試各種選項使其工作時,這里和那里都有隨機變化。 我已經能夠通過將名稱存儲在變量下然后使用Get-ADUser cmdlet 從 AD 中獲取所需的數據,我什至能夠將該數據導出到 CSV 文件中。 當有一個包含多個條目的文本文件時,問題是無法使其工作。

Get-Content C:\temp\users.txt -encoding UTF8 |
ConvertFrom-String |
ForEach-Object {Get-ADUser -Filter {(givenName -Like '$($_.P1)') -and (sn -Like '$($_.P2)')} -Properties *} |
Select-object givenName, Surname, SamAccountName | Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

任何幫助將不勝感激。

您在非擴展字符串中使用子表達式。 查看 Powershell 的about_Quoting_Rules幫助主題以獲取更多詳細信息。 但是,簡短的故事是你需要雙引號來擴展像$($_)這樣的東西。

就像是:

Get-Content C:\temp\users.txt -encoding UTF8 |
ConvertFrom-String |
ForEach-Object {Get-ADUser -Filter "( givenName -like '$($_.P1)' ) -and (sn -like '$($_.P2)' )" -Properties *} |
Select-object givenName, Surname, SamAccountName | Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

請注意,我引用了整個過濾器。 從技術上講Get-ADUser-Filter參數采用字符串,因此這是可以接受的,並且更易於閱讀。

另請注意:您可能需要“*”才能使其正常工作。 從技術上講,類似將適用於完全匹配,但它更常用於使用通配符進行搜索。 在您的情況下,使用'*$($_.P1)*'可能會幫助您解決問題。

如果您對這些值有信心,特別是考慮到您也在使用-and運算符,您可能會考慮使用-eq 但是我會擔心,因為總是有可能發生常見的名稱沖突。 例如在美國很容易有 2 約翰史密斯在公元...

我還要指出,為此使用 Import-Csv 更為方便。 更正后,您的方法是有效的,但首先以下內容更具可讀性且更易於編寫:

-eq示例:

Import-Csv -Path C:\temp\users.txt -header "givenName","sn" -Delimiter " " |
ForEach-Object{
    $GivenName = $_.givenName
    $LastName  = $_.sn
    ForEach-Object { Get-ADUser -Filter "(givenName -eq '$GivenName') -and (sn -eq '$LastName')" -Properties * }
} | 
Select-Object givenName, Surname, SamAccountName | 
Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

帶有-like和通配符的示例:

Import-Csv -Path C:\temp\users.txt -header "givenName","sn" -Delimiter " " |
ForEach-Object{
    $GivenName = $_.givenName
    $LastName  = $_.sn
    ForEach-Object { Get-ADUser -Filter "(givenName -like '*$GivenName*') -and (sn -like '*$LastName*')" -Properties * }
} | 
Select-Object givenName, Surname, SamAccountName | 
Export-CSV C:\Temp\usersexport.csv -NoTypeInformation

您可能還希望避免使用-Properties *而是定義一組更精確的屬性來檢索。 在更大的工作中,這將產生性能差異。

哦,您通常不需要為Get-Content指定編碼,它非常擅長自行解決。

在 PowerShell Core 中,參數的默認值為 UTF8NoBOM。 NoBOM 只是意味着沒有聲明編碼的“字節順序標記”,因此它不應該對 UTF8 文件有任何問題。 在 Windows PowerShell 5.1 中,您可能需要按照自己的方式指定。

看起來這對你來說是一個學習練習,如果這有幫助,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM