我有一个对象数组,一个计算机列表,所以数组看起来像这样:
+----------+-----------+---------------+
| size(MB) | Computer | Location |
+----------+-----------+---------------+
| 100 | compname1 | C:\Users\etc\ |
| Offline | compname2 | Offline |
| 30 | compname3 | C:\users\etc2 |
+----------+-----------+---------------+
我需要遍历这些以及任何离线的内容,再次扫描它们。我遇到的问题是,在循环的每次迭代中,如何找到数组中当前对象的元素编号?
我有:
$element = [array]::IndexOf($complist.computer,$compname)
确实返回了一个值,但似乎不正确(返回的元素与正确的数组元素不匹配)。
最终游戏是我需要为标记为“脱机”的计算机运行阵列,在该计算机上运行扫描,然后用新数据替换阵列中的元素。
答案 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的替代品,你不能只进行替换 - 你将不得不创建一个新的数组。这将读取原始数组,并为脱机但现在处于联机状态的计算机创建新条目。其他一切都只是通过。