关于powershell变量范围

时间:2017-09-08 03:25:05

标签: powershell

powersell变量范围包括:global,script,private,local。

我在循环中测试一个变量,为什么它在循环外有值?

$a=$false
for ($i = 0; $i -lt 10; $i++) {
    $private:recObj=@{}
    $private:recObj.id=$i
    if ($i -lt 6) {
        $a=$true
    }else {
        $a=$false
    }

    $private:recObj.a=$a
    $private:recObj.b="2323"
}

$private:recObj #recObj is private, why here have output? I want it is null

结果:

Name                           Value
----                           -----
b                              2323
id                             9
a                              False

2 个答案:

答案 0 :(得分:4)

PowerShell中的循环体不是范围。在这种情况下,私有是整个脚本。

答案 1 :(得分:0)

我不是这方面的专家,但我想强调一些事情。

范围就像我们的Dot Net Scopes:

  • 全球是公开的,

  • 脚本是内部的,

  • 私人是私有的,

  • 本地是当前的堆栈级别

下一个是 Visiblity

默认情况下,powershell visiblity为Public。

如果您使用

(Get-Variable -Name recObj).Visibility

您应该看到该变量的可见性。 如果您将for循环视为一个单独的范围,那么它在PS中是错误的。

第三,你不需要在任何地方声明私人;有一次会这样做:

$a=$false
for ($i = 0; $i -lt 10; $i++) {
    $private:recObj=@{}
    $recObj.id=$i
    if ($i -lt 6) {
        $a=$true
    }else {
        $a=$false
    }

    $recObj.a=$a
    $recObj.b="2323"
}
$recObj

但是你想限制它,然后你明确地将可见性设为私有。

 Set-Variable recObj -Visibility Private

希望它能帮助你更好地理解。