リモート コマンドの実行
1 つの PowerShell コマンドを使用し、1 台から数百台のコンピューターでコマンドを実行できます。 Windows PowerShell は、WMI、RPC、WS-Management など、さまざまなテクノロジを使用してリモート コンピューティングをサポートします。
PowerShell は、WMI、WS-Management、SSH リモート処理をサポートしています。 PowerShell 7 以降では、RPC は Windows でのみサポートされています。
PowerShell でのリモート処理の詳細については、次の記事を参照してください。
構成なしの Windows PowerShell リモート処理
多くの Windows PowerShell コマンドレットには、1 台以上のリモート コンピューターのデータの収集や設定の変更が可能な ComputerName パラメーターがあります。 これらのコマンドレットは、さまざまな通信プロトコルを使用して、特別な構成を行わなくてもすべての Windows オペレーティング システム上で動作します。
これらのコマンドレットには、次のものがあります。
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
通常、特別な構成なしでリモート処理をサポートするコマンドレットには ComputerName パラメーターがあり、Session パラメーターはありません。 セッションでこれらのコマンドレットを見つけるには、次のように入力します。
Get-Command | Where-Object {
$_.Parameters.Keys -contains "ComputerName" -and
$_.Parameters.Keys -notcontains "Session"
}
Windows PowerShell のリモート処理
Windows PowerShell リモート処理では、WS-Management プロトコルを使用して、1 台以上のリモート コンピューターで Windows PowerShell コマンドを実行できます。 永続的な接続の確立、対話型のセッションの開始、およびリモート コンピューターでのスクリプトの実行が可能です。
Windows PowerShell のリモート処理を使用するには、リモート管理のためにリモート コンピューターを構成する必要があります。 手順を含む詳細については、「about_Remote_Requirements」をご覧ください。
Windows PowerShell のリモート処理を構成すると、それ以降は、多くのリモート処理の戦略が使用可能になります。 この記事では、その一部のみを示します。 詳細については、「About Remote」(リモート処理について) を参照してください。
対話型セッションの開始
1 台のリモート コンピューターとの対話型セッションを開始するには、Enter-PSSession コマンドレットを使用します。 たとえば、Server01 リモート コンピューターと対話型セッションを開始するには、次のように入力します。
Enter-PSSession Server01
コマンド プロンプトの画面が更新され、リモート コンピューターの名前が表示されます。 プロンプトに入力されたコマンドはリモート コンピューターで実行され、結果はローカル コンピューターに表示されます。
対話型セッションを終了するには、次のように入力します。
Exit-PSSession
Enter-PSSession
と Exit-PSSession
コマンドレットの詳細については、次を参照してください。
リモート コマンドの実行
1 台または複数のコンピューターでコマンドを実行するには、Invoke-Command コマンドレットを使用します。 たとえば、Get-UICulture コマンドをリモート コンピューター Server01 と Server02 で実行するには、次のように入力します。
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}
コンピューターに出力が返されます。
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) server01.corp.fabrikam.com
1033 en-US English (United States) server02.corp.fabrikam.com
スクリプトの実行
1 台または多数のリモート コンピューターでスクリプトを実行するには、Invoke-Command
コマンドレットの FilePath パラメーターを使用します。 スクリプトがローカル コンピューターでアクセス可能でなければなりません。 結果はローカル コンピューターに返されます。
たとえば、次のコマンドは、リモート コンピューター Server01 と Server02 で DiskCollect.ps1
スクリプトを実行します。
Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1
永続的な接続の確立
New-PSSession
コマンドレットを使用して、リモート コンピューター上に永続的なセッションを作成します。 次の例では、Server01 および Server02 上にリモート セッションを作成します。 セッション オブジェクトは、$s
変数に格納されます。
$s = New-PSSession -ComputerName Server01, Server02
セッションが確立されたので、それらで任意のコマンドを実行できます。 また、セッションは永続的であるため、1 つのコマンドからデータを収集して、別のコマンドでそのデータを利用できます。
たとえば、次のコマンドは $s
変数のセッションで Get-HotFix
コマンドを実行し、結果を $h
変数に保存します。 $h
変数は $s
のセッションごとに作成されますが、ローカル セッションには存在しません。
Invoke-Command -Session $s {$h = Get-HotFix}
これで、同じセッション内の他のコマンドで、$h
変数のデータを使用できるようになりました。 結果はローカル コンピューターに表示されます。 次に例を示します。
Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NT AUTHORITY\SYSTEM"}}
高度なリモート処理
PowerShell には、次のことを行うコマンドレットが含まれています。
- ローカル側とリモート側の両方からリモート セッションを構成して作成する
- カスタマイズされた制限付きセッションを作成する
- リモート セッションで実際に暗黙的に実行されるコマンドをリモート セッションからインポートする
- リモート セッションのセキュリティを構成する
Windows の PowerShell には、WSMan プロバイダーが含まれています。 プロバイダーは、ローカル コンピューターとリモート コンピューターの構成設定の階層内を移動できる WSMAN:
ドライブを作成します。
WSMan プロバイダーの詳細については、WSMan Provider (WSMan プロバイダー) および WS-Management コマンドレット関するページを参照するか、Windows PowerShell コンソールで Get-Help wsman
と入力してください。
詳細については、以下を参照してください:
リモート処理のエラーに関するヘルプは、「about_Remote_Troubleshooting」をご覧ください。
参照
PowerShell