Go Pro: Das Power-Benutzerhandbuch für PowerShell

Wenn Sie mit Windows 10 gerungen haben, haben Sie zweifellos von PowerShell gehört. Wenn Sie kürzlich versucht haben, mit Win7 / 8.1 etwas Besonderes zu machen, ist PowerShell wahrscheinlich auch dabei. Nachdem Sie sich jahrelang auf die Windows-Befehlszeile und die zusammengewürfelten Batchdateien verlassen haben, ist es an der Zeit, etwas Stärkeres, Anpassungsfähigeres - Besseres ins Visier zu nehmen.

PowerShell ist eine enorme Erweiterung der Windows-Toolbox und kann angesichts dieser Größe ein wenig Angst hervorrufen. Ist es eine Skriptsprache, eine Befehlsschale, ein Bodenwachs? Müssen Sie ein Cmdlet mit einer instanziierten .Net-Klasse verknüpfen, um mit Anbietern ausgeführt zu werden? Und warum sprechen alle Support-Dokumente über Administratoren? Muss ich ein professioneller Windows-Administrator sein, um davon Gebrauch zu machen?

Entspannen. PowerShell ist leistungsstark, muss aber nicht einschüchternd sein.

Die folgende Anleitung richtet sich an Personen, die einen oder zwei Windows-Befehle ausgeführt oder eine Batchdatei blockiert haben. Betrachten Sie es als eine schrittweise Umwandlung von PowerShell neugierig auf PowerShell-fähig.

Schritt 1: Drehen Sie es auf

Das erste, was Sie benötigen, ist PowerShell selbst. Wenn Sie Windows 10 verwenden, ist PowerShell 5 - die neueste Version - bereits installiert. (Das Win10 Anniversary Update enthält 5.1, aber Sie werden den Unterschied zum 5.0 des Herbst-Updates nicht kennen.) Windows 8 und 8.1 werden mit PowerShell 4 geliefert, das gut genug ist, um Ihre Füße nass zu machen. Die Installation von PowerShell unter Windows 7 ist nicht schwierig, erfordert jedoch besondere Sorgfalt - und Sie müssen .Net Framework separat installieren. JuanPablo Jofre beschreibt die Installation von WMF 5.0 (Windows Management Framework), das PowerShell enthält, sowie von Tools, die Sie beim Start wahrscheinlich nicht verwenden werden, auf MSDN.

PowerShell bietet zwei Schnittstellen. Fortgeschrittene Benutzer entscheiden sich für die vollständige Benutzeroberfläche, die als Integrated Scripting Environment (ISE) bezeichnet wird. Anfänger werden jedoch am besten von der PowerShell-Konsole bedient, einer einfachen Textoberfläche, die an die Windows-Befehlszeile erinnert, oder sogar von DOS 3.2.

Um PowerShell als Administrator unter Windows 10 zu starten, klicken Sie auf Start und scrollen Sie in der Liste der Apps zu Windows PowerShell. Klicken Sie auf diese Zeile, klicken Sie mit der rechten Maustaste auf Windows PowerShell und wählen Sie Als Administrator ausführen. Suchen Sie in Windows 8.1 im Windows-Systemordner nach Windows PowerShell. In Win7 befindet es sich im Ordner "Zubehör". Sie können PowerShell als "normalen" Benutzer ausführen, indem Sie der gleichen Reihenfolge folgen, jedoch mit einem Linksklick.

In jeder Windows-Version können Sie die Windows-Suche verwenden, um nach PowerShell zu suchen. In Windows 8.1 und Windows 10 können Sie es in Ihr Strg-X-Menü „Energie“ einfügen (klicken Sie mit der rechten Maustaste auf eine leere Stelle in der Taskleiste und wählen Sie Eigenschaften; aktivieren Sie auf der Registerkarte Navigation das Kontrollkästchen Eingabeaufforderung ersetzen). Sobald Sie es geöffnet haben, ist es eine gute Idee, PowerShell an Ihre Taskleiste anzuheften. Ja, es wird dir so gut gefallen.

Schritt 2: Geben Sie altmodische Windows-Befehle ein

Sie werden erstaunt sein, wie viel Windows-Befehlszeilensyntax in PowerShell wie erwartet funktioniert.

Ändert beispielsweise cdVerzeichnisse (auch als Ordner bezeichnet) und dirlistet weiterhin alle Dateien und Ordner auf, die im aktuellen Ordner enthalten sind.

Je nachdem, wie Sie die PowerShell-Konsole starten, können Sie um c:\Windows\system32oder um starten c:\Users\. Im Screenshot-Beispiel cd ..bewege ich mich (beachten Sie das Leerzeichen), um jeweils eine Ebene nach oben zu verschieben, dirund führe dann alle Dateien und Unterordner im C:\Verzeichnis aus.

Schritt 3: Installieren Sie die Hilfedateien

Befehle mögen cdund dirsind keine nativen PowerShell-Befehle. Sie sind Aliase - Ersatz für echte PowerShell-Befehle. Aliase können für diejenigen von uns nützlich sein, deren Fingergedächtnis schwer zu überwinden ist. Sie berühren jedoch noch nicht einmal die wichtigsten Teile von PowerShell.

Geben Sie helpgefolgt von einem bekannten Befehl ein , um ein Gefühl für PowerShell selbst zu bekommen . Zum Beispiel tippe ich im Screenshot help dir.

In der PowerShell-Hilfe wird angegeben, dass dies direin Alias ​​für den PowerShell-Befehl ist Get-ChildItem. Sicher genug, wenn Sie get-childiteman der PS C:\>Eingabeaufforderung eingeben, sehen Sie genau das, was Sie mit dem dirBefehl gesehen haben.

Wie unten im Screenshot angegeben, werden Hilfedateien für PowerShell nicht automatisch installiert. Zum Abrufen von ihnen (Sie tun wollen , um sie zu bekommen), melden Sie sich an Powershell im Administratormodus, dann geben update-help. Die Installation der Hilfedateien dauert einige Minuten, und möglicherweise fehlen einige Module. Die Hilfe für NetWNV und SecureBoot konnte auf meinem Testcomputer nicht installiert werden. Aber wenn Sie fertig sind, steht Ihnen das vollständige Hilfesystem zur Verfügung.

get-helpGeben Sie ab diesem Zeitpunkt den Befehl ("Cmdlet" in PowerShell speak, ausgesprochen "command-let") ein, der Sie betrifft, und sehen Sie die gesamte Hilfe für dieses Element. Erstellt beispielsweise get-help get-childitemeine Zusammenfassung der get-childitemOptionen. Außerdem werden Sie aufgefordert, Variationen des Themas einzugeben. Also folgendes:

get-help get-childitem -examples

produziert sieben detaillierte Beispiele für die Verwendung get-childitem. Der PowerShell-Befehl

get-help get-childitem -detailed

Enthält diese sieben Beispiele sowie eine detaillierte Erläuterung aller für das get-childitemCmdlet verfügbaren Parameter .

Schritt 4: Hilfe zu den Parametern erhalten

Im help dirScreenshot haben Sie möglicherweise bemerkt, dass unter SYNTAXfür zwei Einträge vorhanden sind get-childitem. Die Tatsache, dass es zwei separate Syntaxen für das Cmdlet gibt, bedeutet, dass es zwei Möglichkeiten gibt, das Cmdlet auszuführen. Wie halten Sie die Syntax getrennt - und was bedeuten die Parameter? Die Antwort ist einfach, wenn Sie den Trick kennen.

get-childitemVerwenden Sie den folgenden -fullParameter, um alle Details zu den Parametern für das Cmdlet oder ein anderes Cmdlet abzurufen :

get-help get-childitem -full

Dadurch wird eine zeilenweise Auflistung erstellt, was Sie mit dem Cmdlet tun können und was passieren kann (oder nicht!). Siehe den Screenshot.

Durch Durchsuchen der Parameterdetails ist relativ leicht zu erkennen, dass get-childitemzum Abrufen von untergeordneten Elementen (z. B. Namen von Unterordnern oder Dateinamen) an einem von Ihnen angegebenen Ort mit oder ohne bestimmte Zeichenübereinstimmungen verwendet werden kann. Zum Beispiel:

get-childItem “*.txt” -recurse

Ruft eine Liste aller " *.txt" - Dateien im aktuellen Ordner und aller Unterordner ab (aufgrund des -recurseParameters). Während die folgenden:

get-childitem “HKLM:\Software”

Gibt eine Liste aller übergeordneten Registrierungsschlüssel zurück HKEY_LOCAL_MACHINE\Software.

Wenn Sie jemals versucht haben, über eine Windows-Befehlszeile oder eine Batchdatei in die Registrierung zu gelangen, können Sie sicher sehen, wie leistungsfähig dieser Zugriff sein muss.

Schritt 5: Nageln Sie die Namen fest

Es gibt einen Grund , warum die Cmdlets wir bisher gleich aussehen gesehen haben: get-childitem, update-helpund get-helpalle folgen der gleiche Verb-Substantiv - Konvention. Zum Glück verwenden alle PowerShell-Cmdlets diese Konvention, wobei ein Verb vor einem (singulären) Substantiv steht. Diejenigen unter Ihnen, die wochenlang um uneinheitlich benannte VB- und VBA-Befehle gekämpft haben, können aufatmen.

Um zu sehen, wohin wir gehen, werfen Sie einen Blick auf einige der häufigsten Cmdlets (dank Ed Wilsons Hey, Scripting Guy! -Blog). Beginnen Sie mit den Cmdlets, die in Ihr System gelangen, und rufen Sie nützliche Informationen wie die folgenden ab:

  • set-location: Setzt den aktuellen Arbeitsort auf einen angegebenen Ort
  • get-content: Ruft den Inhalt einer Datei ab
  • get-item: Ruft Dateien und Ordner ab
  • copy-item: Kopiert ein Element von einem Ort an einen anderen
  • remove-item: Löscht Dateien und Ordner
  • get-process: Ruft die Prozesse ab, die auf einem lokalen oder Remote-Computer ausgeführt werden
  • get-service: Ruft die Dienste ab, die auf einem lokalen oder Remotecomputer ausgeführt werden
  • invoke-webrequest: Ruft Inhalte von einer Webseite im Internet ab

Verwenden Sie get-helpwie in , um zu sehen, wie ein bestimmtes Cmdlet funktioniert

get-help copy-item -full

Anhand der Hilfebeschreibung können Sie leicht herausfinden, was das Cmdlet will. Wenn Sie beispielsweise alle Ihre Dateien und Ordner von Documentsnach kopieren möchten c:\temp, verwenden Sie Folgendes:

copy-item c:\users\[username] \documents\* c:\temp

Während Sie diesen Befehl eingeben, sehen Sie einige nette Details, die in die PowerShell-Umgebung integriert sind. Wenn Sie beispielsweise copy-idie Tabulatortaste eingeben und drücken, wird PowerShell ausgefüllt Copy-Itemund ein Leerzeichen eingefügt . Wenn Sie ein Cmdlet falsch eingeben und PowerShell es nicht herausfinden kann, erhalten Sie eine sehr gründliche Beschreibung dessen, was schief gelaufen ist.

Probieren Sie dieses Cmdlet aus. (Möglicherweise wird versucht, Sie dazu zu bringen, ein Programm zum Lesen des Felds "Info" zu installieren. Wenn ja, ignorieren Sie es.)

invoke-webrequest askwoody.com

Sie erhalten eine kurze Liste der Inhaltsdeklarationen, Überschriften, Bilder, Links und mehr der Webseite. Sehen Sie, wie das funktioniert? Beachten Sie in der get-helpListe, invoke-webrequestdass das invoke-webrequestCmdlet „Sammlungen von Formularen, Links, Bildern und anderen wichtigen HTML-Elementen zurückgibt“ - genau das, was Sie auf Ihrem Bildschirm sehen sollten.

Mit einigen Cmdlets können Sie PowerShell selbst steuern oder steuern:

  • get-command: Listet alle verfügbaren Cmdlets auf (es ist eine lange Liste!)
  • get-verb: Listet alle verfügbaren Verben auf (die linke Hälfte der Cmdlets)
  • clear-host: Löscht die Anzeige im Host-Programm

Mit verschiedenen Parametern (denken get-helpSie daran ) können Sie die Befehle einschränken und die Optionen eingrenzen, die für Sie von Nutzen sein können. Versuchen Sie beispielsweise Folgendes, um eine Liste aller Cmdlets anzuzeigen, die mit Windows-Diensten funktionieren:

get-command *-service

Es listet alle Verben auf, die serviceals Substantiv verfügbar sind . Hier ist das Ergebnis:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Sie können diese Cmdlets mit anderen Cmdlets kombinieren, um in nahezu jeden Teil von PowerShell zu graben. Hier kommen Rohre ins Spiel.

Schritt 6: Bringen Sie die Rohre ein

Wenn Sie jemals die Windows-Befehlszeile verwendet oder eine Batchdatei durchsucht haben, kennen Sie sich mit Umleitungen und Pipes aus. In einfachen Worten, sowohl die Umleitung (das  >Zeichen) als auch die Pipes (das |Zeichen) nehmen die Ausgabe einer Aktion und kleben sie an eine andere Stelle. Sie können beispielsweise die Ausgabe eines dirBefehls in eine Textdatei umleiten oder das Ergebnis eines pingBefehls in eine "Pipe" umleiten find, um interessante Ergebnisse herauszufiltern.

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

Im zweiten Befehl oben findsucht der Befehl nach der Zeichenfolge packetsin der Pipe-Ausgabe von askwoody.com pingund klebt alle übereinstimmenden Zeilen in eine aufgerufene Datei temp2.txt.

Vielleicht überraschend, funktioniert der erste dieser Befehle in PowerShell einwandfrei. Um den zweiten Befehl auszuführen, möchten Sie ungefähr Folgendes:

ping askwoody.com | select-string packets | out-file temp2.txt

Durch die Verwendung von Umleitung und Pipes werden die Funktionen der Windows-Befehlszeile erheblich erweitert: Anstatt beispielsweise endlos nach unten zu scrollen und nach einer Textzeichenfolge zu suchen, können Sie einen Windows-Befehl mit Pipes zusammenstellen, der die Überprüfung für Sie übernimmt.

PowerShell verfügt über Piping-Funktionen, ist jedoch nicht auf Text beschränkt. Stattdessen können Sie mit PowerShell ein gesamtes Objekt von einem Cmdlet zum nächsten übergeben, wobei ein „Objekt“ eine Kombination aus Daten (Eigenschaften genannt) und den Aktionen (Methoden) ist, die für die Daten verwendet werden können.

Der schwierige Teil liegt jedoch in der Ausrichtung der Objekte. Die Art des von einem Cmdlet gelieferten Objekts muss mit den vom empfangenden Cmdlet akzeptierten Objekttypen übereinstimmen. Text ist eine sehr einfache Art von Objekt. Wenn Sie also mit Text arbeiten, ist es einfach, Elemente auszurichten. Andere Objekte sind nicht so rudimentär.

Wie finde ich es heraus? Willkommen im get-memberCmdlet. Wenn Sie wissen möchten, welchen Objekttyp ein Cmdlet erzeugt, leiten Sie es durch get-member. Wenn Sie beispielsweise versuchen, die auf Ihrem Computer ausgeführten Prozesse herauszufinden und die Optionen auf das get-processCmdlet eingegrenzt haben, erfahren Sie wie folgt, was das get-processCmdlet erzeugt:

get-process | get-member

Wenn Sie diesen Befehl ausführen, wird eine lange Liste von Eigenschaften und Methoden für erstellt get-process. Ganz am Anfang der Liste sehen Sie jedoch den Objekttyp, der get-process Folgendes erstellt:

TypeName: System.Diagnostics.Process

Der Screenshot unten erfahren Sie auch , dass get-processgenannt Eigenschaften hat Handles, Name, NPM, PM, SI, VM, und WS.

Wenn Sie die Ausgabe von get-processso bearbeiten möchten, dass Sie damit arbeiten können (anstatt eine lange Liste aktiver Prozesse auf dem Monitor anzuzeigen), müssen Sie ein anderes Cmdlet suchen, das System.Diagnostics.Processals Eingabe verwendet werden kann. Um ein williges Cmdlet zu finden, verwenden Sie einfach ... warten Sie ... PowerShell:

get-command -Parametertype System.Diagnostics.Process

Dadurch wird eine Liste aller Cmdlets erstellt, die verarbeitet werden können System.Diagnostics.Process.

Einige Cmdlets sind dafür berüchtigt, fast jede Art von Eingabe zu akzeptieren. Chef unter ihnen : where-object. Vielleicht verwirrend, where-objectdurchläuft jedes Element, das über die Pipeline gesendet wird, nacheinander und wendet alle von Ihnen angeforderten Auswahlkriterien an. Es gibt einen speziellen Marker namens $_. Auf diese Weise können Sie jedes Element in der Pipe einzeln durchlaufen.

svchostAngenommen, Sie möchten eine Liste aller auf Ihrem Computer ausgeführten Prozesse erstellen, die als " " bezeichnet werden. In PowerShell sprechen Sie mit einer NameEigenschaft von  svchost. Versuchen Sie diesen PowerShell-Befehl:

get-process | where-object {$_.Name -eq “svchost”}

Das where-objectCmdlet betrachtet jedes System.Diagnostics.ProcessElement und vergleicht das .NameElement mit " svchost". Wenn der Gegenstand übereinstimmt, wird er aus dem Ende der Pfeife ausgespuckt und auf Ihrem Monitor eingegeben. Siehe den Screenshot.