点源变量 VS 全局变量

Dot Sourced Variables VS Global Variables

我有两种方法可以从单独的脚本文件中引用脚本变量。以下是两个基本示例:

1.点源
变量.ps1

$Source = "source"  
$Destination = "dest"

执行。ps1

. .\Variables.ps1  
Copy-Item -Path $Source -Destination $Destination -Force

2。全局变量
变量.ps1

$Global:Source = "source"  
$Global:Destination = "dest"

执行。ps1

.\Variables.ps1  
Copy-Item -Path $Source -Destination $Destination -Force

我已经做过研究,但还没有找到一个明确的理由来使用一个而不是另一个。使用这些方法时是否有限制或注意事项?非常感谢任何输入。谢谢你的时间。

编辑:

@mklement0 给出了一个很好的答案,说明为什么要对全局变量使用点源。我很乐意继续讨论这个问题。如果有另一种观点,或者关于何时使用全局变量更有益的解释,我会很乐意听到它并相应地投票。谢谢。

我建议你使用点源,不使用显式全局变量(方法 1):

这样,需要刻意努力将变量添加到当前范围。请注意,点源将变量添加到 current 范围,它可能是也可能不是当前会话的 global 范围(子范围由例如,使用 & 调用脚本(没有点源)和脚本块。

相比之下,使用全局变量(方法 2)创建会话全局变量而不考虑调用方法,因此即使是意外的、非点源的脚本调用也会结束向上改变 global 状态。