Es gibt quite und fewposts auf SO, die PowerShell-Transposition adressieren. Der Großteil des Codes ist jedoch spezifisch für den Anwendungsfall oder Adressen, die aus einer Text/CSV-Datei gesammelt werden, und das tut mir nicht gut. Ich würde gerne eine Lösung sehen, die diese Arbeit ohne solche Besonderheiten erledigen kann und mit Arrays direkt in PS arbeitet.Generisch Transponieren von PowerShell-Array-Zeilen in Spalten
Beispieldaten:
Customer Name: SomeCompany
Abbreviation: SC
Company Contact: Some Person
Address: 123 Anywhere St.
ClientID: XXXX
Diese Daten sind viel komplizierter, aber ich kann mit ihr arbeiten mit anderen Methoden, wenn ich nur die Zeilen und Spalten erhalten können zusammenarbeiten. Die Array-Dinge, die "Name:" und "SomeCompany" sind Spaltenüberschriften. Dies ist ein Nebenprodukt dessen, wie die Daten gesammelt und nicht geändert werden können. Ich importiere die Daten aus einer Excel-Tabelle mit PSExcel und das Tabellenformat ist nicht änderbar.
gewünschte Ausgabe:
Customer Name:, Abbreviation:, Company Contact:, Address:, ClientID:
SomeCompany, SC, Some Person, 123 Anywhere St., XXXX
Beispiel für Dinge, die ich habe versucht:
$CustInfo = Import-XLSX -Path "SomePath" -Sheet "SomeSheet" -RowStart 3 -ColumnStart 2
$b = @()
foreach ($Property in $CustInfo.Property | Select -Unique) {
$Props = [ordered]@{ Property = $Property }
foreach ($item in $CustInfo."Customer Name:" | Select -Unique){
$Value = ($CustInfo.where({ $_."Customer Name:" -eq $item -and
$_.Property -eq $Property })).Value
$Props += @{ $item = $Value }
}
$b += New-Object -TypeName PSObject -Property $Props
}
Das funktioniert nicht, weil die "anderen" Daten, die ich erwähnte. Es gibt viele andere Abschnitte in dieser bestimmten Arbeitsmappe, so dass "Select-Unique" ohne Fehler fehlschlägt und die Ausgabe leer ist. Wenn ich die Eingabe beschränken könnte, um nur die Zeilen/Spalten auszuwählen, die ich brauchte, könnte das eine Chance haben. Es scheint, dass, während es einen "RowStart" und einen "ColumnStart" zu Import-XLSX gibt, es keine Eigenschaften gibt, um einen zu stoppen.
Ich habe Methoden aus den oben verlinkten SO Fragen versucht, aber wie gesagt, sie sind entweder zu spezifisch für die Frage Daten oder gelten für den Import von CSV-Dateien und nicht mit Arrays arbeiten.
Woher wissen Sie, dass ein Datensatz beendet ist und der nächste beginnt? – Eris
@Eris Wenn ich es richtig verstehe, verwendet es die gesamte Zeile als einen Datensatz, da es aus einer Excel-Tabelle importiert wird. – McKenning
Da Ihre Eingabe "record" aus 5 (?) Zeilen besteht, woher wissen Sie, dass sie bei "ClientId" endet? Wenn Sie kein Trennzeichen zwischen Gruppen von Werten haben, die Sie zu einem Ausgabeobjekt machen wollen, ist es unmöglich zu trennen. – Eris