scroller
Goto Top

Powershell - Formatierung der Ausgabe

Hi

ich habe ein script dass versch. Infos über PC's ausgibt.


zb:
Servicepack: Service Pack 4
Architektur: 64-Bit
RAM GB: 3


Die Ausgabe erfolgt mittels write-host
Die Ausrichtung der zweiten Spalte erreiche ich mit `t für Tabulator:

write-host "Servicepack:`t"$os.CSDVersion

Trotzdem habe ich jetzt eine zusätzliche Zeile wo ich mit Tabs nicht mehr hinkomme.
Entweder die zweite Spalte ist zu weit rechts bzw. zu weit links.
Durch einfügen von Leerzeichen hinter dem Doppelpunkt lässt sichs nicht lösen...
Wie könnte man das machen?

Danke für Eure Tips

SC

Content-ID: 319382

Url: https://administrator.de/forum/powershell-formatierung-der-ausgabe-319382.html

Ausgedruckt am: 22.12.2024 um 13:12 Uhr

colinardo
Lösung colinardo 28.10.2016 aktualisiert um 11:16:43 Uhr
Goto Top
Hallo Scroller,
dafür gibt es mehrere Möglichkeiten.

Hier sind mal drei davon anhand eines Beispiels dargestellt:
# Testdatenobjekt
$os = gwmi Win32_OperatingSystem

# Variante 1 (format-list)
$os | select Version,SerialNumber,RegisteredUser | fl

# Variante 2 (man möchte andere Namen für die Eigenschaften [calculated properties])
$os | select @{n='Versionsnummer';e={$_.Version}},@{n='Seriennummer';e={$_.SerialNumber}}, @{n='Benutzer';e={$_.RegisteredUser}} | fl  

# Variante 3 (mit Format Specifier)
"{0,-30} : {1}" -f "Version",$os.Version  
"{0,-30} : {1}" -f "Seriennummer",$os.SerialNumber  
"{0,-30} : {1}" -f "User",$os.RegisteredUser  
Mehr zu Calculated Properties genutzt in Bsp. 2.

Die Doku zum -F Operator in Beispiel 3 kannst du hier nachlesen:
http://ss64.com/ps/syntax-f-operator.html


Man kann z.B. auch ohne jetzt alle einzelnen Eigenschaften eines Powershell-Objekts "manuell" auflisten zu müssen die Ausgabe des format-list CMDLets automatisiert nachbauen. Das sieht dann z.B. aus:
# Objekt mit Eigenschaften
$os = gwmi Win32_OperatingSystem
# Alle Eigenschaften des Objektes holen
$props = $os | gm -MemberType Property | select -Expand Name
# maximale Länge der Bezeichnung ermitteln
$length = ($props | sort Length -Descending | select -First 1).Length
# Alle Eigenschaften einheitlich formatiert ausgeben:
$props | %{"{0,-$length} : {1}" -F $_,$os.$_}  
Generell sollte man immer so lange wie möglich mit Objekten arbeiten und die Ausgabe als String immer zum Schluss machen.

Grüße Uwe
Scroller
Scroller 28.10.2016 um 14:26:47 Uhr
Goto Top
Danke Uwe!
Lösung 3 wars dann face-smile