Kurzeinführung Windows PowerShell

Überblick - Befehlssyntax - Objekte - Schleifen - Beispiele

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 4.0 aktuell. Hier findet ihr Hinweise zur Installation und Feature von 4.0. Welche Version bei euch installiert ist könnt Ihr mit dem Cmdlet $psversiontable herausfinden.

Name                           Value                                                                                   
----                           -----                                                                                   
PSVersion                      4.0                                                                                     
WSManStackVersion              3.0                                                                                     
SerializationVersion           1.1.0.1                                                                                 
CLRVersion                     4.0.30319.34014                                                                         
BuildVersion                   6.3.9600.17090                                                                          
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}                                                                    
PSRemotingProtocolVersion      2.2

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".


 

Id      : 4392
Handles : 656
CPU     : 59,390625
Name    : BoxcryptorClassic

Id      : 3240
Handles : 199
CPU     : 91,921875
Name    : chrome

Id      : 3396
Handles : 207
CPU     : 14,09375
Name    : chrome
...

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 beispielsweise 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                                                                               ...


PS C:Windowssystem32>

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 vor allem 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.

-eqGleich
-neUngleich
-gt, -geGrößer als / Größer oder gleich
-lt , -leKleiner als / Kleiner oder gleich
-matchEntspricht
-nomatchEntspricht nicht

Das folgende Beispiel soll die Verwendung der Vergleichoperatoren 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

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.

Video Tipps

Als Nachfolger der cmd wird die PowerShell immer wichtiger, gerade weil Sie auch viele Neuerungen mit sich bringt, wodurch die Administration teilweise sehr viel komfortabler und automatisierter erfolgen kann. Die verlinkten Videokurse bietet Neueinsteiger in das Thema PowerShell einen sehr umfangreichen und guten Überblick.

[ufwp id=”630762,328292,915782″ template=”grid”]

Tolles Buch

Windows PowerShell 5.0: Das Praxisbuch
  • Schwichtenberg, Holger (Autor)
  • 1015 Seiten - 17.05.2016 (Veröffentlichungsdatum) - Carl Hanser Verlag GmbH & Co. KG (Herausgeber)