Előfordulhat olyan igény, hogy a függvényemmel nem új értékeket akarok létrehozni, hanem jól bevált, meglevő változóm értékét akarom megváltoztattatni. Erre is lehetőséget ad a PowerShell, hiszen létezik referencia szerinti hivatkozás is:
[10] PS I:\>function bánt ([ref] $v)
>> {
>> $v.value ++
>> }
>>
[11] PS I:\>$a = 1
[12] PS I:\>bánt ([ref] $a)
[13] PS I:\>$a
2
[14] PS I:\>bánt ([ref] $a)
[15] PS I:\>$a
3
A bánt függvényem közvetlenül bántja a paraméterként átadott változóm értékét. Ezt úgy tudja megtenni, hogy neki nem érték alapján, hanem referencia (azaz memóriacím) alapján adjuk át a változót, amin aztán ő tud dolgozni. Mivel ez a memóriacím egy referenciát tartalmazó változóba töltődik át ($v), ezért értelemszerűen nem ennek a változónak az értékét kell manipulálni, hanem ezen referencia mögötti értéket kell módosítani ($v.value).
A függvény meghívásánál is oda kell figyelni, hiszen ha csak simán ennyit írnánk, az nem vezetne eredményre:
bánt $a
Ilyenkor a PowerShell nem végez automatikus típuskonverziót, azaz nem automatikusan az $a változó referenciáját adja át, segíteni kell neki a [ref] típusjelzővel. És mivel a szóközzel elválasztott két részt ([ref] és $a) alaphelyzetben két paraméterként értelmezné, ezért kell zárójelezni, és akkor már jó lesz, mint ahogy ez a [14]-es sorban látható volt:
[14] PS I:\>bánt ([ref] $a)