![](/img/trans.png)
[英]Parsing a search result from a webpage and extracting it into a .csv or .txt file
[英]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.