Помимо использования областей действия , как описано в Ответ Роба , существует также возможность отправки параметра по ссылке .
Это означает, что внутри функции используется ссылка на исходную переменную, поэтому независимо от того, что функция делает с ней, это влияет на исходное значение.
Недостатком является то, что при использовании ссылок необходимо использовать Value
свойство типа System.Management.Automation.PSReference для доступа / изменения ваших данных, как показано в следующем примере:
function test ([ref]$a) {
for ($a.Value = 0; $a.Value -le 2; $a.Value++){
if ($a.Value -eq 1) {break}
}
}
#----outside----
$a = 0
test ([ref]$a) # the parameter needs to be wrapped inside brackets and prefixed by [ref]
Write-Output $a
При отправке параметра, который является типом объекта, например, Hashtable, затем по умолчанию он всегда передается функции по ссылке, а для тех, кто не использует [ref]
акселератор.