Я пытаюсь преобразовать CSV-данные строки 80K с 30 столбцами в отсортированный и отфильтрованный CSV на основе определенных данных столбца из оригинального CSV.
Например, мои данные в следующем формате:
PatchName MachineName IPAddress DefaultIPGateway Domain Name USERID UNKNOWN NOTAPPLICABLE INSTALLED APPLICABLE REBOOTREQUIRED FAILED
KB456982 XXX1002 xx.yy.65.148 xx.yy.64.1 XYZ.NET XYZ\ayzuser YES
KB589631 XXX1003 xx.yy.65.176 xx.yy.64.1 XYZ.NET XYZ\cdfuser YES
KB456982 ABC1004 xx.zz.83.56 xx.zz.83.1 XYZ.NET XYZ\mnguser YES
KB456982 8797XCV xx.yy.143.187 xx.yy.143.184 XYZ.NET WPX\abcuser YES
Здесь MachineName будет отфильтровываться в Uniq, а PatchName будет транспонировать заголовки последних столбцов с удерживанием столбцов «UNKNOWN, NOAPPLICABLE, INSTALLED, FAILED, REBOOTREQUIRED». Значения, если произошло YES -
Ожидаемый результат:
MachineName IPAddress DefaultIPGateway Domain Name USERID KB456982 KB589631
XXX1002 xx.yy.65.148 xx.yy.64.1 XYZ.NET XYZ\ayzuser UNKNOWN
XXX1003 xx.yy.65.176 xx.yy.64.1 XYZ.NET XYZ\cdfuser NOTAPPLICATBLE
ABC1004 xx.zz.83.56 xx.zz.83.1 XYZ.NET XYZ\mnguser UNKNOWN
8797XCV xx.yy.143.187 xx.yy.143.184 XYZ.NET WPX\abcuser FAILED
Требуется помощь для достижения этой цели, поэтому я могу транспонировать строки PathcName в столбцы, но не могу включить все столбцы вместе и применить условие. [Для обработки этого требуется 40 минут]
$b = @()
foreach ($Property in $a.MachineName | Select -Unique) {
$Props = [ordered]@{ MachineName = $Property }
foreach ($Server in $a.PatchName | Select -Unique){
$Value = ($a.where({ $_.PatchName -eq $Server -and $_.MachineName -eq $Property })).NOTAPPLICABALE
$Props += @{ $Server = $Value }
}
$b += New-Object -TypeName PSObject -Property $Props
}