Powershell变量范围

时间:2014-12-08 23:54:57

标签: powershell

我有一个脚本,其中包含一个函数,用于定义其中的一些变量以供日后使用。例如,它看起来像这样:

$Rig = "TestRig1"

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

Setup
<do things with $Server>

(这不是实际的脚本,但它类似)

我很好奇的是,如果有更好的方法来记录这一点,而不是单独用它们的范围标记每个变量。有什么方法可以说明函数中声明的所有变量都是脚本范围?

1 个答案:

答案 0 :(得分:5)

一种选择是通过点源来运行本地范围内的功能:

$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>

该函数将更新父作用域中的哈希表键,而不是在函数作用域中创建新变量。