スコープ修飾子を使用して変数、エイリアス、関数へのアクセス保護を設定する
Windows PowerShell では、変更および読み取り可能な場所を制限することで、変数、エイリアス、関数、および Windows PowerShell ドライブへのアクセス保護を提供します。 Windows PowerShell スコープを使用していくつかの簡単なルールを適用することで、変更すべきでない項目を誤って変更しないようにします。 スコープの基本的なルールは次のとおりです。
- 明示的にプライベートにしない限り、スコープに含める項目は、作成されたスコープと子スコープに表示されます。 変数、エイリアス、関数、または Windows PowerShell ドライブは、1 つまたは複数のスコープで使用できます。
- スコープ内で作成した項目は、別のスコープを明示的に指定しない限り、項目が作成されたスコープ内でのみ変更できます。
スコープ内に項目を作成し、その項目の名前が別のスコープ内の項目と同じである場合、元の項目が新しい項目の下に隠れることがあります。 しかし、オーバーライドされたり、変更されることはありません。
リモート コマンドではローカル変数を使用できますが、ローカル セッションで変数が定義されていることを示す必要があります。 Windows PowerShell では、リモート コマンドで使用される変数が、そのコマンドが実行されるセッションで定義されていることを前提としています。
$Using: スコープ修飾子
前述のとおり、Windows PowerShell 3.0 以降では、リモート コマンドでローカル変数を識別する $Using:
スコープ修飾子を実装できます。 これは特殊なスコープ修飾子であり、リモート コマンドでローカル変数を参照する最も簡単な方法です。 この手法では変数の値をリモート コンピューターに渡すため、使用されているホスト間での処理が少なくなります。 既定では、リモート コマンド内の変数は、リモート セッションで定義されると見なされます。
Using の構文は $Using:
です。
次の例では、$ps
変数はローカル セッションで作成されますが、コマンドが実行されるセッションで使用されます。 $Using:
スコープ修飾子では、$ps
がローカル変数として識別されます。
$ps = "Windows PowerShell"
Invoke-Command -ComputerName LON-DC1 -ScriptBlock {Get-WinEvent -LogName $Using:ps}
次の例のように、PSSessions で $Using:
スコープ修飾子を適用することもできます。
$s = New-PSSession -ComputerName LON-DC1
$ps = "Windows PowerShell"
Invoke-Command -Sessions $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}