Filtern und Isolieren von PowerShell-Objekten
In Windows PowerShell werden die meisten Ergebnisse beim Ausführen von Get-Anforderungen üblicherweise im PowerShell-Objektformat (PSObject) erstellt und angezeigt. PSObjects ist eine der kritischen Funktionen von PowerShell, die es von den übrigen Skriptsprachen unterscheidet.
Wir konnten jedoch ein PSObject aufgrund seiner Attribute nicht schnell durchsuchen, und daher müssen wir die Attribute isolieren, bevor wir einen Suchindex erstellen. In diesem Artikel werden wir über Windows PowerShell-Objekte sprechen, wie das Ergebnis des PS-Objekts analysiert wird, damit die Ergebnisse durchsuchbar sind, und eine ordnungsgemäße Filterung mit PowerShell durchführen.
Übersicht über PowerShell-Objekte
Wie bereits erwähnt, sind PowerShell-Objekte eines der Highlights der Skriptsprache. Jedes PowerShell-Objekt verfügt über Attribute, die das Objekt als Ganzes definieren.
Nehmen wir als Beispiel Get-Service
.
Beispielcode:
Get-Service
Ausgabe:
Status Name DisplayName
------ ---- -----------
Running AarSvc_147d22 Agent Activation Runtime_147d22
Running AdobeARMservice Adobe Acrobat Update Service
Running AESMService Intel® SGX AESM
Innerhalb der PowerShell-Objekte Get-Service
haben wir Status
, Name
und DisplayName
als Attribute. Um Objekte herauszufiltern, müssen wir das Objekt mit dem Befehl Where-Object
zwischen seinen Attributen isolieren.
Beispielsweise können wir nur den Typ Status
oder den Typ Name
erhalten, aber wir können nicht einfach nach einem bestimmten Schlüsselwort suchen, ohne zuerst das Attribut aufzurufen.
Beispielcode:
Get-Service | Where-Object {$_.Status -match "Stopped" }
Ausgabe:
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
Im nächsten Abschnitt des Artikels besprechen wir, wie wir diese Ausgaben als Zeichenfolge anstelle eines PS-Objektformats anzeigen und eine Filterung mit verschiedenen Suchanfragen durchführen können.
Filtern der Ausgabe mit PowerShell
Um die Ausgabe schnell zu filtern, müssen wir die Ausgabe im String-Format anzeigen. Wir müssen den Befehl an den Befehl Out-String
weiterleiten.
Für das folgende Beispiel werden wir es einer Variablen zuweisen, um unser nächstes Code-Snippet zu vereinfachen.
Beispielcode:
$serviceOutput = (Get-Service | Out-String) -split "`r`n"
Der obige Code liefert kein Ergebnis, da der Wert in der Variablen gespeichert ist. Außerdem haben wir eine kleine Zeichenfolgenoperation durchgeführt, um die Ergebnisse Zeile für Zeile zu teilen.
Wenn wir später filtern, zeigt das Skript es Zeile für Zeile an, anstatt nur eine ganze Zeichenfolge.
Der in der Variablen $serviceOutput
gespeicherte Wert ist im String-Format. Um nach dem Schlüsselwort zu suchen, müssen wir den Befehl Select-String
zusammen mit dem Schlüsselwort, nach dem wir suchen möchten, leiten.
Beispielcode:
$serviceOutput | Select-String Intel
Ausgabe:
Running AESMService Intel® SGX AESM
Stopped Intel(R) Capabi... Intel(R) Capability Licensing Servi...
Stopped Intel(R) TPM Pr... Intel(R) TPM Provisioning Service
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn