Share via


about_Scripts

Letzte Aktualisierung: August 2012

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0

THEMA

about_Scripts

KURZE BESCHREIBUNG

Beschreibt das Ausführen und Schreiben von Skripts in Windows PowerShell®.

LANGE BESCHREIBUNG

Ein Skript ist eine Textdatei, die einen oder mehrere Windows PowerShell-Befehle enthält. Windows PowerShell-Skripts haben die Dateinamenerweiterungen .ps1.

Das Ausführen eines Skripts ähnelt stark der Ausführung eines Cmdlets. Geben Sie den Pfad und Dateinamen des Skripts ein, und verwenden Sie Parameter zum Senden von Daten und zum Festlegen von Optionen. Sie können Skripts auf Ihrem Computer oder in einer Remote-Sitzung auf einem anderen Computer ausführen.

Mit dem Schreiben eines Skripts wird ein Befehl für die spätere Verwendung gespeichert und kann einfach für andere Personen freigegeben werden. Am Wichtigsten ist: Sie können die Befehle ausführen, indem Sie einfach den Pfad und den Dateinamen eingeben. Skripts können so einfach wie ein einzelner Befehl in einer Datei aber auch so umfangreich wie ein komplexes Programm sein.

Skripts verfügen über zusätzliche Funktionen, wie z. B. den #Requires-Spezialkommentar, die Verwendung von Parametern, die Unterstützung für Datenabschnitte und digitale Signaturen für die Sicherheit. Sie können auch Hilfethemen für Skripts und alle Funktionen im Skript schreiben.

AUSFÜHREN VON SKRIPTS

Bevor Sie ein Skript ausführen können, müssen Sie die standardmäßige Windows PowerShell-Ausführungsrichtlinie ändern. Die Standard-Ausführungsrichtlinie „Restricted“ verhindert, dass auf dem lokalen Computer alle Skripts ausgeführt werden, einschließlich der von Ihnen geschriebenen Skripts. Weitere Informationen finden Sie unter „about_Execution_Policies“.

Die Ausführungsrichtlinie ist in der Registrierung gespeichert, sodass Sie sie nur einmal auf jedem Computer ändern müssen.

Um die Ausführungsrichtlinie zu ändern, verwenden Sie das folgende Verfahren:

  • 1. Starten Sie Windows PowerShell mit der Option „Als Administrator ausführen“.

  • 2. Geben Sie in der Befehlszeile ein:

                Set-ExecutionPolicy AllSigned
    

    - oder -

                Set-ExecutionPolicy RemoteSigned
    

Die Änderung wird sofort wirksam.

Um ein Skript auszuführen, geben Sie den vollständigen Namen und den vollständigen Pfad zur Skriptdatei ein.Abschnittstext hier einfügen.

Geben Sie z. B. zum Ausführen der Skripts „Get-ServiceLog.ps1“ im Verzeichnis „C:\Scripts“ ein:

        C:\Scripts\Get-ServiceLog.ps1

Zum Ausführen eines Skripts im aktuellen geben Sie den Pfad zum aktuellen Verzeichnis ein, oder verwenden Sie einen Punkt, um das aktuelle Verzeichnis zu repräsentieren, gefolgt von einem umgekehrten Schrägstrich (.\).

Um z. B. das Skript „ServicesLog.ps1“ im lokalen Verzeichnis auszuführen, geben Sie ein:

        .\Get-ServiceLog.ps1

Wenn das Skript über Parameter verfügt, geben Sie die Parameter und Parameterwerte nach den Namen der Skriptdatei ein.

Beispielsweise verwendet der folgende Befehl den ServiceName-Parameter des Get-ServiceLog-Skripts, um ein Protokoll der WinRM-Dienstaktivität anzufordern.

        .\Get-ServiceLog.ps1 -ServiceName WinRM

Als Sicherheitsfunktion führt Windows PowerShell keine Skripts aus, wenn Sie auf das Skriptsymbol im Datei-Explorer doppelklicken oder den Skriptnamen ohne vollständigen Pfad eingeben, auch 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“.

AUSFÜHREN MIT POWERSHELL

Ab Windows PowerShell 3.0 können Sie Skripts aus dem Datei-Explorer (oder Windows-Explorer in früheren Versionen von Windows) heraus ausführen.

So verwenden Sie das Feature „Ausführen mit PowerShell“:

Klicken Sie im Datei-Explorer (oder Windows-Explorer) mit der rechten Maustaste auf den Namen der Skriptdatei, und wählen Sie dann „Ausführen mit PowerShell“.

Die Funktion „Ausführen mit PowerShell“ dient zum Ausführen von Skripts, die keine erforderlichen Parameter haben und keine Ausgabe zur Befehlszeile zurückgeben.

Weitere Informationen finden Sie unter „about_Run_With_PowerShell“.

AUSFÜHREN VON SKRIPTS AUF ANDEREN COMPUTERN

Zum Ausführen eines Skripts auf einem oder mehreren Remote-Computern verwenden Sie den Parameter „FilePath“ des Cmdlets „Invoke-Command“.

Geben Sie den Pfad und Dateinamen des Skripts als Wert des FilePath-Parameters ein. Das Skript muss sich auf dem lokalen Computer oder in einem Verzeichnis befinden, auf das der lokale Computer zugreifen kann.

Der folgende Befehl führt das Get-ServiceLog.ps1-Skript auf den Remote-Computern Server01 und Server02 aus.

        Invoke-Command -ComputerName Server01, Server02 -FilePath C:\Scripts\Get-ServiceLog.ps1

AUFRUFEN VON HILFE FÜR SKRIPTS

Das Get-Help-Cmdlet ruft sowohl die Hilfethemen für Skripts als auch für Cmdlets und anderen Befehlstypen auf. Um das Hilfethema für ein Skript aufzurufen, geben Sie „Get-Help“ ein, gefolgt vom Pfad und Dateinamen des Skripts. Wenn der Skriptpfad in Ihrer Path-Umgebungsvariablen angegeben ist, können Sie den Pfad weglassen.

Um z. B. Hilfe für das ServicesLog.ps1-Skript aufzurufen, geben Sie ein:

        get-help C:\admin\scripts\ServicesLog.ps1

SCHREIBEN VON SKRIPTS

Ein Skript kann alle gültigen Windows PowerShell-Befehle enthalten, einschließlich einzelner Befehle, Befehle, die die Pipeline verwenden, Funktionen und Steuerungsstrukturen, z. B. If-Anweisungen und For-Schleifen.

Um ein Skript zu schreiben, starten Sie einen Texteditor (z. B. Notepad) oder einem Skript-Editor (z. B. die Windows PowerShell Integrated Scripting Environment [ISE]). Geben Sie die Befehle ein, und speichern Sie sie in eine Datei mit einem gültigen Dateinamen und der Dateinamenerweiterung .ps1.

Das folgende Beispiel ist ein einfaches Skript, das die Dienste abruft, die auf dem aktuellen System ausgeführt werden, und diese in einer Protokolldatei speichert. Der Name der Protokolldatei wird aus dem aktuellen Datum erstellt.

        $date = (get-date).dayofyear
        get-service | out-file "$date.log"

Um dieses Skript zu erstellen, öffnen Sie einen Texteditor oder einem Skript-Editor, geben Sie diese Befehle ein, und speichern Sie sie in einer Datei namens „ServiceLog.ps1“.

PARAMETER IN SKRIPTS

Verwenden Sie zum Definieren von Parametern in einem Skript eine Param-Anweisung. Die Param-Anweisung muss die erste Anweisung in einem Skript sein, mit Ausnahme von Kommentaren und allen #Requires-Anweisungen.

Skriptparameter funktionieren wie Funktionsparameter. Die Parameterwerte stehen für alle Befehle in dem Skript zur Verfügung. Alle Funktionen der Funktionsparameter, einschließlich des Parameter-Attributs und dessen benannter Argumente, sind auch in Skripts gültig.

Beim Ausführen des Skripts geben die Skriptbenutzer die Parameter nach dem Skriptnamen ein.

Das folgende Beispiel zeigt ein Test-Remote.ps1-Skript, das über einen ComputerName-Parameter verfügt. Beide Skriptfunktionen können auf den ComputerName-Parameterwert zugreifen.

        param ($ComputerName = $(throw "ComputerName parameter is required."))

        function CanPing {
           $error.clear()
           $tmp = test-connection $computername -erroraction SilentlyContinue

           if (!$?) 
               {write-host "Ping failed: $ComputerName."; return $false}
           else
               {write-host "Ping succeeded: $ComputerName"; return $true}
        }

        function CanRemote {
            $s = new-pssession $computername -erroraction SilentlyContinue

            if ($s -is [System.Management.Automation.Runspaces.PSSession])
                {write-host "Remote test succeeded: $ComputerName."}
            else
                {write-host "Remote test failed: $ComputerName."}
        }

        if (CanPing $computername) {CanRemote $computername}

Um dieses Skript ausführen, geben Sie den Namen des Parameters nach dem Skriptnamen ein. Beispiel:

        C:\PS> .\test-remote.ps1 -computername Server01

        Ping succeeded: Server01
        Remote test failed: Server01

Weitere Informationen über die Param-Anweisung und die Funktionsparameter finden Sie unter „about_Functions“ und „about_Functions_Advanced_Parameters“.

SCHREIBEN VON HILFE FÜR SKRIPTS

Mit einer der beiden folgenden Methoden können Sie ein Hilfethema für ein Skript schreiben:

  • – Befehlsbasierte Hilfe für Skripts

    Erstellen Sie ein Hilfethema durch Verwendung spezieller Schlüsselwörter in den Kommentaren. Um befehlsbasierte Hilfe für ein Skript zu erstellen, müssen die Kommentare am Anfang oder Ende der Skriptdatei eingefügt werden. Weitere Informationen zu befehlsbasierte Hilfe finden Sie unter „about_Comment_Based_Help“.

  • – XML-basierte Hilfe für Skripts

    Erstellen Sie ein XML-basiertes Hilfethema, wie z. B. den Typ, der in der Regel für Cmdlets erstellt wird. XML-basierte Hilfe ist erforderlich, wenn Sie Hilfethemen in mehrere Sprachen übersetzen.

    Um das Skript dem XML-basierten Hilfethema zuzuordnen, verwenden Sie das .ExternalHelp-Schlüsselwort für Hilfe-Kommentare. Weitere Informationen zum ExternalHelp-Schlüsselwort finden Sie unter „about_Comment_Based_Help“. Weitere Informationen über die XML-basierte Hilfe finden Sie unter „Schreiben von Cmdlet-Hilfe“ in der MSDN-Website (Microsoft Developer Network)-Bibliothek unter https://go.microsoft.com/fwlink/?LinkID=123415.

SKRIPTBEREICH UND DOT-SOURCING

Jedes Skript wird in ihrem eigenen Bereich ausgeführt. Die Funktionen, Variablen, Aliase und Laufwerke, die in dem Skript erstellt werden, sind nur in dem Skriptbereich vorhanden. Sie können auf keines dieser Elemente oder deren Werte in dem Bereich zugreifen, in dem das Skript ausgeführt wird.

Um ein Skript in einem anderen Bereich auszuführen, können Sie einen Bereich angeben, z. B. Global oder Local, oder Sie können das Skript mit Dot-Sourcing verwenden.Abschnittstext hier einfügen.

Mit der Dot-Sourcing-Funktion können Sie ein Skript im aktuellen Bereich anstatt im Skriptbereich ausführen. Wenn Sie ein Skript mit Dot-Sourcing ausführen, werden die Befehle in dem Skript so ausgeführt, als ob Sie sie an der Befehlszeile eingegeben hätten. Die Funktionen, Variablen, Aliase und Laufwerke, die das Skript erstellt, werden in dem Bereich erstellt, in dem Sie arbeiten. Nach der Ausführung des Skripts können Sie die erstellten Elemente verwenden und auf ihre Werte in Ihrer Sitzung zugreifen.

Um ein Skript mit Dot-Sourcing zu verwenden, geben Sie einen Punkt (.) und ein Leerzeichen vor dem Skriptpfad ein.

Beispiel:

        . C:\scripts\UtilityFunctions.ps1

- oder -

        . .\UtilityFunctions.ps1

Nachdem das UtilityFunctions-Skripts ausgeführt wird, werden die Funktionen und Variablen, die das Skript erstellt, zum aktuellen Bereich hinzugefügt.

Das UtilityFunctions.ps1-Skript erstellt z. B. die New-Profile-Funktion und die $ProfileName-Variable.

        #In UtilityFunctions.ps1

        function New-Profile
        {
            Write-Host "Running New-Profile function"
            $profileName = split-path $profile -leaf

            if (test-path $profile)
               {write-error "There is already a $profileName profile on this computer."}
            else
       {new-item -type file -path $profile -force }
        }

Wenn Sie das UtilityFunctions.ps1-Skript in seinen eigenen Skriptbereich ausführen, sind die New-Profile-Funktion und die $ProfileName-Variable nur während der Ausführung des Skripts verfügbar. Wenn das Skript beendet wird, werden die Funktion und die Variable entfernt, wie im folgenden Beispiel gezeigt.

        C:\PS> .\UtilityFunctions.ps1

        C:\PS> New-Profile
        The term 'new-profile' is not recognized as a cmdlet, function, operable
        program, or script file. Verify the term and try again.
        At line:1 char:12
        + new-profile <<<< 
           + CategoryInfo          : ObjectNotFound: (new-profile:String) [], 
           + FullyQualifiedErrorId : CommandNotFoundException

        C:\PS> $profileName
        C:\PS>

Wenn Sie das Skript mit Dot-Sourcing verwenden und ausführen, erstellt das Skript die New-Profile-Funktion und die $ProfileName-Variable in Ihrer Sitzung in Ihrem Bereich. Nachdem das Skript ausgeführt wird, können Sie die New-Profile-Funktion in Ihrer Sitzung verwenden, wie im folgenden Beispiel gezeigt.

        C:\PS> . .\UtilityFunctions.ps1

        C:\PS> New-Profile


            Directory: C:\Users\juneb\Documents\WindowsPowerShell


            Mode    LastWriteTime     Length Name                                                                   
            ----    -------------     ------ ----                                                                   
            -a---   1/14/2009 3:08 PM      0 Microsoft.PowerShellISE_profile.ps1                                    


        C:\PS> $profileName
        Microsoft.PowerShellISE_profile.ps1

Weitere Informationen zum Umfang finden Sie unter „about_Scopes“.

SKRIPTS IN MODULEN

Ein Modul ist eine Gruppe von verwandten Windows PowerShell-Ressourcen, die als Einheit verteilt werden können. Sie können Module verwenden, um Skripts, Funktionen und andere Ressourcen zu organisieren. Sie können Module auch verwenden, um Ihren Code an andere Benutzer zu verteilen und um Code aus vertrauenswürdigen Quellen abzurufen.

Sie können Skripts in Ihre Modulen einschließen, oder Sie können ein Skriptmodul erstellen, bei dem es sich um ein Modul handelt, das in Gänze oder in erster Linie aus einem Skript und unterstützenden Ressourcen besteht. Ein Skriptmodul ist einfach nur ein Skript mit der Dateinamenerweiterung .psm1.

Weitere Informationen zu Modulen finden Sie unter „about_Modules“.

ANDERE SKRIPT-FEATURES

Windows PowerShell verfügt über viele nützliche Features, die Sie in Skripts verwenden können.

  • #Requires
    Sie können eine #Requires-Anweisung verwenden, um zu verhindern, dass ein Skript ausgeführt wird, ohne dass Module oder Snap-Ins angegeben sind und eine Version von Windows PowerShell angegeben ist. Weitere Informationen finden Sie unter „about_Requires“.
  • $PSCommandPath
    Enthält den vollständigen Pfad und den Namen des Skripts, das ausgeführt wird. Dieser Parameter ist in allen Skripts gültig. Diese automatische Variable wurde in Windows PowerShell 3.0 eingeführt.
  • $PSScriptRoot
    Enthält das Verzeichnis, aus dem ein Skript ausgeführt wird. In Windows PowerShell 2.0 gilt diese Variable nur in Skriptmodulen (.psm1). Ab Windows PowerShell 3.0 gilt sie in allen Skripts.
  • $MyInvocation
    Die automatische $MyInvocation-Variable enthält Informationen über das aktuelle Skript, einschließlich Informationen dazu, wie es gestartet oder aufgerufen (Englisch: „invoked“) wurde. Sie können mit dieser Variablen und deren Eigenschaften Informationen über das Skript aufrufen, während es ausgeführt wird. Die $MyInvocation.MyCommand.Path-Variable enthält beispielsweise den Pfad und den Dateinamen des Skripts. $MyInvocation.Line enthält den Befehl, der das Skript gestartet hat, einschließlich aller Parameter und Werte.

    Ab Windows PowerShell 3.0 verfügt $MyInvocation über zwei neue Eigenschaften, die Informationen über das Skript bereitstellen, welches das aktuelle Skript aufgerufen hat. Die Werte dieser Eigenschaften werden nur aufgefüllt, wenn die aufrufende Instanz oder der Aufrufer ein Skript ist.

    • – PSCommandPath enthält den vollständigen Pfad und den Namen des Skripts, welches das aktuelle Skript aufgerufen hat.

    • – PSScriptRoot enthält das Verzeichnis des Skripts, welches das aktuelle Skript aufgerufen hat.

    Im Gegensatz zu den automatischen Variablen „$PSCommandPath“ und „$PSScriptRoot“, die Informationen über das aktuelle Skript enthalten, enthalten die Eigenschaften „PSCommandPath“ und „PSScriptRoot“ der Variablen „$MyInvocation“ Informationen über das Skript, welches das aktuelle Skript aufgerufen hat.

  • Datenabschnitte
    Sie können das Datenschlüsselwort zum Abtrennen von Daten von der Logik in Skripts verwenden. Datenabschnitte können auch die Lokalisierung vereinfachen. Weitere Informationen finden Sie unter „about_Data_Sections“ und „about_Script_Localization“.
  • Signieren von Skripts
    Sie können eine digitale Signatur zu einem Skript hinzufügen. Je nach Ausführungsrichtlinie können Sie digitale Signaturen verwenden, um das Ausführen von Skripts zu beschrä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_Run_With_PowerShell

about_Scopes

about_Script_Blocks

about_Signing

Invoke-Command