Powershell:创建新变量的功能不起作用

Ami*_*200 4 variables powershell function

我正在尝试创建一个简单的函数来在 powershell 中使用生成的名称创建变量

我正在使用这段代码:

    function createAnewVariable {
 [CmdletBinding()]
    Param(
          [String]$Name
    )
    New-Variable -Name GenLink$Name -Value "AMIGA" -Option AllScope
}

createAnewVariable -Name "AutoVAR"
Run Code Online (Sandbox Code Playgroud)

在函数外部,当我执行 get-variable 时,它​​工作得很好,我可以看到自动创建的变量,例如 $GenLinkName,但在函数内部,我无权访问列表中的变量,并且无法调用它!oO

这可能很简单,但我不明白为什么:)

有人可以告诉我我错在哪里吗?

Mat*_*sen 5

PowerShell 中的变量有作用域的,默认为当前本地作用域,即。函数体。该AllScope选项不会使其可用于先前的作用域,它只是确保 PowerShell将变量复制到从当前作用域创建的任何新子作用域中。

要使变量在父作用域中可用,请-Scope 1在调用时使用New-Variable

function createAnewVariable {
    [CmdletBinding()]
    Param(
        [String]$Name
    )
    
    New-Variable -Name "GenLink$Name" -Value "AMIGA" -Scope 1
}

createAnewVariable -Name "AutoVAR"

# This is now available in the calling scope
$GenLinkAutoVAR
Run Code Online (Sandbox Code Playgroud)

请注意,如果函数是模块作用域的(例如,函数是模块的一部分),则父作用域将是模块作用域,这意味着同一模块中的所有其他函数也将能够看到它。