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




Inhaltsverzeichnis