Powershell数组中对象的元素ID

时间:2014-04-16 23:41:04

标签: arrays powershell element

我有一个对象数组,一个计算机列表,所以数组看起来像这样:

+----------+-----------+---------------+
| size(MB) | Computer  |   Location    |
+----------+-----------+---------------+
| 100      | compname1 | C:\Users\etc\ |
| Offline  | compname2 | Offline       |
| 30       | compname3 | C:\users\etc2 |
+----------+-----------+---------------+

我需要遍历这些以及任何离线的内容,再次扫描它们。我遇到的问题是,在循环的每次迭代中,如何找到数组中当前对象的元素编号?

我有:

$element = [array]::IndexOf($complist.computer,$compname)

确实返回了一个值,但似乎不正确(返回的元素与正确的数组元素不匹配)。

最终游戏是我需要为标记为“脱机”的计算机运行阵列,在该计算机上运行扫描,然后用新数据替换阵列中的元素。

1 个答案:

答案 0 :(得分:0)

未经测试:

$newarray =
foreach ($item in $array)
 {
   if (
        ( $item.location -eq 'offline' ) -and 
        ( Test-Connection $Item.computer -Quiet )
       )

       { 
         Write-Verbose "Found $($item.Computer) online.  Updating."
         foreach ($userdir in (Get-ChildItem "\\$($item.Computer)\C$\users" -Directory))
          {
            $DirSize = (Get-ChildItem $userdir -Recurse | measure -Sum length).sum
            [PSCustomobject]@{
                               Size = $DirSize
                               Computer = $item.Computer
                               Location = 'C:\users\' + $userdir.Name
                             }
          }
        }
      Else { $item }
   }      

由于它不是1:1的替代品,你不能只进行替换 - 你将不得不创建一个新的数组。这将读取原始数组,并为脱机但现在处于联机状态的计算机创建新条目。其他一切都只是通过。