脚本:在powershell中做什么?

时间:2010-12-01 23:52:59

标签: powershell

我之前在变量上看到过这种语法,并且不太确定它到底是什么:

$script:Foo = "Bar"

2 个答案:

答案 0 :(得分:10)

语法$script:Foo最常用于修改脚本级变量,在本例中为$Foo。当用于读取变量时,通常$Foo就足够了。例如,而不是写这个:

verbose-script.ps1
$script:foo = ''
function f { $script:foo }

我会写这个(更简洁,功能更等):

script.ps1
$foo = ''
function f { $foo }

$script:Foo至关重要的地方是你想要修改另一个范围内的脚本级变量,例如函数或匿名脚本块,例如:

PS> $f = 'hi'
PS> & { $f; $f = 'bye';$f }
hi
bye
PS> $f
hi

请注意,即使我们在scriptblock中将其修改为$f,脚本块外的bye也不会更改。发生的事情是我们只修改了$f的本地副本。如果不应用script:(或global:)之类的修饰符,PowerShell将对高格范围的变量执行copy-on-write到具有相同名称的局部变量。

鉴于上面的示例,如果我们真的想对$f进行永久性更改,我们会使用script:global:之类的修饰符,例如:

PS> $f = 'hi'
PS> & { $f; $global:f = 'bye';$f }
hi
bye
PS> $f
bye

答案 1 :(得分:5)

script:前缀会导致在脚本范围内查找右侧的名称。本质上是脚本本身的本地数据。其他有效范围包括全球,本地和私人。

范围的帮助部分包含有关此主题的一些详细信息。

help about_Scopes