2014-10-20 79 views
1

我在嘗試查找包含Active Directory用戶的數組中的項目的索引號時遇到問題。
我創建數組如下:搜索包含活動目錄用戶的powershell數組

$outarray = @() 
$outarray = get-aduser -Filter * -Properties LastLogon | select "Name","SAMAccountName","LastLogon" | sort samaccountname 

現在我有用戶在數組中,我可以使用標準的變量,它證明查詢

$outarray[0] 
$outarray[1] 

返回正是我期望的。

BUT

我完全無法搜索陣列中的nameSAMAccountName的索引,因爲它們是該陣列的特性。

$index = [array]::IndexOf($outarray.samaccountname, "testuser") 

只有在testuser是陣列中的第一個用戶時才返回-1(未找到)或0。 我在數組中找不到任何其他用戶索引。

我得到索引後的目標是用它來更新lastlogon的屬性。這個工程,如果我做手工 例如

$outarray[123].lastlogon = 12345678 

我可以使這項工作的唯一方法是手工打造的陣列開始,每次一個條目,而不是直接

foreach ($user in $outArray) 
    { 
     $myobj = @() 
     $myobj = "" | Select "Name","SAMAccountName","LastLogon" 

     #fill the object 
     $myobj.Name = $user.name 
     $myobj.SAMAccountName = $user.samaccountname 
     $myobj.LastLogon = $user.LastLogon 

     #Add the object to the array 
     $userarray += $myobj 
    } 
$userarray[[array]::IndexOf($userarray.samaccountname, "testuser")].LastLogon = 12345678 

然後填補了搜索工作。我認爲這與房地產類型有關,但在這個階段,我完全超出了我的深度。

在此先感謝您的幫助,我不是Powershell陣列專家,他們讓我困惑! :)

+0

嗯.. PS的版本是什麼?你原來的一套命令返回PS3和PS4的預期值。 – Raf 2014-10-20 09:27:30

+0

你有沒有想過只使用for循環,然後使用計數器變量作爲索引? – Paul 2014-10-20 09:57:59

+0

我也同意拉夫,你的代碼在我的機器上工作正常 – Paul 2014-10-20 10:05:09

回答

1

我認爲你看着這個錯誤的方式。與其尋找一個特定項目的索引,然後訪問該項目由它的索引,你可以通過過濾陣列要更新的項目做豪華的方式,像這樣:

$userarray | ? { 
    $_.SamAccountName -eq 'testuser' 
} | % { 
    $_.LastLogon = 12345678 
} 

或者是這樣的:

$acct = $userarray | ? { $_.SamAccountName -eq 'testuser' } | select -First 1 
$acct.LastLogon = 12345678 
+0

感謝您查看問題的其他方式。最有用的。 – 2014-10-20 14:34:46