在 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() 会将指定的数据添加到要返回的数据管道,但不会替换管道中的现有数据。 在脚本开发过程中,需要准确验证函数返回的数据。