Если мы предположим, что $array
содержит ваш массив объектов со свойствами, указанными в ваших столбцах, вы можете сделать следующее:
$output = $array | Group-Object computername | Foreach-Object {
$hash = [ordered]@{Computer=$_.Name}
$_.Group | Foreach-Object {
$hash.Add(('Folder_'+$_.Folder),$_.Size)
}
[pscustomobject]$hash
}
}
$output | Format-List
$output
будет содержать массив объектов. Поскольку эти объекты, вероятно, будут иметь разные свойства, у вас могут быть проблемы с отображением в консоли. Например, PC1
не будет иметь Folder_D
, и поскольку это первый элемент в массиве, по умолчанию для всех остальных объектов будет отсутствовать Folder_D
. Вот почему я добавил команду Format-List
, которая должна использоваться только для целей отображения, а не для дальнейшей обработки .
Что касается отсутствующих столбцов в выводе, у вас есть несколько вариантов. Во-первых, вы можете отсортировать ваши объекты там, где объект с наибольшим количеством свойств находится первым в списке. Во-вторых, вы можете использовать дополнительную логику c, чтобы заранее определить полный список свойств, а затем применить эти свойства ко всем объектам. Ниже приведено предварительное определение списка папок:
$Folders = $array.Folder | Select -Unique
$output = $array | Group-Object computername | Foreach-Object {
$hash = [ordered]@{Computer=$_.Name}
foreach ($Folder in $Folders) {
$hash.Add(('Folder_'+$Folder),$null)
}
$_.Group | Foreach-Object {
$hash.$('Folder_'+$_.Folder) = $_.Size
}
[pscustomobject]$hash
}
$output | Format-Table