PowerShell变量冲突

Eth*_*ost 3 powershell

我有一个常见的变量,我的应用程序称为"电子邮件".我还想在其中一个脚本中使用"电子邮件"作为参数的名称.我需要在同一个脚本中引用这两个变量的值.理想情况下,有一种方法可以使用模块/命名空间或其他东西进行引用,也许还有,但我不知道.你可以看到我是如何破解它的,但它很丑陋,容易出错.有没有更好的办法?

# PowerShell v1
# Some variable names are very common.
param ($emails)

# My Hack
# We need to save current value so we have it after we source in variables below.
$emails0=$emails

# Below is going to load a variable called "emails" which will overwrite parm above.
. C:\load_a_bunch_of_global_variables.ps1
Run Code Online (Sandbox Code Playgroud)

ste*_*tej 7

这是因为文档说:( 点源操作符)运行脚本,以便脚本中的项是调用范围的一部分.

在这种情况下,我将转换C:\load_a_bunch_of_global_variables.ps1为模块并$emails作为参数传递或导出一个设置$script:emails模块中的变量的函数.然后变量不会与父脚本中的变量冲突.

有关可以使用的模块的更多信息get-help about_modules.


如果可能的话,我会避免在我的脚本中使用全局变量.

为什么?因为它是代码气味(正如程序员所说).使用一个脚本没有问题.如果两个脚本使用相同的全局变量并且只读取,则可能是可接受的.但如果他们中的任何一个改变了价值,那么可能会有不愉快的冲突.

在某些情况下Get-Variable -scope 1 -name myvariable会有所帮助,但我只会在像模块或短脚本这样的封闭代码中使用它(与全局变量的原因相同).