Eigenschaften¶
Eigenschaft der Objekte (Property)
Anzahl von Objekten in einer Pipeline am Beispiel Get-Date (Anm.: erzeugt nur ein Objekt)
Get-Date
Eigenschaften des Objekts ansprechen: (als auch .Month, .Hour, .Minute)
(Get-Date).Year
Keine Fehlermeldungen (wie bei klassischen PowerShell 1.0 / 2.0), falls man hier mal mit einem Einzelobjekt arbeitet).
Anzahl aller Prozesse
(Get-Process).count
Anzahl von Prozessen mit mehr als 20 MB im RAM
(Get-Process | Where-Object { $_.WorkingSet64 -gt 20MB }).Count
Objekte lassen sich dann auch mit Array-Technik einzeln ansprechen:
(Get-Process | Where-Object { $_.WorkingSet64 -gt 20MB })[5]
Gegenüberstellung „alte“ PowerShells und „neue“ PowerShell:
seit PowerShell 3.0: Automatic Unrolling – automatisches Durchlaufen eines Array durch eine Schleife mit Hilfe der Punktschreibweise)
(Get-Process).Name
Entspricht den folgenden beiden Aufrufen (abwärtskompatibel dann auch zu PowerShell 2.0)
Get-Process | Select-Object Name
Get-Process | ForEach-Object {$_.Name}
Hier ein ausführlicheres Beispiel aus „Weltner, PowerShell 5, S. 337)
PS E:\_temp> $dll = Get-ChildItem -Path "C:\Windows\System32\*.dll" | Select-Object -First 3
PS E:\_temp> $dll
Verzeichnis: C:\Windows\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---l 29.10.2014 03:00 3814400 accessibilitycpl.dll
-a---l 22.08.2013 13:45 39424 ACCTRES.dll
-a---l 29.10.2014 03:43 10240 acledit.dll
# Automatic Unrolling (ab PowerShell Version 3.0)
PS E:\_temp> $dll.VersionInfo
ProductVersion FileVersion FileName
-------------- ----------- --------
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\accessibilitycpl.dll
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\ACCTRES.dll
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\acledit.dll
# -ExpandProperty (alle PowerShell Versionen)
PS E:\_temp> $dll | Select-Object -ExpandProperty VersionInfo
ProductVersion FileVersion FileName
-------------- ----------- --------
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\accessibilitycpl.dll
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\ACCTRES.dll
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\acledit.dll
# Foreach-Object (alle PowerShell Versionen)
PS E:\_temp> $dll | ForEach-Object { $_.VersionInfo }
ProductVersion FileVersion FileName
-------------- ----------- --------
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\accessibilitycpl.dll
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\ACCTRES.dll
6.3.9600.16384 6.3.9600.1638... C:\Windows\System32\acledit.dll
Hinweis
Pfadübergabe hier in der ersten Konsolenzeile für den Pfad mit sauberer Testkette (String), damit das Syntaxhighlighting zufrieden ist. In der täglichen Praxis gerne auch ohne Quotes / Anführungszeichen, wenn der String ohne Leerzeichen!
Eine Analyse über vorhandene Eigenschaften/Methoden kann man über die unterschiedlichen Analysen mittels
$dll | Get-Member # hier sieht man VersionInfo / ScriptProperty – nach der Pipeline!
im Vergleich mit
Get-Member –InputObject $dll # Get-Member kennt kein VersionInfo
herausfinden.
Ergebnis: das Pipelining macht den Unterschied und beeinflusst auch die Technik der Codevervollständigung in der PowerShell Befehlszeile!
Für eine kombinierte Ausgabe benötigen wir immer die Pipeline-Technik:
Get-Process | Foreach-Object {$_.Name + ": " + $_.Workingset64 }