[英]Searching a powershell array containing active directory users
嘗試在包含Active Directory用戶的數組中查找項目的索引號時遇到問題。
我創建數組如下:
$outarray = @()
$outarray = get-aduser -Filter * -Properties LastLogon | select "Name","SAMAccountName","LastLogon" | sort samaccountname
現在,我將用戶排列在一個數組中,我可以使用標准變量查詢來證明這一點
$outarray[0]
$outarray[1]
恰好返回我的期望。
但
我完全無法在數組中搜索name
或SAMAccountName
的索引,因為它們是數組的屬性。
$index = [array]::IndexOf($outarray.samaccountname, "testuser")
僅當testuser
是數組中的FIRST用戶時,才返回-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陣列的專家,他們讓我感到困惑! :)
我認為您看錯了這條路。 無需查找特定項目的索引,然后通過其索引訪問該項目,您可以通過過濾要更新的項目的數組來實現PoSh方式,如下所示:
$userarray | ? {
$_.SamAccountName -eq 'testuser'
} | % {
$_.LastLogon = 12345678
}
或像這樣:
$acct = $userarray | ? { $_.SamAccountName -eq 'testuser' } | select -First 1
$acct.LastLogon = 12345678
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.