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
- Installieren von PowerShell
- Community Extensions-Bibliothek installieren
- Beseitigen Sie die Meldung „Die Ausführung von Skripten ist deaktiviert“
- Richten Sie Ihr „Skripte:“ PowerShell-Laufwerksspeicherort
- Konfigurieren Sie Ihre Eingabeaufforderung
- Verschiedene Aufgaben
- Auf den Bildschirm schreiben
- Aufforderung an den Benutzer zur Eingabe
- Manipulieren von Daten
- E-Mail senden
- Sleep
- Verzeichnis auflisten (rekursiv)
- Testen Sie, ob eine Datei existiert
- Dateizeilen in ein Array lesen
- In eine Datei schreiben
- Umbenennen einer Datei
- Löschen einer Datei
- Mit regulären Ausdrücken arbeiten
- Strings teilen und verbinden
- Greifen Sie auf eine Webseite zu
- Lesen und Schreiben in der Registry
- Anführungszeichen verstehen
- Zeit für einen Befehl
- Text in Sprache
- Zugriff auf die Windows-Zwischenablage
- Laden einer .NET-Assembly
- Zur Laufzeit erstellten Code ausführen
- Ein Programm mit einem Leerzeichen im Pfad ausführen
Ü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