THEMA about_Scripts KURZBESCHREIBUNG Beschreibt, wie Skripts in Windows PowerShell geschrieben und ausgeführt werden. DETAILBESCHREIBUNG Bei einem Skript handelt es sich um eine Nur-Text-Datei, die einen oder mehrere Windows PowerShell-Befehle enthält. Die Dateierweiterung für Windows PowerShell-Skripts lautet ".ps1". Durch das Schreiben eines Skripts wird ein Befehl zur späteren Verwendung gespeichert und kann bequem für andere zugänglich gemacht werden. Vor allem können Sie die Befehle ausführen, indem Sie einfach den Skriptpfad und den Dateinamen eingeben. Die Komplexität von Skripts reicht von einem einzelnen Befehl in einer Datei bis hin zu umfassenden Programmen. Skripts verfügen über zusätzliche Features, z. B. den speziellen Kommentar #Requires, die Verwendung von Parametern, Unterstützung für Datenabschnitte und das digitale Signieren für die Sicherheit. Sie können außerdem Hilfethemen für Skripts und für alle Funktionen im Skript schreiben. SO SCHREIBEN SIE EIN SKRIPT Ein Skript kann alle gültigen Windows PowerShell-Befehle enthalten, u. a. einzelne Befehle, Befehle, die die Pipeline verwenden, Funktionen und Steuerstrukturen, z. B. If-Anweisungen und For-Schleifen. Zum Schreiben eines Skripts starten Sie einen Text-Editor (z. B. Editor) oder einen Skript-Editor (z. B. die integrierte Skriptumgebung von Windows PowerShell (Integrated Scripting Environment, ISE)) Geben Sie die Befehle ein, und speichern Sie sie in einer Datei mit einem gültigen Dateinamen und der Datei- namenerweiterung ".ps1". Bei dem folgenden Beispiel handelt es sich um ein einfaches Skript, das die auf dem aktuellen System ausgeführten Dienste abruft und in einer Protokolldatei speichert. Der Name der Protokolldatei wird auf Grundlage des aktuellen Datums erstellt. $date = (get-date).dayofyear get-service | out-file "$date.log" Öffnen Sie zum Erstellen dieses Skripts einen Text-Editor oder Skript-Editor, geben Sie diese Befehle ein, und speichern Sie sie dann in der Datei "ServiceLog.ps1." SO FÜHREN SIE EIN SKRIPT AUS Bevor Sie ein Skript ausführen können, müssen Sie die Windows PowerShell-Standardausführungsrichtlinie ändern. Durch die Standardausführungsrichtlinie "Eingeschränkt" wird verhindert, dass Skripts ausgeführt werden, einschließlich auf dem lokalen Computer geschriebener Skripts. Weitere Informationen finden Sie unter "about_Execution_Policies". Geben Sie zum Ausführen eines Skripts den vollständigen Namen und den vollständigen Pfad für die Skriptdatei ein. Geben Sie z. B. zum Ausführen des Skripts "ServicesLog" im Verzeichnis "C:\Scripts" Folgendes ein: c:\scripts\ServicesLog.ps1 Um ein Skript im aktuellen Verzeichnis auszuführen, geben Sie den Pfad für das aktuelle Verzeichnis an, oder geben Sie einen Punkt ein, um das aktuelle Verzeichnis darzustellen, gefolgt von einem umgekehrten Schrägstrich für den Pfad (.\). Geben Sie z. B. zum Ausführen des Skripts "ServicesLog.ps1" im lokalen Verzeichnis Folgendes ein: .\ServicesLog.ps1 Als Sicherheitsfeature führt Windows PowerShell keine Skripts aus, wenn Sie auf das Skriptsymbol in Windows-Explorer doppelklicken oder den Skriptnamen ohne vollständigen Pfad eingeben, selbst wenn sich das Skript im aktuellen Verzeichnis befindet. Weitere Informationen zum Ausführen von Befehlen und Skripts in Windows PowerShell finden Sie unter "about_Command_Precedence". REMOTEAUSFÜHREN VON SKRIPTS Wenn Sie ein Skript auf einem Remotecomputer ausführen möchten, verwenden Sie den FilePath-Parameter des Cmdlets "Invoke-Command". Geben Sie als Wert des FilePath-Parameters den Pfad und Dateinamen des Skripts ein. Das Skript muss sich auf dem lokalen Computer oder in einem Verzeichnis befinden, auf das der lokale Computer zugreifen kann. Mit dem folgenden Befehl wird das Skript "ServicesLog.ps1" auf dem Remotecomputer "Server01" ausgeführt. invoke-command -computername Server01 -filepath C:\scripts\servicesLog.ps1 PARAMETER IN SKRIPTS Definieren Sie Parameter in einem Skript mit einer Param-Anweisung. Die Param-Anweisung muss die erste Anweisung in einem Skript sein, mit Ausnahme von Kommentaren und #Requires-Anweisungen. Die Funktion von Skriptparametern entspricht der Funktion von Funktionsparametern. Die Parameterwerte sind für alle Befehle im Skript verfügbar. Alle Features der Funktionsparameter, einschließlich des Parameter-Attributs und seiner benannten Argumente, sind auch in Skripts gültig. Beim Ausführen des Skripts geben Skriptbenutzer die Parameter nach dem Skriptnamen ein. Im folgenden Beispiel wird das Skript "Test-Remote.ps1" veranschaulicht, das über einen ComputerName-Parameter verfügt. Beide Skriptfunktionen können auf den ComputerName-Parameterwert zugreifen. param ($ComputerName = $(throw "Der ComputerName-Parameter ist erforderlich.")) function CanPing { $error.clear() $tmp = test-connection $computername -erroraction SilentlyContinue if (!$?) {write-host "Fehler bei Ping: $ComputerName."; return $false} else {write-host "Ping erfolgreich: $ComputerName"; return $true} } function CanRemote { $s = new-pssession $computername -erroraction SilentlyContinue if ($s -is [System.Management.Automation.Remoting.Runspaces.PSSession]) {write-host "Remotetest erfolgreich: $ComputerName."} else {write-host "Fehler bei Remotetest: $ComputerName."} } if (CanPing $computername) {CanRemote $computername} Geben Sie zum Ausführen dieses Skripts den Parameternamen nach dem Skriptnamen ein. Beispiel: C:\PS> .\test-remote.ps1 -computername Server01 Ping erfolgreich: Server01 Fehler bei Remotetest: Server01 Weitere Informationen zur Param-Anweisung und den Funktionspara- metern finden Sie unter "about_Functions" und "about_Functions_Advanced_Parameters". HILFE FÜR SKRIPTS Mit dem Cmdlet "Get-Help" rufen Sie die Hilfe für Skripts sowie für Cmdlets, Anbieter und Funktionen ab. Geben Sie zum Aufrufen der Hilfe für ein Skript "Get-Help" sowie den Pfad und den Dateinamen des Skripts ein. Wenn sich der Skriptpfad in der Path-Umgebungsvariablen befindet, können Sie den Pfad weglassen. Geben Sie z. B. Folgendes ein, um Hilfe für das Skript "ServicesLog.ps1" abzurufen: get-help C:\admin\scripts\ServicesLog.ps1 Hilfe für ein Skript können Sie mit den beiden folgenden Methoden erstellen: -- Kommentarbasierte Hilfe für Skripts Erstellen Sie ein Hilfethema, indem Sie in den Kommentaren spezielle Schlüsselwörter verwenden. Damit Sie eine kommentarbasierte Hilfe für ein Skript erstellen können, müssen die Kommentare am Anfang oder dem Ende der Skriptdatei eingefügt werden. Weitere Informationen zur kommentarbasierten Hilfe finden Sie unter "about_Comment_Based_Help". -- XML-basierte Hilfe für Skripts Sie können XML-basierte Hilfethemen erstellen, z. B. zu dem Typ, der in der Regel für Cmdlets erstellt wird. XML-basierte Hilfe muss erstellt werden, wenn Sie Hilfethemen in mehrere Sprachen lokalisieren. Um ein XML-basiertes Hilfethema dem Skript zuzuordnen, verwenden Sie das .ExternalHelp-Schlüsselwort für den Hilfekommentar. Weitere Informationen zum ExternalHelp-Schlü- sselwort finden Sie unter "about_Comment_Based_Help". Weitere Informationen zur XML-basierten Hilfe finden Sie in "How to Write Cmdlet Help" in der MSDN (Microsoft Developer Network) Library unter "https://go.microsoft.com/fwlink/?LinkID=123415". SKRIPTBEREICH UND DOT-QUELLENTNAHME Jedes Skript wird in einem eigenen Bereich ausgeführt. Die Funktionen, Variablen, Aliase und Laufwerke, die im Skript erstellt werden, sind nur im Skriptbereich vorhanden. Sie können auf diese Elemente oder ihre Werte nicht in dem Bereich zugreifen, in dem das Skript ausgeführt wird. Wenn Sie ein Skript in einem anderen Bereich ausführen möchten, können Sie einen Bereich angeben, z. B. "Global" oder "Local", oder das Skript als Skript mit DOT-Quellentnahme ausführen. Durch das Feature der DOT-Quellentnahme können Sie ein Skript im aktuellen Bereich statt in Skriptbereich ausführen. Wenn Sie ein Skript mit DOT-Quellentnahme ausführen, werden die Befehle im Skript ausgeführt, als hätten Sie sie an der Eingabeaufforderung eingegeben. Die Funktionen, Variablen, Aliase und Laufwerke, die das Skript erstellt, werden in dem Bereich erstellt, in dem Sie arbeiten. Nachdem das Skript ausgeführt wurde, können Sie in der Sitzung die erstellten Elemente verwenden und auf ihre Werte zugreifen. Geben Sie für die DOT-Quellentnahme eines Skripts einen Punkt (.) und ein Leerzeichen vor dem Skriptpfad ein. Beispiel: . C:\scripts\UtilityFunctions.ps1 -oder- . .\UtilityFunctions.ps1 Nach dem Ausführen des Skripts "UtilityFunctions" werden die Funktionen und Variablen, die das Skript erstellt, dem aktuellen Bereich hinzugefügt. Das Skript "UtilityFunctions.ps1" erstellt z. B. die New-Profile- Funktion und die $ProfileName-Variable. #In UtilityFunctions.ps1 function New-Profile { Write-Host "New-Profile-Funktion wird ausgeführt" $profileName = split-path $profile -leaf if (test-path $profile) {write-error "Das Profil $profileName ist auf diesem Computer bereits vorhanden."} else {new-item -type file -path $profile -force } } Wenn Sie das Skript "UtilityFunctions.ps1" in einem eigenen Skriptbereich ausführen, sind die New-Profile-Funktion und die $ProfileName-Variable nur vorhanden, während das Skript ausgeführt wird. Wenn das Skript beendet wird, werden die Funktion und die Variable entfernt, wie im folgenden Beispiel dargestellt. C:\PS> .\UtilityFunctions.ps1 C:\PS> New-Profile Der Begriff "new-profile" wird nicht als Cmdlet, Funktion, ausführbares Programm oder Skriptdatei erkannt. Überprüfen Sie den Begriff, und versuchen Sie es erneut. Bei Zeile:1 Zeichen:12 + new-profile <<<< + CategoryInfo : ObjectNotFound: (new-profile:String) [], + FullyQualifiedErrorId : CommandNotFoundException C:\PS> $profileName C:\PS> Wenn Sie das Skript als Skript mit DOT-Quellentnahme ausführen, erstellt das Skript die New-Profile-Funktion und die $ProfileName-Variable in der Sitzung in Ihrem Bereich. Nach dem Ausführen des Skripts können Sie die New-Profile-Funktion in der Sitzung verwenden, wie im folgenden Beispiel dargestellt. C:\PS> . .\UtilityFunctions.ps1 C:\PS> New-Profile Directory: C:\Users\juneb\Documents\WindowsPowerShell Modus LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/14/2009 3:08 PM 0 Microsoft.PowerShellISE_profile.ps1 C:\PS> $profileName Microsoft.PowerShellISE_profile.ps1 Weitere Informationen zu Bereichen finden Sie unter "about_Scopes". SKRIPTS IN MODULEN Bei einem Modul handelt es sich um einen Satz von verwandten Windows PowerShell-Ressourcen, die als Einheit verteilt werden können. Sie können mit Modulen Skripts, Funktionen und andere Ressourcen organisieren. Außerdem können Sie mit Modulen Ihren Code an andere verteilen und Code aus vertrauenswürdigen Quellen abrufen. Sie können Skripts in Modulen einschließen oder ein Skriptmodul erstellen. Hierbei handelt es sich um ein Modul, das ganz oder hauptsächlich aus einem Skript und unterstützenden Ressourcen besteht. Ein Skriptmodul ist nur ein Skript mit der Dateinamenerweiterung ".psm1". Weitere Informationen zu Modulen finden Sie unter "about_Modules". ANDERE SKRIPTFEATURES Windows PowerShell verfügt über eine Vielzahl von nützlichen Features, die Sie in Skripts verwenden können. #Requires Sie können mit einer #Requires-Anweisung verhindern, dass ein Skript ohne angegebene Module oder Snap-Ins und eine angegebene Version von Windows PowerShell ausgeführt wird. Weitere Informationen finden Sie unter "about_Requires". $MyInvocation Die automatische $MyInvocation-Variable enthält Informationen zum aktuellen Befehl, einschließlich des aktuellen Skripts. Sie können mit dieser Variablen und ihren Eigenschaften Informationen zu dem Skript abrufen, während es ausgeführt wird. Die Variable "$MyInvocation.MyCommand.Path" enthält z. B. den Pfad und Dateinamen des Skripts. Datenabschnitte Sie können Daten in Skripts mithilfe des Data-Schlüsselworts von Logik trennen. Datenabschnitte können außerdem die Lokalisierung erleichtern. Weitere Informationen finden Sie unter "about_Data_Sections" und "about_Script_Localization". Skriptsignatur Sie können einem Skript eine digitale Signatur hinzufügen. Abhängig von der Ausführungsrichtlinie können Sie mit digitalen Signaturen das Ausführen von Skripts einschränken, die unsichere Befehle enthalten könnten. Weitere Informationen finden Sie unter "about_Execution_Policies" und "about_Signing". SIEHE AUCH about_Command_Precedence about_Comment_Based_Help about_Execution_Policies about_Functions about_Modules about_Profiles about_Requires about_Scopes about_Script_Blocks about_Signing Invoke-Command