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 }