как сохранить значения параметров после функции powershell?

У меня есть такой скрипт:

тест.ps1

param (
    $name,
$age
)

function load-parameters()
{
$name = "Bob"
$age = "23"

Write-Host "name: " $name
Write-Host "age: " $age
}

load-parameters
Write-Host "name: " $name
Write-Host "age: " $age

За исключением того, что вместо имени и возраста у меня есть около 10 параметров, которые я загружаю и инициализирую внутри параметров загрузки.

Проблема, которую я пытаюсь решить, заключается в попытке сохранить значения инициализации (как я думаю) функций глобальной области видимости внутри скрипта.

Функция выше возвращает:

name:  Bob
age:  23
name:
age:

Зашиты ли локальные правки, когда вы превращаете их в функции? похоже, что реализация заключается в том, что параметры передаются путем копирования функциям, которые вы пишете внутри скрипта.

Я понимаю, что могу обойти это, передав переменные по ссылке (если есть что-то в функциях powershell), но это было бы некрасиво, учитывая количество параметров, которые мне нужно передать. есть ли способ указать область действия переменной, когда я выполняю задание внутри функции «параметры загрузки»?


person Fred Wang    schedule 21.03.2012    source источник


Ответы (1)


Не очень понятно, чего вы хотите добиться с помощью параметров нагрузки. То, что вы пытаетесь сделать, может быть решено со значениями по умолчанию для параметров вашего скрипта:

param (
    $name = "Bob",
    $age = "23"
)

Другой вариант того, что вы пытаетесь использовать, - использовать переменные с областью действия скрипта:

$script:name = "Bob"

Итак, в функциях вы можете сделать что-то вроде:

function load-parameters
{
$script:name = "Bob"
$script:age = "23"

Write-Host "name: " $name
Write-Host "age: " $age
}
person manojlds    schedule 21.03.2012
comment
я не могу использовать значения по умолчанию, так как моя логика загрузки представляет собой гигантский оператор switch, поэтому там есть условная логика, которую я хочу сохранить в load-parameters(), но область сценария работала отлично. Спасибо. - person Fred Wang; 21.03.2012