ExChange столбцы со строками в powershell - PullRequest
1 голос
/ 02 марта 2020

через пару часов мне нужна помощь со скриптом PS.

У меня есть массив, где:

computername   Folder  Size
PC1              A      123
PC1              B      18
PC1              C      356
PC2              A      589
PC2              B      58
PC2              C      59
PC2              D      89

Мне нужно как-то поменять столбцы со строками, где результат будет как следующее:

         Folder_A   Folder_B  Folder_C  Folder_D
PC1      123        18        356
PC2      589        58         59       89

Можете ли вы помочь мне с этим?

1 Ответ

2 голосов
/ 02 марта 2020

Если мы предположим, что $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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...