arrays - 如何搜索 PowerShell 对象数组并检索匹配字符串的索引?

标签 arrays powershell indexing

我需要搜索自定义 PowerShell 对象数组(其中包含来自 AD 和 Exchange 的数据 - 5 列:mail、dn、extensionAttribute7、TotalItemSize、Count)。我每天收集此数据(对于总项目大小 > 指定大小的每个用户)并使用 Export-Clixml 将其导出到 XML 文件,以便我可以在随后的日子里引用这些数据。每天我都会对大于指定大小的邮箱执行一次新搜索,并保存有关匹配邮箱的数据,但我需要交叉引用我现有的用户数组。如果用户已经在我的数组中,那么我想将我的 PS 对象中的计数属性递增 1,否则我想将用户作为新的 PS 自定义对象添加到我的数组中。这样我就可以跟踪邮箱一直超过指定大小的用户并采取相应措施(这是客户要求)。

我正在努力解决的问题是在我的自定义 PS 对象数组中搜索匹配项,以确定我是否需要将用户添加为新对象,或者只是增加用户的计数器,因为他们已经在我的数组中.一开始我以为我可以使用 .IndexOf 或 -Contains 在我的数组中找到匹配项,但它们似乎不适用于包含 PS 对象的数组。我能够让它工作的唯一方法如下:

#Check to see if this user is already in our master mbxlist array from previous days
$ndx = 0..($mbxlist.length - 1) | Where-Object {$mbxlist[$_].mail -eq $($m.mail)}

$ndx 然后设置为我的数组中匹配对象的索引,或者如果没有匹配项则设置为 $null。但这似乎不是很有效,尤其是当我每天为每个单独的用户搜索 1000 多个对象的数组时。当然必须有更好的方法来做到这一点?我确实考虑过创建一个单独的字符串数组,其中仅包含用户的邮件地址,然后使用 indexof 来检查匹配项。我可以推断匹配的 PS 对象将具有与我的字符串数组相同的索引号,然后相应地更新相应 ps 对象数组中的计数:

# Create an array of strings based on the mail attribute in my PS object array
foreach ($m in $mbxlist) {[array]$lookup += $m.mail.ToString()}

#Search the lookup array for matching email address using IndexOf
$ndx=[array]::indexof($lookup,"joe.bloggs@mydomain,com")

#If ndx > 0 I've got a match so increment the count in the corresponding PS object
If ($ndx -ge 0)
{
    $mbxlist[$ndx].Count = ($mbxlist[$ndx].Count) + 1
}

这会不会更有效率,因为 IndexOf 比为我要搜索的每个用户执行 Where-Object 更快?

我已经搜索和测试了好几天,但我无法弄清楚。我对 PowerShell 比较陌生,所以我可能遗漏了一些非常明显的东西。谢谢!

最佳答案

不确定这是否有帮助,但您可以尝试使用电子邮件地址作为键将您的对象加载到哈希表中,然后通过它引用它(未测试):

$ht = @{}
import-clixml mbxdata.xml |
 foreach {$ht[$_.mail] = $_}

$mailboxes = get-mailbox -resultsize unlimited |
  select -ExpandProperty PrimarySMTPAddress

foreach ($mbx in $mailboxes){
 if ($ht[$mbx] -eq $null)
   {
     $ht[$mbx] = new-object PSObject #Create and add new object here
   }

  if ((get-mailboxstatistics $mbx).totalitemsize -gt '<some value>')
    {
      $ht[$mbx].count ++
    }
 }

$ht.Values | export-clixml mbxdata.xml

关于arrays - 如何搜索 PowerShell 对象数组并检索匹配字符串的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20329148/

相关文章:

python - 用于数组索引的 Matlab 逻辑 - Python 等效项

arrays - numpy 数组分割/分区效率

java - 创建继承对象的数组

javascript - 按父级排序(拓扑排序)和数组中元素的重要性

powershell - DoCmd.OutputTo 使用 PowerShell - 第一个参数为 'wrong data type'

powershell - 文件外格式

c - 段错误: 11 when trying to run a C file that calculates and stores all combinations of a binary string in an array

winforms - DropDownList 的默认文本

python - 根据匹配条件返回数据帧的下一行

MySQL 表索引基数