PowerShell Cookbook

Dies ist eine Liste von Dingen, die meine Kollegen und ich bei unserer Arbeit als nützlich empfunden haben. Sie soll keine Enzyklopädie sein, sondern eher ein Ort, an dem Dinge aufgezeichnet werden, die ein Anfänger nützlich finden würde, insbesondere Dinge, die lange brauchen, um herauszufinden.

Diese Seite wurde begonnen, bevor O’Reilly das Windows PowerShell Cookbook von Lee Holmes veröffentlichte. Ich empfehle das Buch von O’Reilly, aber diese Seite hat nichts damit zu tun.

Siehe auch PowerShell gotchas.

Übersicht

  • Erste Schritte/Installation
    • PowerShell installieren
    • Community Extensions-Bibliothek installieren
    • Meldung „Ausführung von Skripten ist deaktiviert“ beseitigen
    • Skripte einrichten:“ PowerShell-Laufwerksspeicherort
    • Konfigurieren Sie Ihre Eingabeaufforderung
  • Verschiedene Aufgaben
    • Auf den Bildschirm schreiben
    • Benutzer zur Eingabe auffordern
    • Daten manipulieren
    • E-Mail senden
    • Schlafen
    • Verzeichnis auflisten (rekursiv)
    • Prüfen, ob eine Datei existiert
    • Dateizeilen in ein Array lesen
    • in eine Datei schreiben
    • eine Datei umbenennen
    • eine Datei löschen
    • mit regulären Ausdrücken arbeiten
    • Strings aufteilen und verbinden
    • eine Webseite erfassen Seite
    • Lesen und Schreiben in der Registry
    • Verstehen von Anführungszeichen
    • Zeitsteuerung eines Befehls
    • Text in Sprache
    • Zugriff auf die Windows-Zwischenablage
    • Laden einer .NET-Assembly
    • Ausführen von Code, der zur Laufzeit erstellt wurde
    • Ausführen eines Programms mit einem Leerzeichen im Pfad

Erste Schritte/Installation

Installieren von PowerShell

Sie können PowerShell beziehen von:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Community Extensions-Bibliothek installieren

Die PowerShell Community Extensions (PSCX)-Bibliothek ist hier verfügbar:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX

Dies ist eine nützliche Sammlung von Cmdlets und Funktionen. Sie installiert ein Kontextmenü „PowerShell Here“ im WindowsExplorer, das ein PowerShell-Befehlsfenster in dem Ordner öffnet, auf den Sie mit der rechten Maustaste klicken. Außerdem bietet PSCX eine Profile.ps1-Beispieldatei.

Nach der Installation von PSCX geben Sie man about_pscx ein, um eine Übersicht über die Cmdlets, Provider usw. anzuzeigen, die mit PSCX geliefert werden.

top

Beseitigen Sie die Meldung „Die Ausführung von Skripten ist deaktiviert“

Das erste Problem, auf das Sie beim Ausführen von PowerShell-Skripten wahrscheinlich stoßen werden, ist in etwa folgendes:

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Das liegt an der standardmäßigen Sicherheitseinstellung in PowerShell, die die Ausführung bösartiger Skripte verhindert.

Sie können dieses Verhalten folgendermaßen ändern:

PSH> set-executionPolicy RemoteSigned

Jetzt müssen nur noch Skripte, die aus Remotequellen stammen, digital signiert werden.

top

Richten Sie Ihr „Skripte:“ PowerShell-Laufwerksspeicherort

Wenn Sie eine Reihe von PowerShell-Skripten geschrieben haben, könnte es nützlich sein, sie an einem Ort zu sammeln und ein PSDrive mit dem Namen scripts: zu erstellen, um sie schnell zu finden. Sie können Ihrem PSCX-Profil Folgendes hinzufügen, um ein solches PSDrive zu erstellen.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Konfigurieren Sie Ihre Eingabeaufforderung

Um Ihre Eingabeaufforderung zu konfigurieren, erstellen Sie einfach eine Funktion mit dem Namen prompt und fügen diese in Ihr Profil ein. Das folgende Beispiel bewirkt, dass das Arbeitsverzeichnis angezeigt wird.

function prompt { "$pwd> " }

Bitte beachten Sie, dass Sie jeden beliebigen Code in die Funktion prompt einfügen können und dieser Code jedes Mal ausgeführt wird, wenn Sie die Eingabetaste drücken.

top

Verschiedene Aufgaben

Auf den Bildschirm schreiben

Verwenden Sie Write-Host, um Ausgaben zu schreiben. Sie können optional -foregroundcolor angeben, um die Ausgabe einzufärben. Zum Beispiel können Fehler und Warnungen rot hervorgehoben werden.

Beispiel:

Write-Host "Hello world" -foregroundcolor red

top

Aufforderung an den Benutzer zur Eingabe

Verwenden Sie Read-Host.

Beispiel:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipulieren von Daten

Das Cmdlet get-date gibt ein DateTime-Objekt zurück. Ohne Argument gibt es die aktuelle Uhrzeit und das aktuelle Datum zurück. Mit einem String-Argument wird der String ohne Anführungszeichen in ein Datum umgewandelt.

Beispiel: Ermitteln Sie die Anzahl der Tage und Stunden seit der Zweihundertjahrfeier der USA.

(get-date) - (get-date 7/4/1976)

Sie können Strings auch in ein DateTime-Objekt umwandeln, indem Sie den Cast verwenden.

top

E-Mail senden

Verwenden Sie das Cmdlet Send-SmtpMail aus PowerShell Community Extensions.

Beispiel:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"

top

Sleep

Verwenden Sie das Cmdlet Start-Sleep. Dauert standardmäßig Sekunden, hat aber eine -milliseconds-Option.

Beispiel:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Verzeichnis auflisten (rekursiv)

Sie können den Befehl dir verwenden, der eigentlich ein Alias für Get-ChildItem ist. Um ein Verzeichnis rekursiv aufzulisten, fügen Sie einfach die Option -recurse hinzu.

Beispiel:

dir f:\bin -recurse

top

Testen Sie, ob eine Datei existiert

Verwenden Sie test-path.

top

Dateizeilen in ein Array lesen

Verwenden Sie get-content.

Beispiel:

$a = (get-content foo.txt)

top

In eine Datei schreiben

Verwenden Sie Out-File. Wenn Sie keine Unicode-Ausgabe wünschen, geben Sie -encoding ASCII

Beispiel:

$foo | out-file -encoding ASCII foo.txt

top

Umbenennen einer Datei

Verwenden Sie Rename-Item oder ihren Alias ren.

top

Löschen einer Datei

Verwenden Sie Delete-Item oder ihren Alias del.

top

Mit regulären Ausdrücken arbeiten

Siehe Reguläre Ausdrücke in PowerShell und Perl.

top

Strings teilen und verbinden

Strings haben eine split-Methode. Das Argument für split() ist eine Zeichenkette, die Zeichen enthält, die aufgespalten werden sollen. Die Funktion ::split ist allgemeiner. Ihr erstes Argument ist die aufzuteilende Zeichenkette und ihr zweites Argument ist ein regulärer Ausdruck, auf den aufgeteilt werden soll.

Beispiel:

$a.split("`t ")

die Zeichenkette $a wird in ein Array von Zeichenketten aufgeteilt, wobei überall dort aufgeteilt wird, wo ein Tabulator oder ein Leerzeichen vorkommt.

Beispiel:

$a = "123,456,apple"; ::split($a, ",(?!\d)")

die Zeichenkette $a wird auf Kommas aufgeteilt, denen keine Ziffern folgen. Der Split würde also „123,456“ und „apple“ zurückgeben.

Wenn die zu teilende Zeichenkette ein Windows-Pfad ist, sollten Sie den speziellen Split-Path-Befehl verwenden.

Um ein Array zu einer einzigen Zeichenkette zusammenzufügen, verwenden Sie die Methode ::join. Das erste Argument ist das Trennzeichen und das zweite das Array.

Beispiel:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Jetzt enthält $b „1*2*3“.

top

Greifen Sie auf eine Webseite zu

Verwenden Sie entweder das Get-Url von PSCX oder das net.webclient Objekt von .NET. Ersteres ist prägnanter, aber letzteres erlaubt mehr Optionen.

Beispiel:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

Der Code (new-object net.webclient) erzeugt ein .NET WebClient Objekt mit vielen nützlichen Methoden. Sie können zum Beispiel DownladFile aufrufen, um direkt auf der Festplatte zu speichern, anstatt in einer Zeichenfolge. Es gibt auch UploadData und UploadFile Methoden.

top

Lesen und Schreiben in der Registry

Sie können in der Registry wie im Dateisystem navigieren, allerdings gibt es einige Details zu beachten.

Jeder Hive der Registry ist wie ein Laufwerk. Um zum Beispiel HKEY_CURRENT_USER zu erkunden, können Sie cd HKCU: und dann cd verwenden, um sich durch den Baum zu arbeiten. Verwenden Sie Get-ItemProperty zum Lesen und Set-ItemProperty zum Schreiben. Sie können auch Remove-ItemProperty zum Löschen verwenden.

Beispiel:

Die folgenden Befehle listen den Inhalt des Registrierungsknotens auf, der die cmd.exe Shell konfiguriert. Indem wir CompletionChar auf 9 setzen, aktivieren wir die Tabulatorvervollständigung.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Dieser TechNet-Artikel enthält weitere Details.

top

Anführungszeichen verstehen

PowerShell verfügt über vier Arten von Anführungszeichen: einfache und doppelte gewöhnliche Anführungszeichen sowie einfache und doppelte Hier-Zeichenfolgen. Innerhalb von doppelten Anführungszeichen und doppelten here-Zeichenfolgen werden Variablennamen durch ihre Werte ersetzt und PowerShell-Escape-Sequenzen interpretiert. In einfachen Anführungszeichen und einfachen here-Zeichenfolgen werden Variablennamen nicht erweitert und Escape-Sequenzen werden nicht interpretiert. Der Codeschnipsel

 $a = "bar" 'foo`t$a', "foo`t$a"

ergibt beispielsweise die Ausgabe

 foo`t$a foo bar

, da innerhalb des doppelten Anführungszeichens `t zu einem Tabulator und $a zu „bar“ erweitert wird.

PowerShell here-Strings sind wie here-Dokumente in Perl. Innerhalb einer here-Zeichenkette sind doppelte und einfache Anführungszeichen nicht speziell, sondern werden wörtlich zitiert. Außerdem werden Zeilenumbrüche beibehalten.

Eine here-Zeichenkette beginnt entweder mit @" oder @' und endet mit denselben Symbolen in umgekehrter Reihenfolge. Nach der öffnenden Markierung und vor der schließenden Markierung muss ein Zeilenumbruch stehen.

Beispiel

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

erzeugt

 foo "baz" 'qux' bar

und

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

erzeugt

 foo "baz" 'qux' $a

Beachten Sie, dass nach dem Anführungszeichen, das eine here-Zeichenkette eröffnet, kein Leerzeichen stehen darf. Andernfalls erhalten Sie die Meldung „Unerkanntes Token im Quelltext“

Auch wenn sie ähnlich aussehen, sind here-Zeichenfolgen in PowerShell und verbatim-Zeichenfolgen in C# recht unterschiedlich. In der folgenden Tabelle sind die Unterschiede zusammengefasst.

C# verbatim strings PowerShell here-.strings
Kann Zeilenumbrüche enthalten Muss Zeilenumbrüche enthalten
Nur doppelte Anführungszeichen Einfache und doppelte Anführungszeichen
Beginnt mit @“ Beginnt mit @“ (oder @‘) plus einem Zeilenumbruch
Ende mit „ Ende mit einem Zeilenumbruch gefolgt von „@ (oder ‚@)
Kann nicht un- enthaltenAnführungszeichen enthalten Darf Anführungszeichen enthalten
Schaltet C#-Escape-Sequenzen aus ‚@ schaltet PowerShell-Escape-Sequenzen aus, „@“ jedoch nicht

top

Zeit für einen Befehl

Verwenden Sie Measure-Command, um die Zeit zu bestimmen, die für die Ausführung einer Aufgabe benötigt wird.

top

Text in Sprache

Verwenden Sie Out-Speech von PSCX aus.

top

Zugriff auf die Windows-Zwischenablage

Verwenden Sie die PSCX-Cmdlets Get-Clipboard und Out-Clipboard, um aus der Zwischenablage zu lesen und in sie zu schreiben.

top

Laden einer .NET-Assembly

Sie können LoadWithPartialName aufrufen. Um beispielsweise die Assembly für die Team Foundation Server-API zu laden, würden Sie

::LoadWithPartialName("Microsoft.TeamFoundation.Client")

Siehe auch Resolve-Assembly von PSCX.

top

Zur Laufzeit erstellten Code ausführen

Der Befehl Invoke-Expression ist analog zu eval in Perl oder JavaScript. Invoke-Expression $str führt den Code aus, der in der Zeichenkette $str enthalten ist.

top

Ein Programm mit einem Leerzeichen im Pfad ausführen

Setzen Sie Anführungszeichen um den Pfad und stellen Sie ein kaufmännisches Und davor. Zum Beispiel wird

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

das ausführbare Programm WinEdt.exe starten, das zwei Leerzeichen in seinem vollständigen Pfad hat.

Beachten Sie, dass Sie das kaufmännische Und nicht weglassen können. Im Gegensatz zu cmd.exe nimmt PowerShell nicht an, dass alle Zeichenfolgen Befehle sind. Ohne das kaufmännische Und ist ein Pfad in Anführungszeichen nur eine Zeichenfolge.

oben

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.