2014-12-08 2 views
1

У меня есть скрипт, который содержит функцию, которая определяет некоторые переменные внутри нее для использования позже. Например, это выглядит следующим образом:Область переменной Powershell

$Rig = "TestRig1" 

    Function Setup{ 
     If ($Rig -eq "TestRig1") { 
      $Script:Server="Alpharius" 
      $Script:IIS1="Tactical" 
      $Script:IIS2="Assault" 
     } 
    } 

Setup 
<do things with $Server> 

(это не реальный сценарий, но это похоже)

Что мне любопытно, если есть лучший способ отметить это, а не индивидуально маркировки каждого переменной с их объемом. Можно ли каким-либо образом утверждать, что все переменные, объявленные внутри функции, являются областью действия сценария?

ответ

5

Одним из вариантов является для запуска функции в локальной области с помощью дот-Sourcing его:

$Rig = "TestRig1" 

    Function Setup{ 
     If ($Rig -eq "TestRig1") { 
      $Server="Alpharius" 
      $IIS1="Tactical" 
      $IIS2="Assault" 
     } 
    } 

. Setup 
<do things with $Server> 

Обратите внимание на точку и пробел перед «Настройка» - пространство должно быть там. Это запустит функцию в текущей области и создаст там переменные. Просто убедитесь, что они не будут конфликтовать с существующими именами переменных уже в области.

другой вариант заключается в использовании хэш-таблицу:

$Rig = "TestRig1" 

$RigParams = @{} 

    Function Setup{ 
     If ($Rig -eq "TestRig1") { 
      $RigParams.Server="Alpharius" 
      $RigParams.IIS1="Tactical" 
      $RigParams.IIS2="Assault" 
     } 
    } 

Setup 
<do things with $RigParams.Server> 

Функция будет обновлять ключи хэш-таблицы в родительской области вместо создания новых переменных в области видимости функции.

+0

Я тестировал оба из ваших решений, и я не мог заставить хэш-таблицу работать (когда я пытался писать-хост $ RigParams.IIS1, он ничего не отображал), но вызов функции в локальной области работал нормально. Я сделаю еще некоторое чтение переменных хэш-таблицы, мне интересно, не заполняю ли я их правильно. –

+1

Убедитесь, что вы использовали правильный синтаксис для Write-Host - «$ ($ RigParams.IIS1)» – mjolinor

+0

А, это было бы так. Благодарю. –

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