Powershell变量范围

Sea*_*ong 1 powershell

我有一个脚本,其中包含一个函数,该函数定义了一些变量,以便以后使用.例如,它看起来像这样:

$Rig = "TestRig1"

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

Setup
<do things with $Server>
Run Code Online (Sandbox Code Playgroud)

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

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

mjo*_*nor 5

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

$Rig = "TestRig1"

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

. Setup
<do things with $Server>
Run Code Online (Sandbox Code Playgroud)

注意"设置"之前的点和空格 - 空间必须在那里.这将在当前作用域中运行该函数,并在那里创建变量.请确保它们不会与范围中已有的任何现有变量名冲突.

另一种选择是使用哈希表:

$Rig = "TestRig1"

$RigParams = @{}

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

Setup
<do things with $RigParams.Server>
Run Code Online (Sandbox Code Playgroud)

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