Einführung in die Skripterstellung
Die PowerShell-Skripterstellung ist ein Prozess, bei dem mehrere Anweisungen in der PowerShell-Sprache geschrieben und dann in einer Textdatei gespeichert werden. Welcher Zweck soll damit erfüllt werden? Wenn Sie PowerShell bereits eine Weile verwenden, werden Sie feststellen, dass sich bestimmte Aufgaben, z. B. das Erstellen von Protokollberichten oder das Verwalten von Benutzern, wiederholen. Wenn Sie etwas häufig wiederholen, empfiehlt es sich wahrscheinlich, sie zu automatisieren: So speichern Sie es so, dass es leicht wiederverwendet werden kann.
Die Schritte zum Automatisieren Ihrer Aufgabe beinhalten in der Regel u. a. Aufrufe von Cmdlets, Funktionen oder Variablen. Um diese Schritte zu speichern, erstellen Sie eine Datei, die in .ps1 endet, und speichern sie. Sie haben dann ein Skript, das Sie ausführen können.
Bevor Sie mit dem Schreiben von Skripts beginnen, erhalten Sie einen Überblick über die Features der PowerShell-Skriptsprache:
Variable Mithilfe von Variablen können Sie Werte speichern. Sie können Variablen auch als Argumente für Befehle verwenden.
Funktionen. Eine Funktion ist eine benannte Liste von Anweisungen. Funktionen erzeugen eine Ausgabe, die in der Konsole angezeigt wird. Sie können Funktionen auch als Eingabe für andere Befehle verwenden.
Hinweis
Bei vielen Aufgaben, für die Sie PowerShell verwenden, geht es um Auswirkungen auf den Systemstatus oder um Änderungen daran, sei es lokal oder anderweitig. Häufig ist die Ausgabe ein sekundäres Problem (z. B. Berichtsdaten).
Flusssteuerung. Mithilfe der Flusssteuerung können Sie verschiedene Ausführungspfade mithilfe von Konstrukten wie
If,ElseIfundElsesteuern.Schleifen. Schleifen sind Konstrukte, mit denen Sie Arrays verwenden, jedes Element überprüfen und eine Art von Vorgang für jedes Element ausführen können. Schleifen sind jedoch mehr als Arrayiterationen. Sie können auch eine Schleife mithilfe von
Do-While-Schleifen bedingt weiter ausführen. Weitere Informationen finden Sie unter About Do.Fehlerbehandlung. Es ist wichtig, Skripts zu schreiben, die stabil sind und verschiedene Fehlertypen behandeln können. Sie müssen den Unterschied zwischen Fehlern mit Abbruch und Fehlern ohne Abbruch kennen. Sie verwenden Konstrukte wie
TryundCatch. Wir behandeln dieses Thema in der letzten konzeptionellen Einheit dieses Moduls.Ausdrücke. Sie verwenden häufig Ausdrücke in PowerShell-Skripts. Beispielsweise zum Erstellen von benutzerdefinierten Spalten oder benutzerdefinierten Sortierausdrücken. Ausdrücke sind Darstellungen von Werten in der PowerShell-Syntax.
.NET- und .NET Core-Integration. PowerShell ermöglicht eine leistungsstarke Integration in .NET und .NET Core. Diese Integration geht jedoch über den Rahmen dieses Moduls hinaus.
Ausführen eines Skripts
Sie müssen beachten, dass einige Skripts nicht sicher sind. Wenn Sie ein Skript im Internet finden, sollten Sie es besser nicht auf Ihrem Computer ausführen, es sei denn, Sie wissen genau, wie es funktioniert. Selbst bei Skripts, die Ihrer Meinung nach sicher sind, besteht möglicherweise ein Risiko. Stellen Sie sich beispielsweise ein Skript vor, das Elemente in einer Testumgebung bereinigt. Dieses Skript könnte in einer Produktionsumgebung Schaden anrichten. Sie müssen genau verstehen, was ein Skript macht, gleich, ob es von Ihnen oder einem Kollegen geschrieben wurde oder ob Sie es aus dem Internet heruntergeladen haben.
PowerShell versucht im Wesentlichen auf zwei Arten, Sie vor unbeabsichtigten Aktionen zu schützen:
- Anforderung zum Ausführen von Skripts über einen vollständigen oder relativen Pfad. Wenn Sie ein Skript ausführen, müssen Sie immer den Pfad des Skripts angeben. Die Angabe des Pfades dient dazu, dass Sie genau nachvollziehen können, was Sie gerade ausführen. Beispielsweise kann es Befehle und Aliase auf Ihrem Computer geben, die Sie nicht ausführen möchten, die aber denselben Namen wie Ihr Skript aufweisen. Das Einbetten des Pfads ermöglicht eine zusätzliche Überprüfung, um sicherzustellen, dass Sie genau das ausführen, was Sie ausführen möchten.
- Ausführungsrichtlinie. Eine Ausführungsrichtlinie ist ein Sicherheitsfeature. Wie bei der Anforderung des Pfads eines Skripts kann eine Richtlinie Sie daran hindern, unbeabsichtigte Aktionen auszuführen. Sie können die Richtlinie auf verschiedenen Ebenen festlegen, z. B. für den lokalen Computer, den aktuellen Benutzer oder eine bestimmte Sitzung. Sie können auch eine Gruppenrichtlinieneinstellung verwenden, um Ausführungsrichtlinien für Computer und Benutzer festzulegen.
Diese beiden Mechanismen verhindern nicht, dass Sie eine Datei öffnen, ihren Inhalt kopieren, den Inhalt in einer Textdatei platzieren und die Datei ausführen. Sie verhindern auch nicht, dass Sie den Code über die Konsole ausführen. Mit diesen Mechanismen können Sie verhindern, dass Sie etwas Unbeabsichtigtes tun. Sie sind kein Sicherheitssystem.
So erstellen und führen Sie ein Skript aus:
Erstellen Sie einige PowerShell-Anweisungen wie die folgenden, und speichern Sie sie in einer Datei, die mit .ps1 endet:
# PI.ps1 $PI = 3.14 Write-Host "The value of `$PI is $PI"Führen Sie das Skript aus, indem Sie es über seinen Namen und Pfad aufrufen:
Hinweis
Stellen Sie vor dem Ausführen des Skripts sicher, dass die aktuelle Shell PowerShell ist. Alternativ können Sie unter Linux oder macOS einen Shebang am Anfang der Skriptdatei speichern, um PowerShell als Skriptinterpreter zu definieren.
./PI.ps1Es empfiehlt sich, die Dateierweiterung in den Aufruf einzuschließen – unbedingt erforderlich ist dies jedoch nicht.
Ausführungsrichtlinie
Sie können die Ausführungsrichtlinie mithilfe der folgenden Cmdlets verwalten:
Get-ExecutionPolicy. Dieses Cmdlet gibt die aktuelle Ausführungsrichtlinie zurück. Unter Linux und macOS lautet der zurückgegebene WertUnrestricted. Für diese Betriebssysteme können Sie den Wert nicht ändern. Diese Einschränkung macht Linux oder Mac nicht weniger sicher. Denken Sie daran, dass eine Ausführungsrichtlinie ein Sicherheitsfeature und kein Sicherheitsmechanismus ist.Set-ExecutionPolicy. Wenn Sie einen Windows-Computer verwenden, können Sie mit diesem Cmdlet den Wert einer Ausführungsrichtlinie ändern. Es wird ein-ExecutionPolicy-Parameter benötigt. Es gibt verschiedene mögliche Werte. Es ist eine gute Idee, als WertDefaultzu verwenden. Dieser Wert legt die Richtlinie aufRestrictedauf Windows-Clients und aufRemoteSignedunter Windows Server fest.Restrictedbedeutet, dass Sie keine Skripts ausführen können. Sie können nur Befehle ausführen, was auf einem Client sinnvoll ist.RemoteSignedbedeutet, dass auf dem lokalen Computer geschriebene Skripts ausgeführt werden können. Aus dem Internet heruntergeladene Skripts müssen eine digitale Signatur von einem vertrauenswürdigen Herausgeber aufweisen.Hinweis
Sie können auch andere Werte einsetzen. Weitere Informationen finden Sie unter Ausführungsrichtlinien.
Variablen
Variablen eignen sich nicht nur für Skripts. Sie können sie auch in der Konsole definieren. Sie können Werte in Variablen speichern, damit Sie sie später verwenden können. Um eine Variable zu definieren, stellen Sie ihr das $-Zeichen voran. Hier sehen Sie ein Beispiel:
$PI = 3.14
Arbeiten mit Variablen: Anführungszeichen und Interpolation
Wenn Sie Text mithilfe von Write-Host oder Write-Output ausgeben, können Sie einfache oder doppelte Anführungszeichen verwenden. Ihre Wahl hängt davon ab, ob Sie die Werte interpolieren möchten. Es gibt drei Mechanismen, die Sie kennen sollten:
Einfache Anführungszeichen. Einfache Anführungszeichen geben Literale an. Sie erhalten genau, was Sie schreiben. Hier sehen Sie ein Beispiel:
Write-Host 'Here is $PI' # Prints Here is $PIWenn Sie interpolieren möchten – um den Wert von
$PIinterpretiert und ausgegeben zu erhalten –, müssen Sie doppelte Anführungszeichen verwenden.Doppelte Anführungszeichen. Wenn Sie doppelte Anführungszeichen verwenden, werden Variablen in Zeichenfolgen interpoliert:
Write-Host "Here is `$PI and its value is $PI" # Prints Here is $PI and its value is 3.14Dabei geschehen zwei Dinge. Mit dem Graviszeichen (`) als Escapezeichen können Sie eine Interpolation der ersten Instanz von
$PIerzielen. In der zweiten Instanz wird der Wert interpoliert und geschrieben.$(). Sie können einen Ausdruck auch in doppelten Anführungszeichen schreiben. Verwenden Sie dazu das Konstrukt$(). Eine Möglichkeit, dieses Konstrukt zu verwenden, besteht in der Interpolation der Eigenschaften von Objekten. Hier sehen Sie ein Beispiel:Write-Host "An expression $($PI + 1)" # Prints An expression 4.14
Umfang
Der Bereich bezieht sich darauf, wie PowerShell definiert, wo Konstrukte wie Variablen, Aliase und Funktionen gelesen und geändert werden können. Bei der Skripterstellung müssen Sie wissen, worauf Sie Zugriff haben, was Sie ändern können und wo Sie die Änderungen vornehmen können. Wenn Sie die Funktionsweise des Bereichs nicht verstehen, funktioniert Ihr Code möglicherweise nicht wie erwartet.
Bereichstypen
Sprechen wir über die verschiedenen Bereiche:
Globaler Bereich. Wenn Sie Konstrukte wie Variablen in diesem Bereich erstellen, sind sie nach dem Ende der Sitzung weiterhin vorhanden. Alles, was vorhanden ist, wenn Sie eine neue PowerShell-Sitzung starten, gehört zu diesem Gültigkeitsbereich.
Skriptbereich. Wenn Sie eine Skriptdatei ausführen, wird ein Skriptbereich erstellt. Eine Variable oder Funktion, die in der Datei definiert ist, befindet sich beispielsweise im Skriptbereich. Sie ist nach der Ausführung der Datei nicht mehr vorhanden. Sie können z. B. eine Variable in der Skriptdatei erstellen und den globalen Bereich als Ziel angeben. Sie müssen diesen Bereich jedoch explizit definieren, indem Sie der Variablen das Schlüsselwort
globalvoranstellen.Lokaler Bereich. Der lokale Bereich ist der aktuelle Bereich und kann der globale Bereich oder ein beliebiger anderer Bereich sein.
Bereichsregeln
Bereichsregeln helfen Ihnen zu verstehen, welche Werte an einem bestimmten Punkt sichtbar sind. Sie ermöglichen es Ihnen auch, nachzuvollziehen, wie Sie einen Wert ändern können.
Bereiche können geschachtelt sein. Ein Bereich kann einen übergeordneten Bereich aufweisen. Ein übergeordneter Bereich ist ein Bereich außerhalb des Bereichs, in dem Sie sich befinden. Beispielsweise kann ein lokaler Bereich den globalen Bereich als übergeordneten Bereich aufweisen. Umgekehrt kann ein Bereich über einen geschachtelten Bereich verfügen, der auch als untergeordneter Bereich bezeichnet wird.
Elemente sind in aktuellen und untergeordneten Bereichen sichtbar. Ein Element, wie etwa eine Variable oder eine Funktion, ist in dem Bereich sichtbar, in dem es erstellt wird. Standardmäßig ist es auch in allen untergeordneten Bereichen sichtbar. Sie können dieses Verhalten ändern, indem Sie das Element im betreffenden Bereich als privat festlegen. Hier sehen Sie ein Beispiel, in dem eine in der Konsole definierte Variable verwendet wird:
$test = 'hi'Wenn Sie über eine Script.ps1 Datei verfügen, die den folgenden Inhalt enthält, wird beim Ausführen des Skripts "hi" ausgegeben:
Write-Host $test # Prints hiSie können sehen, dass die Variable
$testsowohl im lokalen als auch im untergeordneten Bereich sichtbar ist, in diesem Fall im Skriptbereich.Elemente können nur im erstellten Bereich geändert werden. Standardmäßig können Sie ein Element nur in dem Bereich ändern, in dem es erstellt wurde. Sie können dieses Verhalten ändern, indem Sie explizit einen anderen Bereich angeben.
Profile
Ein Profil ist ein Skript, das ausgeführt wird, wenn PowerShell gestartet wird. Sie können ein Profil verwenden, um Ihre Umgebung anzupassen. Sie können z. B. Hintergrundfarben und -fehler ändern und andere Arten von Anpassungen vornehmen. PowerShell wendet diese Änderungen auf jede neue Sitzung an, die Sie starten.
Profiltypen
PowerShell unterstützt mehrere Profildateien. Sie können sie auf verschiedenen Ebenen anwenden, wie hier zu sehen:
| BESCHREIBUNG | Pfad |
|---|---|
| Alle Benutzer, alle Hosts | $PSHOME\Profile.ps1 |
| Alle Benutzer, aktueller Host | $PSHOME\Microsoft.PowerShell_profile.ps1 |
| Aktueller Benutzer, alle Hosts | $Home[Eigene Dateien]\PowerShell\Profile.ps1 |
| Aktueller Benutzer, aktueller Host | $Home[Meine ]Dokumente\PowerShell\Microsoft.PowerShell_profile.ps1 |
Hier gibt es zwei Variablen: $PSHOME und $Home.
$PSHOME verweist auf das Installationsverzeichnis für PowerShell.
$Home ist das Startverzeichnis des aktuellen Benutzers.
Andere Programme unterstützen auch Profile, z. B. Visual Studio Code.
Erstellen eines Profils
Wenn Sie PowerShell zum ersten Mal installieren, gibt es keine Profile, aber es gibt eine $Profile Variable. Es ist ein Objekt, das auf den Pfad zeigt, in dem jedes anzuwendendes Profil platziert werden soll. So erstellen Sie ein Profil:
Entscheiden Sie, auf welcher Ebene Sie das Profil erstellen möchten. Sie können
$Profile | Select-Object *ausführen, um die Profiltypen und die zugeordneten Pfade anzuzeigen.Wählen Sie einen Profiltyp aus, und erstellen Sie eine Textdatei an ihrem Speicherort, indem Sie einen Befehl wie den folgenden verwenden:
New-Item -Path $Profile.CurrentUserCurrentHost.Fügen Sie Ihre Anpassungen zur Textdatei hinzu, und speichern Sie sie. Wenn Sie eine Sitzung das nächste Mal starten, werden Ihre Änderungen übernommen.