2014-09-23 78 views
0

我一直對此感到頭痛,並無法弄清楚爲什麼這不起作用。 使用PowerShell通過AD獲取用戶名

Import-Module ActiveDirectory 
 
$Users = Get-ADGroupMember -identity 「Accounting」 -recursive | select name | export-csv -path "D:\group.csv" 
 
$csv = Import-Csv "D:\group.csv" 
 
foreach ($user in $csv) {Get-ADUser -filter "'Name -eq ""$user""'"}

+0

您收到了錯誤消息。你應該在你的帖子中包含這些內容以幫助那些試圖幫助你的人。 – alroc 2014-09-23 15:43:15

回答

0

$user是在CSV文件一行。您需要解決該行的Name字段(您也有太多的單引號和雙引號)。

foreach ($user in $csv) {Get-ADUser -filter "Name -eq '$($user.name)'"} 

或者你可以讓CSV文件只是名稱的香草上市,而不是它讀成CSV:

Get-ADGroupMember -identity 「Accounting」 -recursive | select -expandproperty name | out-file "c:\group.txt" 

$csv = get-content -path "c:\group.txt" 
foreach ($user in $csv) {Get-ADUser -filter "Name -eq '$user'"} 

但是如果你只使用該文件作爲組之間的管道搜索和用戶查找,您可以直接將Get-ADGroupMember的輸出直接輸入到Get-ADUser,從而完全跳過該選項。

Get-ADGroupMember -identity 「Accounting」 -recursive | Get-ADUser; 
+0

''$ user''仍然可以用單引號包裝嗎? – Matt 2014-09-23 15:44:52

+0

是的。 * outer *雙引號觸發變量擴展,並且過濾器接受用單引號括起來的字符串。運行它並自己看看。 'Filter'成爲'Name -eq'myusernamehere'' – alroc 2014-09-23 15:47:17

1

你在這裏有幾個問題,我認爲。

  1. 導出數據只是爲了再次導入它。你甚至需要第二個數據副本嗎?
  2. Import-Csv將不僅返回對象數組的名稱。還有就是要解決這個問題的方法不止一種,但是這應該是更多,你在找什麼

Import-Module ActiveDirectory 
$Users = Get-ADGroupMember -identity 「Accounting」 -recursive | select name 
foreach ($user in $Users) {Get-ADUser -filter {Name -eq $user.Name}} 

即使是超過它需要。它的冗餘自Get-ADGroupMember已經返回您需要的類似對象。你需要怎樣處理這些數據?如果您確實需要Get-AdUser,那麼只需將輸出傳送給它。

Get-ADGroupMember -identity 「Accounting」 -recursive | Get-Aduser 
+0

就過濾花括號而言,'-Filter'參數實際上需要一個字符串,所以使用引號是獲得過濾器工作的更一致的方式。 – Kohlbrr 2014-09-23 15:52:03

+0

@Kohlbrr很高興知道謝謝。刪除了-Filter的關注 – Matt 2014-09-23 16:11:18