Kurzeinführung Windows PowerShell – Was sind Objekte – Cmdlets – Schleifen..

Grundlagen

Windows PowerShell ist sowohl eine Befehlszeilenshell als auch eine Skriptsprache mit mehr als 130 Befehlszeilenprogrammen, sogenannten Cmdlets (Command-Lets), die extrem konsistenten Syntax- und Namenskonventionen folgen und mit benutzerdefinierten Cmdlets erweitert werden können.

Ab Windows 7 und Windows Server 2008 ist die PowerShell standardmäßig vorhanden. Im Moment ist die Version 5.1 aktuell. Welche Version bei euch installiert ist könnt Ihr mit dem Cmdlet $psversiontable herausfinden.

Auslesen Der Aktuellen Windows Powershell Version
Auslesen der Aktuellen Windows PowerShell Version

PowerShell-Syntax, – Cmdlets und Objekte

Anweisungen werden mithilfe von Cmdlets ausgegeben. Bei einem Cmdlet handelt es sich um ein Einzelfeature zum Bearbeiten eines Objekts. Sie verwenden eine Verb-Nomen-Syntax, d. h. ein Verb und ein Nomen getrennt durch einen Bindestrich. Parameter werden mit einem vorgestellten „-“ gekennzeichnet.

PowerShell ist ein objektorientierte Shell, das heißt, dass das Ein- und Ausgeben von Befehlen in der Regel Objekte sind. Die Verbindung von Befehlen wir durch den sogenannten „Pipe“ Befehl dargestellt: |. Detaillierte Informationen zur Pipeline und dessen Anwendung könnt ihr hier nachlesen.


Zum Artikel: Powershell Pipeline richtig verwenden

Beispiele

NAME
    Get-Process
    
SYNTAX
    Get-Process [[-Name] <string[]>] [-ComputerName <string[]>] [-Module] [-FileVersionInfo]  [<CommonParameters>]
    
    Get-Process [[-Name] <string[]>] -IncludeUserName  [<CommonParameters>]
    
    Get-Process -Id <int[]> -IncludeUserName  [<CommonParameters>]
    
    Get-Process -Id <int[]> [-ComputerName <string[]>] [-Module] [-FileVersionInfo]  [<CommonParameters>]
    
    Get-Process -InputObject <Process[]> -IncludeUserName  [<CommonParameters>]
    
    Get-Process -InputObject <Process[]> [-ComputerName <string[]>] [-Module] [-FileVersionInfo]  [<CommonParameters>]
    
    
PARAMETER
    -ComputerName <string[]>
    
    -FileVersionInfo
    
    -Id <int[]>
    
    -IncludeUserName
    
    -InputObject <Process[]>
    
    -Module
    
    -Name <string[]>
    
    <CommonParameters>
        Dieses Cmdlet unterstützt folgende allgemeine Parameter: "Verbose", "Debug",
        "ErrorAction", "ErrorVariable", "WarningAction", "WarningVariable",
        "OutBuffer", "PipelineVariable" und "OutVariable". Weitere Informationen finden Sie unter 
        "about_CommonParameters" (https://go.microsoft.com/fwlink/?LinkID=113216). 
    
ALIASE
    gps
    ps
    
HINWEISE
    Die Hilfedateien für dieses Cmdlet können von "Get-Help" auf diesem Computer nicht gefunden werden. Es wird nur 
    ein Teil der Hilfe angezeigt.
        -- Sie können die Hilfedateien für das Modul, das dieses Cmdlet enthält, herunterladen und installieren, indem 
    Sie "Update-Help" verwenden.
        -- Wenn Sie das Hilfethema für dieses Cmdlet online anzeigen möchten, geben Sie Folgendes ein: "Get-Help 
    Get-Process -Online", oder 
           gehen Sie zu "https://go.microsoft.com/fwlink/?LinkID=113324".

Was ist ein Objekt

Bei einem Objekt handelt es sich um ein Programmkonstrukt. Vom technischen Standpunkt aus handelt es sich bei einem .NET-Objekt um eine Instanz einer .NET-Klasse, die sich aus Daten und den mit diesen Daten verknüpften Operationen zusammensetzt.

Das Cmdlet Get-Service gibt ein oder mehrere Objekte zurück, die Dienste repräsentieren. Objekte können über Eigenschaften verfügen, die in der Ressource vorhandene Daten oder Attribute darstellen. Ein Objekt, das insbesondere einen Dienst repräsentiert, verfügt über Eigenschaften für den Dienstnamen und den Startstatus.

Wenn man eine Eigenschaft abruft, ruft man die Daten aus der Ressource ab. Wenn man eine Eigenschaft festlegt, wird diese in die Ressource geschrieben.

Objekte verfügen auch über Methoden. Das sind Aktionen, die das Objekt durchführen kann. Das Dienstobjekt verfügt z.B. über die Methoden start und stop.

Variablen in der Powershell

Variablen beginnen in PowerShell immer mit einem Dollarzeichen ($).

PS C:\Windows\system32\ $p = Get-Process
PS C:\Windows\system32\ $p
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                                                                                                                                   
-------  ------    -----      ----- -----   ------     -- -----------                                                                                                                                   
     66       6      832       1016    19     0,06   1144 AsLdrSrv                                                                                                                                      
    188      16     2940       3080   102     3,17    896 AsusTPCenter                                                                                                                                  
     48       6      756        528    45     0,55   4180 AsusTPHelper                                                                               ...

Praxisbeispiele:

Erstellung ein PowerShell Hilfe Datei: PowerShell-hilfe.txt

1. Möglichkeit:

Get-help * | get-help -detailed | out-file f:\PowerShell-hilfe.txt

Hier wurde das Ergebnis mit der Pipe weitergeleitet an das Cmdlet: out-file. Anschließend muss noch der Pfad mit angegeben werden, wo man die Datei speichern möchte.  Man sollte natürlich bedenken, dass man am Speicherort auch die entsprechenden Recht hat um hier ein Dokument anlegen zu können.

2. Möglichkeit:

Get-help * | get-help -detailed > f:\PowerShell-hilfe.txt

Hier wurde mit dem folgenden Zeichen > der Weiterleitungsoperator verwendet. Das Ergebnis wird also in die Datei geschrieben. Beachte: Wenn man den Operator doppelt verwendet: >> Wird der Inhalt in die bereits vorhandene Datei angefügt. Bei einmaligem Verwenden wird der Inhalt – falls einer vorhanden ist – überschrieben. Anwendung findet der doppelte Operator vorwiegend bei Log Dateien.

Schleifenkonstrukte / Kontrollstrukturen / Vergleichsoperatoren

Für die Verwendung von Schleifenkonstrukte  bzw. Vergleichsoperatoren soll die folgende Tabelle eine kleine Hilfestellung geben. Kontrollstrukturen werden vom Prinzip genauso so verwendet wie auch in zahlreichen anderen Skriptsprachen.

VergleichsoperatorBeschreibung
-eqGleich
-neUngleich
-gt, -geGrößer als / Größer oder gleich
-lt , -leKleiner als / Kleiner oder gleich
-matchEntspricht
-nomatchEntspricht nicht
Überblick Windows PowerShell – Vergleichsoperatoren

Das folgende Beispiel soll die Verwendung der Vergleichsoperatoren etwas verdeutlichen. Grundsätzlich wird hier folgende Ausgabe erzeugt. Es werden alle Dienste ausgegeben.  Diese werden nach Ihrem Status (start/stop) sortiert und noch zusätzlich in unterschiedlichen Farben dargestellt.

Get-service | foreach-object {
	if ($_.status -eq „stopped“) {write-host -foregroundcolor green $_.name $_.status}
	else {write-host -foregroundcolor red $_.name $_.status }}

Die Ausgabe sollte in etwas wie folgt aussehen.

Ausgabe-Dienste-Farbig
Ausgabe: Dienste Farbig

Es werden alle Dienste aufgelistet und anschließend mit der foreach-Object Schleife durchlaufen. Innerhalb der Schleife wird mit einer if Bedingung der Status des Dienstes überprüft. In der Schleife werden die Object mit dem $_. Zeichen angesprochen. Es wird geprüft, ob der Status gleich „stopped“ ist. Falls ja, dann gib in der Konsole den Namen ($_.name ) und den Status ($_.status) des Dienstes in grüner Farbe aus. Andernfalls gib ebenfalls den Namen und den Status aus, aber in der Farbe Rot.

6384c3166a2c4a3fb2f7939e44f69213

Das könnte dich auch interessieren:

Dieser Artikel beinhaltet Partner-Links. Durch einen Klick darauf ge­lan­gt ihr direkt zum Anbieter. Solltet ihr euch dort für einen Kauf entscheiden, erhält IT-Learner eine kleine Provision. Der Preis ändert sich für euch nicht. Danke für eure Unterstützung! Letzte Aktualisierung am 9.11.2023


Steigere dein Wissen

Kostenlose Befehlsreferenzen und E-Books herunterladen

Mehr Informationen zu den kostenlosen Materialien.


Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen