Kleiner Stolperstein bei Funktionen in der PowerShell
Bei der Definition von Funktionen in der PowerShell gibt es einen kleinen Stolperstein, den man kennen sollte, wenn man nicht stürzen — oder besser — keine falschen Ergebnisse haben will. Gegeben ist zum Beispiel die kleine Funktion Add-Together()
:
# Add-Together.ps1 function Add-Together([string]$text,[int]$zahl1,[int]$zahl2) { Write-Host $text ($summe = $zahl1 + $zahl2) } |
Jetzt könnte man meinen, dass die Funktion Add-Together()
genauso eingesetzt wird, wie sie definiert wurde, also mit Klammern, einem Text-String und zwei Integer-Zahlen, die durch zwei Kommas voneinander getrennt werden:
Add-Together("Das Ergebnis ist", 4, 5) |
In der Konsole ausgegeben wird aber Das Ergebnis ist 4 5 0
, da die PowerShell Add-Together()
in dieser Schreibweise nicht als Funktion ansieht, sondern als Array.
Ein Array wird in der PowerShell erstellt, indem eine kommaseparierte Liste mit Werten an eine Variable übergeben wird, was im kurzen Tutorial „Programmieren mit der Windows PowerShell“ von Nils Gutsche sehr schön prägnant beschrieben ist. Für die Funktion bedeutet das, dass der erste Wert das Array ist und die beiden anderen leer bleiben, also 0 sind. Daher die Ausgabe Das Ergebnis ist 4 5 0
in der Konsole.
In der PowerShell werden die Parameter einer Funktion ohne Klammern und ohne trennende Kommas übergeben, so dass der vollständige Code dann folgendermaßen aussieht:
# Add-Together.ps1 function Add-Together([string]$text,[int]$zahl1,[int]$zahl2) { Write-Host $text ($summe = $zahl1 + $zahl2) } Add-Together "Das Ergebnis ist" 4 5 |
Geschrieben in Powershell, Windows