在 Windows PowerShell 脚本中使用变量范围

已完成

你可能希望 $computer 函数内设置的变量在函数完成后可在脚本中访问。 情况并非如此。 变量具有特定的作用域,用于限制它们与其他作用域的交互方式。

下表介绍了这三个范围及其影响变量使用的方式。

表 1:范围

范围 描述
全球 PowerShell 提示符处设置的变量可用于从该提示启动的所有脚本,但不适用于其他提示或 ISE 实例。
脚本 脚本中设置的变量可用于该脚本中的所有函数。 如果创建与全局变量同名的脚本范围变量,PowerShell 会在脚本作用域中创建一个新变量,并且脚本范围值优先。
函数 函数中设置的变量不会与其他函数或脚本共享。 如果创建与全局变量或脚本变量同名的函数范围变量,PowerShell 会在函数范围中创建新变量。

注意

Windows PowerShell ISE 不再处于活动功能开发中,仅支持 Windows PowerShell 5.1 及更早版本。 对于新的脚本开发,建议使用 Visual Studio Code 搭配 PowerShell 扩展作为脚本环境。

注意

避免在不同的范围内使用相同的变量名称。

除了在更高级别的范围中查看变量之外,还可以通过在修改变量时专门引用该变量的范围来修改该变量。 若要从函数中修改脚本范围变量,请使用以下语法:

$script:var = "Modified from function"

避免在范围之间修改变量,因为它可能会造成混淆。 相反,将脚本范围变量设置为等于函数的输出。 如果函数中的数据位于变量中,则可以使用 Return() 将其传递回脚本

下面是在函数末尾使用 Return() 将变量值传递回脚本范围的示例

Return($users) 

注意

在函数中使用 Return() 会将指定的数据添加到要返回的数据管道,但不会替换管道中的现有数据。 在脚本开发过程中,需要准确验证函数返回的数据。