Windows PowerShell コマンドは、コンピューターが 1 台でも数百台でも、1 回指定するだけで実行できます。Windows PowerShell は、WMI、RPC、WS-Management などの各種テクノロジーを使用したリモート コンピューティングをサポートしています。
構成不要のリモート処理
Windows PowerShell コマンドレットの多くは、ComputerName パラメーターを持ちます。ComputerName パラメーターを使用して、1 つまたは複数のリモート コンピューターのデータを収集したり、設定値を変更したりできます。コマンドレットではさまざまな通信テクノロジーが使用されており、その多くは特別な構成を行うことなく、Windows PowerShell がサポートするすべての Windows オペレーティング システムで使用できます。
コマンドレットの具体例には、次のものがあります。
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-HotFix
- Get-WmiObject
一般的に、特別な構成が不要なリモート処理をサポートするコマンドレットは ComputerName パラメーターを持ち、Session パラメーターを持ちません。これらのコマンドレットをセッションで検索するには、次のように入力します。
get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
Windows PowerShell のリモート処理
Windows PowerShell のリモート処理には WS-Management プロトコルが採用されており、1 つまたは多数のリモート コンピューター上で任意の Windows PowerShell コマンドを実行できます。固定接続を確立することも、1:1 の対話型セッションを開始することも、複数のコンピューター上でスクリプトを実行することもできます。
Windows PowerShell リモート処理を使用するには、リモート コンピューターをリモート管理用に構成する必要があります。手順などの詳細については、「about_Remote_Requirements」を参照してください。
Windows PowerShell リモート処理の構成が完了すると、さまざまな手法のリモート処理を利用できるようになります。このドキュメントでは以降、それらのリモート処理のごく一部を紹介します。詳細については、「about_Remote」および「about_Remote_FAQ」を参照してください。
対話型セッションの開始
1 台のリモート コンピューターとの対話型セッションを開始するには、Enter-PSSession コマンドレットを使用します。たとえば、Server01 リモート コンピューターとの対話型セッションを開始するには、次のように入力します。
enter-pssession Server01
コマンド プロンプトが変更され、接続先コンピューターの名前が表示されます。それ以降、プロンプトで入力されたあらゆるコマンドはリモート コンピューター上で実行されるようになり、その結果はローカル コンピューター上に表示されます。
対話型セッションを終了するには、次のように入力します。
exit-pssession
Enter-PSSession コマンドレットおよび Exit-PSSession コマンドレットの詳細については、「Enter-PSSession」および「Exit-PSSession」を参照してください。
リモート コマンドの実行
任意のコマンドを 1 つまたは多数のリモート コンピューター上で実行するには、Invoke-Command コマンドレットを使用します。たとえば、Server01 と Server02 の各リモート コンピューター上で Get-UICulture コマンドを実行するには、次のように入力します。
invoke-command -computername Server01, Server02 {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
Invoke-Command コマンドレットの詳細については、Invoke-Command」を参照してください。
スクリプトの実行
1 つまたは多数のリモート コンピューター上でスクリプトを実行するには、Invoke-Command コマンドレットの FilePath パラメーターを使用します。そのスクリプトはローカル コンピューター上に置かれているか、ローカル コンピューターからアクセス可能である必要があります。結果はローカル コンピューターに返されます。
たとえば、Server01 と Server02 の各リモート コンピューター上で DiskCollect.ps1 スクリプトを実行するには、次のコマンドを入力します。
invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1
Invoke-Command コマンドレットの詳細については、Invoke-Command」を参照してください。
固定接続の確立
データを共有する一連の関連コマンドを実行するには、リモート コンピューター上でセッションを作成し、Invoke-Command コマンドレットを使用して、作成したセッションでコマンドを実行します。リモート セッションを作成するには、New-PSSession コマンドレットを使用します。
たとえば、Server01 コンピューターにリモート セッションを 1 つ作成し、もう 1 つの別のリモート セッションを Server02 コンピューターに作成するには、次のコマンドを実行します。これにより、セッション オブジェクトが $s 変数に格納されます。
$s = new-pssession -computername Server01, Server02
これで、セッションが確立されたので、そのセッションで任意のコマンドを実行できます。このセッションは永続的であるため、コマンドで収集したデータは、以降のコマンドでも使用できます。
たとえば、セッションの $s 変数で Get-Hotfix コマンドを実行し、その結果を $h 変数に格納するには、次のコマンドを実行します。$h 変数は各セッションで $s 内に作成されますが、ローカル セッションには存在しません。
invoke-command -session $s {$h = get-hotfix}
これで、$h 変数のデータが後続のコマンドで使用可能になりました。たとえば、次のようなコマンドです。結果はローカル コンピューター上に出力されます。
invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"
高度なリモート処理
Windows PowerShell リモート管理では、この他にもさまざまな処理を実行できます。Windows PowerShell に既定で備えられているコマンドレットを使用することにより、ローカル エンドおよびリモート エンドからリモート セッションを確立および構成することや、カスタマイズしたセッションや制限付きセッションを作成する、実際にはリモート セッションに対して暗黙的に実行されるリモート セッションからユーザーがコマンドをインポートできるようにする、リモート セッションのセキュリティを構成するなど、さまざまな処理を実行することができます。
リモート構成を支援するために、Windows PowerShell には WS-Management プロバイダーが備えられています。プロバイダーによって作成される WSMAN: ドライブを使用して、ローカル コンピューターとリモート コンピューター上の構成設定値の階層内を移動できます。WS-Management プロバイダーの詳細については、「WSMan Provider」および「about_WS-Management_Cmdlets」を参照するか、Windows PowerShell コンソールで「get-help wsman」と入力してください。
詳細については、「about_Remote_FAQ」、「New-PSSessionConfiguration」、および「Import-PSSession」を参照してください。リモート処理のエラーに対応するには、「about_Remote_Troubleshooting」を参照してください。
関連項目