次の方法で共有


リモート変数について

簡単な説明

リモート コマンドのローカル変数とリモート変数の使用方法について説明します。

長い説明

リモート コンピューターで実行するコマンドで変数を使用できます。 変数に値を代入し、値の代わりに 変数を使用します。

既定では、リモート コマンドの変数は、コマンドを実行するセッションで定義されているものと見なされます。 ローカル セッションで定義されている変数は、 コマンドでローカル変数として識別する必要があります。

リモート変数の使用

PowerShell では、リモート コマンドで使用される変数が、コマンドが実行されるセッションで定義されていることを前提としています。

この例では、 $ps 変数は、コマンドが実行される Get-WinEvent 一時的なセッションで定義されています。

Invoke-Command -ComputerName S1 -ScriptBlock {
  $ps = "*PowerShell*"; Get-WinEvent -LogName $ps
}

コマンドが永続セッション PSSession で実行される場合は、そのセッションでリモート変数を定義する必要があります。

$s = New-PSSession -ComputerName S1
Invoke-Command -Session $s -ScriptBlock {$ps = "*PowerShell*"}
Invoke-Command -Session $s -ScriptBlock {Get-WinEvent -LogName $ps}

ローカル変数の使用

リモート コマンドではローカル変数を使用できますが、ローカル セッションで変数を定義する必要があります。

PowerShell 3.0 以降では、スコープ修飾子を Using 使用して、リモート コマンドでローカル変数を識別できます。

Using 構文は次のとおりです。

$Using:<VariableName>

次の例では、 $ps 変数はローカル セッションで作成されますが、コマンドが実行されるセッションで使用されます。 スコープ修飾子は Using 、ローカル変数として識別します $ps

$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
  Get-WinEvent -LogName $Using:ps
}

スコープ修飾子は UsingPSSession で使用できます。

$s = New-PSSession -ComputerName S1
$ps = "*PowerShell*"
Invoke-Command -Session $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}

スプラッティングの使用

PowerShell スプラッティングは、パラメーター名と値のコレクションをコマンドに渡します。 詳細については、「 about_Splatting」を参照してください。

この例では、スプラッティング変数 は、 $Splat ローカル コンピューターに設定されているハッシュ テーブルです。 は Invoke-Command リモート コンピューター セッションに接続します。 ScriptBlock では、Usingスコープ修飾子と At (@) 記号を使用して、スプラッティングされた変数を表します。

$Splat = @{ Name = "Win*"; Include = "WinRM" }
Invoke-Command -Session $s -ScriptBlock { Get-Service @Using:Splat }

PowerShell 2.0 でのローカル変数の使用

リモート コマンドのパラメーターを定義し、コマンドレットの ArgumentList パラメーター Invoke-Command を使用してローカル変数をパラメーター値として指定することで、リモート コマンドでローカル変数を使用できます。

PowerShell 2.0 以降のバージョンでは、次のコマンド形式が有効です。

  • キーワード (keyword)をparam使用して、リモート コマンドのパラメーターを定義します。 パラメーター名は、ローカル変数の名前と一致する必要のないプレースホルダーです。

  • コマンドのキーワード (keyword)で定義されているparamパラメーターを使用します。

  • パラメーター値としてローカル変数を指定するには、Invoke-Commandコマンドレットの ArgumentList パラメーターを使用します。

たとえば、次のコマンドはローカル セッションで変数を定義 $ps し、リモート コマンドで使用します。 コマンドでは、パラメーター名として を使用し、$psその値としてローカル変数 を使用$logします。

$ps = "*PowerShell*"
Invoke-Command -ComputerName S1 -ScriptBlock {
  param($log)
  Get-WinEvent -LogName $log
} -ArgumentList $ps

こちらもご覧ください

about_PSSessions

about_Remote

about_Scopes

about_Splatting

Enter-PSSession

Invoke-Command

New-PSSession