這個標題看着有些雲里霧里....
前一陣,群里有個朋友問博主“我想把所有用戶的SMTP地址全部輸出到CSV文件中進行統計,但是SMTP地址似乎輸出的是錯誤的,可在shell里看輸出的內容是正確的阿”
CSV中會顯示 Microsoft.ActiveDirectory.Management.ADPropertyValueCollection
一聽他說輸出錯誤,博主立刻明白了問題所在,告訴他,你在shell里再次輸出name,proxyaddress這兩個屬性對應的內容,看看輸出的內容有什么不一樣

很明顯這就不是一個正常的字符串,看上去像一個屬性集合,說到這我們是不是就要聯想到哈希表呢?
那這個需求到底要如何寫才可以實現呢?我們需要自定義一個屬性,然后通過腳本塊給這個屬性取值,方法如下:
@{N="proxyaddresses";E={$_.proxyaddresses -join ";"}}
如果有多個proxyaddresses地址,我們只想取第一個的話
@{N="proxyaddresses";E={$_.proxyaddresses[0]}}
[]就相當於鍵,想取哪個值,填寫與其對應的鍵就可以了
有了核心命令,接下來完整命令就十分方便編寫了,如下請參考:
import-csv d:\temp\mp\321.csv | foreach { Get-ADuser $_.username -Properties * | Select-Object samaccountname,@{N="proxyaddresses";E={$_.proxyaddresses -join ";"}}} | export-csv d:\temp\test.csv -No -NoTypeInformation -Encoding
csv文件需要指定header=username 即可,然后把每一個username交給pipline后的循環執行並輸出
