Prozess-ID und Name von Diensten auslesen mit eigenen Powershell-Properties
Die Stärken der PowerShell liegen in der Leichtigkeit, mit der sich neue Objekte definieren und vorhandenen Objekte neue Properties anhängen lassen. Das Ganze ist viel einfacher, als es sich zunächst anhört. Hat man den sprichwörtlichen Bogen erst einmal raus, ergeben sich unzählige Möglichkeiten beliebige Ergebnisse über eine individuelle Property an einen Objekt-Output anzuhängen.
Hier ein konkretes Beispiel. Ein Get-Service liefert eine Liste aller vorhandenen Dienste, allerdings ohne den dazu gehörigen Prozess, in dem der Dienst läuft. Diese Angaben erhält man über eine WMI-Abfrage:
Get-WmiObject -Class Win32_Service | Select-Object -Property Name, ProcessID
Möchte man auch den dazugehörigen Prozessnamen erhalten, fügt man lediglich eine weitere Property an, deren Wert das Ergebnis eines Aufrufs von Get-Process ist, bei dem der ID-Parameter dieses Cmdlets den Wert der ProcessID-Property anhält.
Was sich vielleicht kompliziert anhören mag, ist in der Umsetzung sehr einfach. Vorausgesetzt man weiß, was eine Hashtable ist, denn über eine solche wird eine neue Property definiert:
Get-WmiObject -Class Win32_Service -Filter "ProcessID <> 0" | Select-Object -Property Name, ProcessID, @{Name="Prozess";Expression={Get-Process -ID $_.ProcessID | Select-Object -ExpandProperty Name }}
Dieser Aufruf hängt den Namen eines Prozesses als weitere Property an.
Liegt ein Wert als Property vor, lässt sich nach diesem Wert die Ausgabe z.B. gruppieren. Der folgende Befehl gruppiert alle Dienste nach ihrem "Host-Prozess" und sortiert die Ausgabe nach der Anzahl der Dienste pro Prozess:
Get-WmiObject -Class Win32_Service -Filter "ProcessID <> 0" | Select-Object -Property Name, ProcessID, @{Name="Prozess";Expression={Get-Process -ID $_.ProcessID | Select-Object -ExpandProperty Name }} | Group-Object -Property Prozess | Sort-Object -Property Count -Descending
Ausgabe:
Count Name Group
----- ---- -----
56 svchost {@{Name=AppHostSvc; ProcessID=1780; Prozess=...
3 lsass {@{Name=KeyIso; ProcessID=524; Prozess=lsass...
2 sqlservr {@{Name=MSSQL$SQLEXPRESS; ProcessID=1112; Pr...
So elegant lassen sich Daten nur mit der PowerShell aggregieren.
Ähnliche Beiträge
- Referenzen zu PowerShell 3.0 als kostenlose PDFs
- Mit WMI, sc.exe und DISM prüfen, ob Hyper-V installiert ist
- Bildschirmauflösung auf der Kommandozeile anzeigen und ändern
- GPT oder MBR: Partitionierungsschema auslesen mit diskpart, wmic, PowerShell
- PowerShell 3.0 und WMI-Update für Windows 7 und Server 2008




Keine Kommentare
Kommentar hinzufügen