2014-10-20 34 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

相关问题