PowerShell • • 1 Min. Lesezeit
Eine Kopfzeile in ein Array übernehmen
Drei Wege, einem einfachen PowerShell-Array Eigenschaftsnamen hinzuzufügen, damit Elemente per benannter Eigenschaft statt per Indexposition zugänglich sind.
Heute wurde ich gefragt, wie man einem Array eine „Kopfzeile” hinzufügt – damit man auf seinen Inhalt per Eigenschaft wie $obj.Kontoname zugreifen kann statt per Index.
Die Inspiration kam von Import-Csv -Header. Hier sind drei Lösungen:
1. Explizit – mit einer Klasse
class Benutzer {
[String]$Kontoname
Benutzer ([String[]]$Benutzername) {
$this.Kontoname = $Benutzername
}
}
@('meinBenutzer', 'DeinBenutzer') | ForEach-Object { [Benutzer]::new($_) }
2. Implizit – mit Select-Object (kürzer)
@('meinBenutzer', 'DeinBenutzer') | Select-Object @{ l = 'Kontoname'; e = { $_ } }
3. Implizit – mit PSCustomObject
@('meinBenutzer', 'DeinBenutzer') | ForEach-Object {
[PSCustomObject]@{ Kontoname = $_ }
}
Ergebnisse
In allen drei Fällen ist die Ausgabe ein Object[]. Der Unterschied: Die Klassenvariante enthält stark typisierte Benutzer-Objekte, während die anderen beiden generische PSCustomObject-Instanzen erzeugen.