THEMA
    about_Functions

KURZBESCHREIBUNG
    Beschreibt das Erstellen und Verwenden von Funktionen in Windows 
    PowerShell. 


DETAILBESCHREIBUNG
    Eine Funktion besteht aus einer Liste von Anweisungen, der Sie 
    einen Namen zugewiesen haben. Wenn Sie eine Funktion ausführen 
    möchten, geben Sie den Funktionsnamen ein. Die Anweisungen in der 
    Liste werden wie bei Eingabe an der Eingabeaufforderung ausgeführt. 

    Ähnlich wie Cmdlets können Funktionen über Parameter verfügen. Bei den 
    Parametern kann es sich um benannte, Positions-, Options- oder 
    dynamische Parameter handeln. Funktionsparameter können in der 
    Befehlszeile oder in der Pipeline gelesen werden. 

    Funktionen können Werte zurückgeben, die angezeigt, Variablen 
    zugewiesen oder an andere Funktionen oder Cmdlets übergeben 
    werden können. 

    Die Anweisungsliste der Funktion kann andere Typen von 
    Anweisungslisten mit den Schlüsselwörtern Begin, Process und End 
    enthalten. Diese Anweisungslisten behandeln die Eingabe aus der 
    Pipeline anders.

    Ein Filter bildet eine besondere Art von Funktion, für die das Filter-
    Schlüsselwort verwendet wird. 

    Funktionen können auch wie Cmdlets verwendet werden. Sie können 
    Funktionen, die wie ein Cmdlet verwendet werden, ohne 
    C#-Programmierung erstellen. Weitere Informationen finden Sie unter 
    "about_Functions_Advanced".


  Syntax
      Für Funktionen wird die folgende Syntax verwendet:

          function [<Bereich:>]<name> [([type]$parameter1[,[type]$parameter2])] 
          {
              param([type]$parameter1 [,[type]$parameter2])

              dynamicparam {<Anweisungsliste>}
  
              begin {<Anweisungsliste>}
              process {<Anweisungsliste>}
              end {<Anweisungsliste>}
          }


      Eine Funktion besteht aus den folgenden Elementen:

          - Ein Function-Schlüsselwort
          - Einen Bereich (optional)
          - Einen von Ihnen ausgewählten Namen
          - Eine beliebige Anzahl benannter Parameter (optional)
          - Einen oder mehrere in geschweifte Klammern ({})
            eingeschlossene Windows PowerShell-Befehle 


      Weitere Informationen zum Dynamicparam-Schlüsselwort und zu 
      dynamischen Parametern in Funktionen finden Sie unter 
      "about_Functions_Advanced_Parameters".


  Einfache Funktionen
      Funktionen müssen nicht kompliziert sein, um nützlich zu sein. 
      Mit der folgenden Funktion werden die Umgebungsvariablen 
      abgerufen, die nicht zum Systemkonto des aktuellen Systems gehören: 

          function other_env 
          { 
             get-wmiObject win32_environment | 
                where {$_.username -ne "<System>"}
          }

      Zum Ausführen der Funktion geben Sie "other_env" ein. 

      Sie können eine Toolbox mit nützlichen kleinen Funktionen 
      erstellen. Fügen Sie diese Funktionen dem Windows 
      PowerShell-Profil hinzu, wie unter "about_Profiles" und weiter 
      unten in diesem Thema beschrieben.


  Funktionen mit Parametern
      Sie können Parameter mit Funktionen verwenden, u. a. benannte 
      Parameter, Positionsparameter, Schalterparameter und dynamische 
      Parameter. Weitere Informationen zu dynamischen Parametern in 
      Funktionen finden Sie unter "about_Functions_Advanced_Parameters".


  Benannte Parameter
      Sie können eine beliebige Anzahl benannter Parameter 
      definieren. Sie können einen Standardwert für benannte 
      Parameter einfügen, wie weiter unten in diesem Thema beschrieben.

      Sie können Parameter in den geschweiften Klammern mit dem 
      Param-Schlüsselwort definieren, wie in der folgenden 
      Beispielsyntax angezeigt:
    
          function <name> { 
               param ([type]$parameter1[,[type]$parameter2])
               <statement list> 
          }


      Sie können auch Parameter außerhalb der geschweiften Klammern 
      und ohne das Param-Schlüsselwort definieren, wie in der 
      folgenden Beispielsyntax gezeigt wird:

          function <Name> [([type]$parameter1[,[type]$parameter2])] { 
              <Anweisungsliste> 
          }


      Zwischen beiden Methoden besteht kein Unterschied. Verwenden 
      Sie die Methode, die Sie vorziehen.

      Wenn Sie die Funktion ausführen, wird einer Variable mit dem 
      Parameternamen der für einen Parameter angegebene Wert 
      zugewiesen. Der Wert dieser Variable kann in der Funktion 
      verwendet werden. 

      Das folgende Beispiel stellt die Funktion "Small_files" dar. 
      Diese Funktion verfügt über einen $size-Parameter. Mit der 
      Funktion werden alle Dateien angezeigt, die kleiner als der 
      Wert des $size-Parameters sind, zudem werden Verzeichnisse 
      ausgeschlossen:

          function small_files {
              param ($size)
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
          }


      In der Funktion können Sie die $size-Variable verwenden, die 
      den für den Parameter definierten Namen darstellt.

      Zum Verwenden dieser Funktion geben Sie den folgenden Befehl ein:
 
          C:\PS> function small_files -size 50


      Sie können einen Wert für einen benannten Parameter auch ohne den 
      Parameternamen eingeben. Der folgende Befehl ergibt z. B. das gleiche 
      Ergebnis wie ein Befehl, in dem der Size-Parameter genannt wird:

          C:\PS> function small_files 50


      Um einen Standardwert für einen Parameter zu definieren, geben 
      Sie nach dem Parameternamen ein Gleichheitszeichen und den Wert 
      ein, wie in der folgenden Variante des Small_files-Beispiels 
      gezeigt:

          function small_files ($size = 100) {
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
          }


      Wenn Sie "small_files" ohne Wert eingeben, wird $size von der 
      Funktion der Wert 100 zugewiesen. Wenn Sie einen Wert geben, 
      wird dieser von der Funktion verwendet.


  Positionsparameter
      Als Positionsparameter werden Parameter ohne Parameternamen 
      bezeichnet. In Windows PowerShell wird mit dem Parameterwertbefehl 
      jedem Parameterwert in der Funktion ein Parameter zugeordnet. 

      Wenn Sie Positionsparameter verwenden, geben Sie nach dem 
      Funktionsnamen einen oder mehrere Werte ein. Die Positionsparame-
      terwerte werden der Arrayvariablen "$args" zugewiesen. Der Wert 
      nach dem Funktionsnamen wird der ersten Position im $args-Array 
      zugewiesen, d. h. "$args [0]". 

      Mit der folgenden Extension-Funktion wird die Dateinamenerwei-
      terung ".txt" einem von Ihnen angegebenen Dateinamen hinzugefügt:

          function extension {
              $name = $args[0] + ".txt"
              $name
          }

          C:\PS> extension meineTextdatei
          meineTextdatei.txt
   
      Funktionen können mehrere Positionsparameter annehmen. Im 
      folgenden Beispiel werden alle mit dem Funktionsnamen 
      eingegebenen Werte angezeigt.

          function repeat { foreach ($arg in $args) { "Die Eingabe ist $arg" } }

          C:\PS>repeat eins 
          Die Eingabe ist eins

          C:\PS> repeat eins zwei drei
          Die Eingabe ist eins
          Die Eingabe ist zwei 
          Die Eingabe ist drei


      Diese Funktion kann mit einer beliebigen Anzahl von Werten 
      verwendet werden. Die Funktion weist jeden Wert einer Position 
      im $args-Array zu.


  Schalterparameter
      Als Schalter wird ein Parameter bezeichnet, der keinen Wert 
      erfordert. Stattdessen geben Sie den Funktionsnamen und danach 
      den Namen des Schalterparameters ein.

      Wenn Sie einen Schalterparameter definieren möchten, geben Sie 
      den Typ [switch] vor dem Parameternamen an, wie im folgenden 
      Beispiel gezeigt:

          function switchBeispiel {
              param ([switch]$on)
              if ($on) { "Schalter ein" }
              else { "Schalter aus" }
          }


      Wenn Sie den On-Schalterparameter nach dem Funktionsnamen 
      eingeben, wird von der Funktion "Schalter ein" angezeigt. Ohne 
      den Schalterparameter wird "Schalter aus" angezeigt.

          C:\PS> SwitchBeispiel -on
          Schalter ein

          C:\PS> SwitchBeispiel
          Schalter aus

      Sie können beim Ausführen der Funktion einem Schalter auch 
      einen booleschen Wert zuweisen, wie im folgenden Beispiel gezeigt:

          C:\PS> SwitchBeispiel -on:$true
          Schalter ein

          C:\PS> SwitchBeispiel -on:$false
          Schalter aus


  Übergeben von Objekten über die Pipeline an Funktionen
      Jede Funktion kann Eingaben von der Pipeline akzeptieren. Mit den 
      Schlüsselwörtern Begin, Process und End können Sie bestimmen, wie 
      eine Funktion Eingaben von der Pipeline verarbeitet. Die drei 
      Schlüsselwörter werden in der folgenden Beispielsyntax gezeigt:

          function <Name> { 
              begin {<Anweisungsliste>}
              process {<Anweisungsliste>}
              end {<Anweisungsliste>}
          }

      Die Begin-Anweisungsliste wird nur einmal, am Anfang der 
      Funktion, ausgeführt. 

      Die Process-Anweisungsliste wird einmal für jedes Objekt in der 
      Pipeline ausgeführt.
      Während der Process-Block ausgeführt wird, wird der 
      automatischen Variable "$_" jedes Pipelineobjekt einzeln 
      zugewiesen. 

      Wenn die Funktion alle Objekte in der Pipeline empfangen hat, 
      wird die End-Anweisungsliste einmal ausgeführt. Wenn die 
      Schlüsselwörter Begin, Process oder End nicht verwendet werden, 
      werden alle Anweisungen wie eine End-Anweisungsliste behandelt.

      Für die folgende Funktion wird das Process-Schlüsselwort 
      verwendet. Die Funktion zeigt Beispiele aus der Pipeline an:

          function pipelineFunktion 
          { 
              process {"Der Wert ist: $_"} 
          }


      Zur Veranschaulichung dieser Funktion geben Sie ein mit Kommas 
      erstelltes Array von Zahlen ein, wie im folgenden Beispiel gezeigt:

          C:\PS> 1,2,4 | pipelineFunktion
          Der Wert ist: 1
          Der Wert ist: 2
          Der Wert ist: 4


      Wenn Sie eine Funktion in einer Pipeline verwenden, werden die 
      über die Pipeline an die Funktion übergebenen Objekte der 
      automatischen Variablen "$input" zugewiesen. Anweisungen mit 
      dem Begin-Schlüsselwort werden vor sämtlichen Objekten aus der 
      Pipeline ausgeführt. Anweisungen mit dem End-Schlüsselwort 
      werden nach sämtlichen Objekten aus der Pipeline ausgeführt.

      Das folgende Beispiel veranschaulicht die automatische Variable 
      "$input" mit dem Begin-Schlüsselwort und dem End-Schlüsselwort.

          function PipelineBeginEnd 
          {
              begin {"Begin: Die Eingabe ist $input"} end {"End: Die 
              Eingabe ist $input" } 
          }


      Wenn diese Funktion über die Pipeline ausgeführt wird, werden 
      die folgenden Ergebnisse angezeigt:

          C:\PS> 1,2,4 | PipelineBeginEnd
          Begin: Die Eingabe ist 
          End: Die Eingabe ist 1 2 4


      Wenn die Begin-Anweisung ausgeführt wird, liegt der Funktion 
      die Eingabe von der Pipeline nicht vor. Die End-Anweisung wird 
      ausgeführt, wenn der Funktion die Werte vorliegen.

      Wenn die Funktion ein Process-Schlüsselwort aufweist, liest die 
      Funktion die Daten in $input. Das folgende Beispiel enthält 
      eine Process-Anweisungsliste:

          function PipelineEingabe
          {
              process {"Verarbeiten: $_ " }
              end {"End: Die Eingabe ist: $input" } 
          }  

      In diesem Beispiel wird jedes Objekt, das über die Pipeline an 
      die Funktion übergeben wird, an die Process-Anweisungsliste 
      gesendet. Der Process-Anweisung wird für jedes Objekt einzeln 
      ausgeführt. Wenn die Funktion das End-Schlüsselwort erreicht, 
      ist die automatische Variable "$input" leer.

          C:\PS> 1,2,4 | PipelineEingabe
          Verarbeiten: 1 
          Verarbeiten: 2 
          Verarbeiten: 4 
          End: Die Eingabe ist:


  Filter
      Als Filter wird ein bestimmter Typ von Funktion bezeichnet, der 
      für jedes Objekt in der Pipeline ausgeführt wird. Filtern 
      ähneln Funktionen, bei denen sich alle Anweisungen in einem 
      Process-Block befinden.

      Für Filter wird die folgende Syntax verwendet: 

          filter [<Bereich:>]<name> {<Anweisungsliste>}

      Mit dem folgenden Filter werden Protokolleinträge aus der 
      Pipeline als vollständige Einträge oder als Meldungsteil des 
      jeweiligen Eintrags angezeigt:

          filter ErrorLog ([switch]$message)
          {
              if ($message) { out-host -inputobject $_.Message } else 
              { $_ }  
          }


  Funktionsbereich
      Eine Funktion gehört dem Bereich an, in dem sie erstellt wurde. 

      Wenn eine Funktion ein Teil eines Skripts ist, steht sie 
      Anweisungen in diesem Skript zur Verfügung. Standardmäßig sind 
      Funktionen in Skripts an der Eingabeaufforderung nicht verfügbar. 

      Sie können den Bereich einer Funktion festlegen. Im folgenden 
      Beispiel wird die Funktion dem globalen Bereich hinzugefügt: 

 
          function global:get-dependentsvs { get-service | 
             where {$_.dependentservices} }


      Wenn sich eine Funktion im globalen Bereich befindet, können 
      Sie sie in Skripts, in Funktionen und in der Befehlszeile verwenden.

      Von Funktionen wird in der Regel ein Bereich erstellt. Die in 
      einer Funktion erstellten Elemente, z. B. Variablen, sind nur 
      im Bereich der Funktion vorhanden.

      Weitere Informationen zu Bereichen in Windows PowerShell finden 
      Sie unter "about_Scope".

        
  Suchen und Verwalten von Funktionen mit dem Laufwerk "Function:" - 
      Alle Funktionen und Filter in Windows PowerShell werden automatisch 
      auf dem Laufwerk "Function:" gespeichert. Dieses Laufwerk wird vom 
      Windows PowerShell-Funktionsanbieter verfügbar gemacht.

      Bei Verweisen auf das Laufwerk "Function:" geben Sie wie beim 
      Verweisen auf das Laufwerk "C" oder "D" eines Computers nach 
      "Function" einen Doppelpunkt ein.

      Mit dem folgenden Befehl werden alle Funktionen in der 
      aktuellen Sitzung von Windows PowerShell angezeigt:

          C:\PS>  dir function:


      Die Befehle in der Funktion werden als Skriptblock in der 
      Definitionseigenschaft der Funktion gespeichert. Wenn Sie 
      beispielsweise die Befehle in der Hilfefunktion von Windows 
      PowerShell anzeigen möchten, geben Sie Folgendes ein:

          (dir function:help).definition

      Weitere Informationen über das Laufwerk "Function:" finden Sie 
      unter "Function".


  Wiederverwenden von Funktionen in neuen Sitzungen
      Wenn Sie an der Windows PowerShell-Eingabeaufforderung eine 
      Funktion eingeben, wird die Funktion Teil der aktuellen 
      Sitzung. Sie ist bis zum Sitzungsende verfügbar. 

      Wenn Sie die Funktion in allen Windows PowerShell-Sitzungen 
      verwenden möchten, fügen Sie sie dem Windows PowerShell-Profil 
      hinzu. Weitere Informationen zu Profilen finden Sie unter 
      "about_Profiles".

      Sie können die Funktion auch in einer Windows PowerShell-Skript-
      datei speichern. Geben Sie die Funktion in einer Textdatei ein, 
      und speichern Sie die Datei dann mit der Dateinamenerweiterung ".ps1".
      

  Erstellen von Hilfe für Funktionen
    Mit dem Cmdlet "Get-Help" rufen Sie die Hilfe für Funktionen 
    sowie für Cmdlets, Anbieter und Skripts ab. Zum Abrufen von Hilfe 
    für eine Funktion geben Sie Get-Help und dann den Funktionsnamen ein.

    Beispielsweise geben Sie Folgendes ein, um Hilfe für die 
    MyDisks-Funktion zu erhalten:

        get-help MyDisks

    Hilfe für eine Funktion können Sie mit den beiden folgenden 
    Methoden erstellen:

    --  Kommentarbasierte Hilfe für Funktionen

        Erstellen Sie ein Hilfethema, indem Sie in den Kommentaren 
        spezielle Schlüsselwörter verwenden. Wenn Sie für eine 
        Funktion kommentarbasierte Hilfe erstellen, müssen die 
        Kommentare am Anfang oder am Ende des Funktionstexts oder in 
        den Zeilen vor dem Funktionsschlüsselwort platziert werden. 
        Weitere Informationen zur kommentarbasierten Hilfe finden Sie 
        unter "about_Comment_Based_Help".

    --  XML-basierte Hilfe für Funktionen

        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 der Funktion 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 auf MSDN im 
        Thema zum Verfassen von Cmdlet-Hilfe.



SIEHE AUCH 
    about_Automatic_Variables 
    about_Comment_Based_Help
    about_Functions_Advanced 
    about_Functions_CmdletBindingAttributes
    about_Parameters
    about_Profiles
    about_Scopes
    about_Script_Blocks
    Funktion (Anbieter)




Inhaltsverzeichnis