2016-02-13 2 views
0

У меня возникла проблема с обновлением глобальной переменной в функции. Я нашел следующую статью, которая выглядела многообещающей:Изменения в разрезе Powershell?

Variable scoping in PowerShell

Однако, я обнаружил, что он ничего не соответствовал Написал вывод я видел. Вот его код:

[email protected]("g") 
function foo() 
{ 
    $array += "h" 
    Write-Host $array 
} 

& { 
    $array +="s" 
    Write-Host $array 
} 
foo 

Write-Host $array 

И его результаты:

g s 
g h 
g 

Однако ... Мои результаты на PowerShell 5.0 являются:

s 
h 
g 

Добавление предложенного решения $global:array += "s" дает:

g 
h 
g 

Что мне не хватает и как его исправить? Как я могу обновить переменную, которая находится вне функции, из функции, если $ global: не работает?

+0

Сторона примечания: В ISE я получаю ожидаемый результат. Но когда я запускаю его из моего .ps1, я получаю выше. – SaintFrag

ответ

3

Массив объявлен в области script, а не глобально. Либо объявить массив в качестве глобальной переменной, а также:

$global:[email protected]("g") 

или использовать рамки сценария, чтобы обновить его:

$script:array += "h" 

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

+0

Это было в значительной степени тем, чего мне не хватало .... заявление нужно было добавить как $ global: также для того, чтобы он работал. Я также соглашаюсь с тем, что scoping до $ script: это намного лучший общий вариант и работал как ожидалось в моем реальном скрипте PS. Благодаря! – SaintFrag

Смежные вопросы