2017-09-08 5 views
0

powersell変数スコープは次のとおりです。global、script、private、localpowershell変数スコープについて

ループ内の変数をテストします。なぜループ外に値があるのでしょうか?

$a=$false 
for ($i = 0; $i -lt 10; $i++) { 
    $private:[email protected]{} 
    $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 

結果:PowerShellで

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

答えて

4

ループ体がスコープではありません。この場合のプライベートはスクリプト全体です。

0

私は専門家ではありませんが、私はいくつかのことを強調したいと思います。

スコープは、当社ドットネットスコープのようなものです:

  • グローバルは、

  • 公開されているスクリプト

  • プライベートは、

  • プライベートで、内部で
  • ローカルデフォルトのPowerShellの可視性により、次のいずれかが可視性ある

現在のスタックレベルで公開されます。

あなたは

(Get-Variable -Name recObj).Visibility 

を使用する場合は、その変数の可視性が表示されるはずです。 forループを別のスコープと見なすと、PSで間違っています。

第3に、どこにでもプライベートを宣言する必要はありません。 1時間があることでしょう。

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

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

をしかし、あなたは、あなたが明示的に可視性をプライベートにし、それを制限したいです。

Set-Variable recObj -Visibility Private 

希望があれば、より理解しやすくなります。