簡體   English   中英

搜索包含Active Directory用戶的Powershell陣列

[英]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]  

恰好返回我的期望。

我完全無法在數組中搜索nameSAMAccountName的索引,因為它們是數組的屬性。

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM