Powershell Funktion mit [ref] Parameter aufrufen

Habe schon lange nichts mehr gepostet, liegt daran, dass ich zur Zeit nichts erwähnenswertes habe. Seit kurzem Beschäftige ich mich mit der Powershell. Anfangs eher skeptisch, bin ich nun totaler Freund der PS!

Ein wenig Erfahrung in Programmierung und .Net-Framework kann übrigens nicht schaden 🙂 

Eine Funktion kann mit „call by reference“ aufgerufen werden. Wichtig ist dabei, dass sowohl in der Funktion, als auch imAufruf der Parameter [ref] verwendet wird.

Funktionen werden einfach per Namen angegeben und deren Parameter übergeben.
Beispiele:
MyFunction($x,$y,$z)
MyFunction($x)($y)($z)
(ist identisch mit der vorherigen Variante)

Bei Verwendung von referenzierten Werten (auch wenn nur ein Ref-Wert dabei ist), müssen alle Aufrufparameter so angegeben werden:
MyFuntion([ref]$x)($y)($z)

Der Aufruf mit
MyFunction([ref]$x, $y, $z) geht nicht!!!!

Da würde dann folgender Fehler auftreten:
Reference type is expected in argument. MyFunction(< <<<<  )

Auf den Referenzierten Wert kann man innerhalb der Funktion nur über $Variable.Value zugreifen. Alles andere geht schief.

(Das funktioniert auch bei referenzierten Objekten.)

Beispiel:

FUNCTION ChangeValue([ref]$a) {
$a.Value=“Neuer Wert in Function“
}

Aufruf: 

$Input=“Grundwert“
changevalue([ref]$Input)
Write-host $Input

liefert „Neuer Wert in Function“

Übergabe mehrerer Parameter muss explizit angegeben werden. Das sieht dann in etwa so aus:

FUNCTION Swap([ref]$Var1, [ref] $var2) {
$var1.Value=“Neuer Wert Variable1″
$var2.Value=“Neuer Wert Variable2″
}

Aufruf erfolgt dann so:

Swap([ref]$In1)([ref]$In2)
 

Autor: matze

Bei Scripten gilt immer: Erst den Quellcode lesen, dann ausprobieren!