Zum Hauptinhalt springen

Funktionen

Eine Spezialform einer Variablen, die Skriptblöcke direkt starten kann, ist eine Funktion. Syntaktisch unterscheidet eine Funktion sich in drei Dingen von einer Variablen: Ihr Name wird nicht mit $ eingeführt, sondern ist reiner Text, für die Deklaration wird das Schlüsselwort Function verwendet und Sie benötigen kein Gleichheitszeichen, um den Scriptblock zuzuweisen. Man könnte auch sagen, dass Sie dem Skriptblock einen Namen geben, über den Sie ihn direkt starten können.

Function Start-Scriptblock
{
   Get-Command
}

Führen Sie diesen Code aus, wird Get-Command immer noch nicht gestartet. Aber nun wird der Skriptblock im Speicher abgelegt. Von dort kann er jederzeit aufgerufen werden, indem man den Funktionsnamen aufruft.

Start-Scriptblock

Funktionen sind ein sehr faszinierendes Konstrukt, weil sie Skripte, die selbst nichts weiter sind als Skriptblöcke, die man aus einer Datei heraus startet, fast überflüssig machen können.

Skripte sind selbst Skriptblöcke, und das bedeutet, dass alles, was in einem Skript möglich ist, auch in einer Funktion möglich ist. Parameter können in Funktionen also genauso genutzt werden wie in Skripten. Alles, was Sie machen müssen, um aus einem Skript eine Funktion zu machen ist , das Skript in geschweifte Klammern einzufassen und mit Function <Name> einen Funktionsnamen zu vergeben. Nehmen wir hierzu noch einmal das Skript her, dass wir als Beispiel für Parametersets verwendet haben und wandeln es in eine Funktion um.

function Out-Command
{
<#
.Synopsis
Kann alle Powershell-Kommandos als Gridview oder CSV-Datei ausgeben

.Example
Out-Command -Path c:\temp\commands.csv
#>
param(
   # Ausgabe als Gridview 
   [Parameter(Mandatory=$true, ParameterSetName='Grid')] 
   [switch]$Grid,

   # Ausgabe als CSV-Datei in den angegebenen Pfad 
   Parameter(Mandatory=$true, ParameterSetName='CSV')]
   [string]$Path
)

   If ( $PSCmdlet.ParameterSetName -eq 'Grid' )
   {
      Get-command | Out-GridView
   }
   Else
   {
      Get-Command | Export-CSV -Path $Path
   }
}

Im Beispiel habe ich noch eine Kommentarbasierte Hilfe hinzugefügt um zu zeigen, dass Sie auch Skriptdokumentationen nahtlos in Get-Help integrieren können.

Wenn Sie diesen Skriptblock einmal ausführen, können Sie das Kommando Out-Command beliebig oft starten, es verhält sich wie ein Cmdlet und ist für einen Nutzer von einem echten Powershell-Cmdlet praktisch nicht zu unterscheiden. Man spricht daher auch von einer erweiterten Funktion (Advanced Function).