トピック
    about_Remote_FAQ

簡易説明
    Windows PowerShell でのリモート コマンドの実行に関する FAQ を掲載しています。


詳細説明
   リモートで操作を行う場合、ローカル コンピューターと呼ばれる、任意のコンピューター上の Windows PowerShell 
   にコマンドを入力しますが、そのコマンドは、リモート コンピューターと呼ばれる別のコンピューター上で実行され
   ます。リモートでの操作は、リモート コンピューターで直接操作する場合とほぼ同じ方法で実行することができま
   す。

    注: Windows PowerShell リモート処理を使用するには、リモート コンピューターをリモート処理用に構成する必要
        があります。詳細については、「about_Remote_Requirements」を参照してください。
          

 両方のコンピューターに Windows PowerShell をインストールする必要がありますか。

   はい。リモート操作を行う場合、ローカル コンピューターとリモート コンピューターの両方に Windows PowerShell、
   Microsoft .NET Framework 2.0、および Web Services for Management (WS-Management) プロトコルが必要になります。
   また、特定のコマンドを実行するうえで必要なファイルなどのリソースを、リモート コンピューター上に準備する必要
   があります。

   リモート コンピューターに接続するためのアクセス許可、Windows PowerShell を実行するためのアクセス許可、デ
   ータ ストア (ファイル、フォルダーなど) やリモート コンピューター上のレジストリにアクセスするためのアクセス
   許可が必要です。

   詳細については、「about_Remote_Requirements」を参照してください。


 リモート処理はどのようなしくみで機能しますか。

   リモート コマンドを送信すると、コマンドはネットワークを介してリモート コンピューター上の Windows 
   PowerShell エンジンに渡され、リモート コンピューター上の Windows PowerShell クライアントで実行されます。
   コマンドの結果はローカル コンピューターに返され、ローカル コンピューター上の Windows PowerShell セッショ
   ンに表示されます。

   コマンドを送信し、出力を受け取るために、Windows PowerShell では WS-Management プロトコルを使用し
   ます。WS-Management プロトコルについては、MSDN (Microsoft Developer Network) ライブラリの「WS-
   Management Protocol (WS-Management プロトコル)」
   (https://go.microsoft.com/fwlink/?LinkId=144634) を参照してください。


 Windows PowerShell リモート処理は安全ですか。

    リモート コンピューターに接続すると、リモート コンピューターにログインするために、ローカル コンピュー
    ターでのユーザー名とパスワードか、コマンドで指定した資格情報が使用されます。これらの資格情報を含め、送
    信される情報は暗号化されます。

    保護を強化するために、HTTP の代わりに SSL (Secure Sockets Layer) を使用して Windows 
    Remote Management (WinRM) の要求をリッスンするようにリモート コンピューターを構成できます。さらに、ユーザ
    ーは、接続を確立する際に Invoke-Command、New-PSSession、および Enter-PSSession コマンドレットの 
    UseSSL パラメーターを使用できます。このオプションでは、HTTP の代わりにより安全性の高い HTTPS チャネル
    を使用します。


 リモート コマンドを実行する場合は、必ず Windows PowerShell リモート処理が必要ですか。

   いいえ。いくつかのコマンドレットには、リモート コンピューターからオブジェクトを取得するための 
   ComputerName パラメーターがあります。

   これらのコマンドレットでは、Windows PowerShell リモート処理は使用されません。したがって、Windows 
   PowerShell を実行している任意のコンピューターでこれらのコマンドレットを使用できます。そのコンピュータ
   ーが Windows PowerShell リモート処理用に構成されていない場合でも、Windows PowerShell リモート処
   理を使用するために必要な要件を満たしていない場合でも、使用可能です。

   この種類のコマンドレットには、次のものがあります。

       Get-Process
       Get-Service
       Get-WinEvent
       Get-EventLog
       Get-WmiObject
       Test-Connection


   ComputerName パラメーターを持つすべてのコマンドレットを探すには、次のように入力します。

        get-help * -parameter ComputerName

   
   特定のコマンドレットの ComputerName パラメーターを使用するうえで Windows PowerShell リモート処理機能が必
   要かどうかを確認するには、パラメーターの説明を参照してください。パラメーターの説明を表示するには、次の形
   式で入力します。

	get-help <cmdlet-name> -parameter ComputerName

   たとえば、次のように入力します。

        get-help get-process -parameter Computername

   その他のコマンドを実行する場合は、Invoke-Command コマンドレットを使用します。


 リモート コンピューター上でコマンドを実行するにはどうすればよいですか。

   リモート コンピューター上でコマンドを実行するには、Invoke-Command コマンドレットを使用します。

   コマンドは中かっこ ({}) で囲んで、スクリプト ブロックにします。また、Invoke-Command の ScriptBlock パ
   ラメーターを使用してコマンドを指定します。

   Invoke-Command の ComputerName パラメーターを使用して、リモート コンピューターを指定できます。ま
   た、リモート コンピューターへの固定接続 (セッション) を作成し、Invoke-Command の Session パラメー
   ターを使用してそのセッションでコマンドを実行することもできます。


   たとえば、次のコマンドは、Get-Process コマンドをリモートで実行します。

      invoke-command -computername Server01, Server02 -scriptblock 
      {get-process}

        - または

      invoke-command -session $s -scriptblock {get-process}

   リモート コマンドを停止するには、Ctrl キーを押しながら C キーを押します。停止要求がリモート コンピュー
   ターに渡され、リモート コマンドが停止されます。

   リモート コマンドの詳細については、「about_Remote」と、リモート処理をサポートしているコマンドレットの
   ヘルプ トピックを参照してください。


 リモート コンピューターに Telnet で接続することはできますか。

    Enter-PSSession コマンドレットを使用すると、リモート コンピューターとの対話型のセッションを開始でき
    ます。

    Windows PowerShell プロンプトで、次のように入力します。

	Enter-PSSession <ComputerName>

    コマンド プロンプトが変わり、リモート コンピューターに接続していることが示されます。

        <ComputerName>\C:>

    これで、リモート コンピューターで直接入力した場合と同様に、入力したコマンドがリモート コンピューターで
    実行されるようになります。

    対話型のセッションを終了するには、次のように入力します。

        Exit-PSSession

    対話型のセッションは、WS-Management プロトコルを使用する永続的なセッションです。Telnet を使用した場合と
    まったく同じというわけではありませんが、同様の処理を行うことができます。

    詳細については、「Enter-PSSession」を参照してください。


 固定接続を作成できますか。

    はい、できます。リモート コンピューターの名前、NetBIOS 名、または IP アドレスを指定して、リモート コ
    マンドを実行できます。または、リモート コンピューターに接続する Windows PowerShell セッション 
    (PSSession) を指定して、リモート コマンドを実行することもできます。
    
    Invoke-Command または Enter-PSSession の ComputerName パラメーターを使用すると、Windows 
    PowerShell は一時接続を確立します。Windows PowerShell はこの接続を使用して現在のコマンドだけを実行
    し、その後で接続を閉じます。この方法により、多数のリモート コンピューター上でも、1 つのコマンドまたは複
    数の無関係のコマンドを非常に効率的に実行することができます。

    New-PSSession コマンドレットを使用して PSSession を作成すると、Windows PowerShell は 
    PSSession 用の固定接続を確立します。その後で、データを共有するコマンドを含め、複数のコマンドを PSSession 
    で実行できます。

    通常、PSSession を作成するのは、データを共有する一連の関連コマンドを実行する場合です。それ以外のほと
    んどのコマンドの場合は、ComputerName パラメーターを使用して作成できる一時接続で十分です。

    セッションの詳細については、「about_PSSessions」を参照してください。


 一度に複数のコンピューター上でコマンドを実行することはできますか。

   はい、できます。Invoke-Command コマンドレットの ComputerName パラメーターには複数のコンピューター名を
   指定でき、Session パラメーターには複数の PSSession を指定できます。

   Invoke-Command コマンドを実行すると、指定したすべてのコンピューター上、または指定したすべての 
   PSSession で、コマンドが実行されます。

   Windows PowerShell では、数百の同時リモート接続を管理できます。ただし、送信できるリモート コマンドの
   数は、コンピューターのリソースや、複数のネットワーク接続を確立して維持するコンピューターの能力によって制
   限される場合があります。

   詳細については、Invoke-Command のヘルプ トピックで紹介されている例を参照してください。


 プロファイルはどこにありますか。

    リモート セッションでは Windows PowerShell プロファイルが自動的に実行されないので、プロファイルによっ
    て追加されるコマンドはセッションには適用されません。さらに、リモート セッションでは、$profile 自動変数が
    設定されません。

    セッションでプロファイルを実行するには、Invoke-Command コマンドレットを使用します。

    たとえば、次のコマンドは、$s のセッションでローカル コンピューターから CurrentUserCurrentHost プロファイル
    を実行します。

        invoke-command -session $s -filepath $profile


    次のコマンドは、$s のセッションでリモート コンピューターから CurrentUserCurrentHost プロファイルを実行しま
    す。$profile 変数が設定されないため、このコマンドではプロファイルへの明示的なパスが使用されます。

        invoke-command -session $s {. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}


    このコマンドを実行すると、プロファイルによってセッションに追加されるコマンドが $s で利用可能になりま
    す。

    セッション構成でスタートアップ スクリプトを使用して、そのセッション構成を使用するすべてのリモート セッ
    ションでプロファイルを実行することもできます。

    Windows PowerShell のプロファイルの詳細については、「about_Profiles」を参照してください。セッシ
    ョン構成の詳細については、「Register-PSSessionConfiguration」を参照してください。



 リモート コマンドでスロットルはどのように機能しますか。

   Windows PowerShell には、ローカル コンピューター上のリソースの管理に役立つ、コマンド単位のスロットル機能
   が用意されています。この機能を使用すると、コマンドごとに確立される同時リモート接続の数を制限できます。

   既定の同時接続の数は 32 ですが、コマンドレットの ThrottleLimit パラメーターを使用して、特定のコマンドのカス
   タム スロットル制限を設定できます。

   スロットル機能を使用する場合は、この機能が適用されるのはセッション全体またはコンピューターではなく、各コマンド
   であるという点に注意してください。コマンドを複数のセッションまたは PSSession で同時に実行している場合、すべての
   セッションでの同時接続の合計が同時接続の数になります。

   ThrottleLimit パラメーターを持つコマンドレットを探すには、次のように入力します。

	get-help * -parameter ThrottleLimit


 リモート処理にはシステム固有の相違がありますか。

   コマンドを複数のコンピューター上で実行する場合は、オペレーティング システム、ファイル システムの構造、
   およびレジストリの相違など、リモート コンピューター間の相違に注意する必要があります。

   Windows Vista または Windows Server 2003 を実行しているリモート コンピューターに接続する場合、既定の開始場
   所は現在のユーザーのホーム ディレクトリです。これは、%homepath% 環境変数 ($env:homepath) と Windows 
   PowerShell $home 変数に格納されます。Windows Vista の場合、ホーム ディレクトリは通常は C:\Users\<UserName> 
   です。Windows Server 2003 の場合、ホーム ディレクトリは通常は C:\Documents and Settings\<UserName> です。

   Windows XP を実行しているリモート コンピューターに接続する場合、既定の開始場所は既定のユーザーのホーム 
   ディレクトリです。これは、既定のユーザーの %homepath% 環境変数 ($env:homepath) に格納されます。ホーム ディレ
   クトリは、通常は C:\Documents and Setting\Default User です。


 リモート コマンドの出力とローカル出力は異なりますか。
   
   Windows PowerShell をローカルで使用している場合、送受信するのは .NET Framework の "ライブ" オブジェクトで
   す。"ライブ" オブジェクトは、実際のプログラムやシステム コンポーネントに関連付けられているオブジェクトで
   す。メソッドを呼び出したり、ライブ オブジェクトのプロパティを変更したりすると、変更は実際のプログラムや
   コンポーネントに影響します。また、プログラムやコンポーネントのプロパティが変更されると、それらに対応する
   オブジェクトのプロパティも変更されます。

   ただし、ほとんどのライブ オブジェクトはネットワークを介して送信できないので、Windows PowerShell は、リ
   モート コマンドで送信されるほとんどのオブジェクトを "シリアル化" します。つまり、各オブジェクトを転送用
   に一連の XML (CLiXML (Constraint Language in XML: XML での制約言語)) データに変換します。

   Windows PowerShell は、シリアル化されたオブジェクトを受け取ると、XML を逆シリアル化されたオブジェクトに
   変換します。逆シリアル化されたオブジェクトは、元のプログラムやコンポーネントのプロパティの正確なレコード
   ですが、もはや "ライブ" ではありません。つまり、コンポーネントとは直接関連付けられていません。また、メソ
   ッドは有効ではなくなるので、削除されます。

   通常、逆シリアル化されたオブジェクトはライブ オブジェクトと同様に扱うことができますが、それらの制限に注
   意する必要があります。また、Invoke-Command コマンドレットによって返されるオブジェクトには、コマンドの
   元の場所を突き止めるのに役立つプロパティが追加されています。

   一部の種類のオブジェクト (DirectoryInfo オブジェクト、GUID など) は、受信時に元のライブ オブジェクトに変換さ
   れます。これらのオブジェクトに対しては、特別な処理や書式設定は必要ありません。

   リモート出力の解釈や書式設定については、「about_Remote_Output」を参照してください。


 バックグラウンド ジョブをリモートで実行できますか。

   はい、できます。Windows PowerShell バックグラウンド ジョブは、セッションと対話することなく非同期的に実行
   される Windows PowerShell コマンドです。バックグラウンド ジョブを開始すると、すぐにコマンド プロンプ
   トに戻るので、時間のかかるジョブの実行中も引き続きセッションで作業できます。
   
   バックグラウンド ジョブは常に一時セッションで非同期的に実行されるので、他のコマンドの実行中であっても、
   バックグラウンド ジョブを開始できます。

   バックグラウンド ジョブは、ローカル コンピューターでも、リモート コンピューターでも実行できます。既定で
   は、バックグラウンド ジョブはローカル コンピューターで実行されます。ただし、Invoke-Command コマンドレッ
   トの AsJob パラメーターを使用すると、任意のリモート コマンドをバックグラウンド ジョブとして実行できま
   す。また、Invoke-Command を使用して Start-Job コマンドをリモートで実行することもできます。

   Windows PowerShell のバックグラウンド ジョブの詳細については、「about_Jobs」と「about_Remote_Jobs」を
   参照してください。


 リモート コンピューター上で Windows プログラムを実行できますか。
 
    Windows PowerShell リモート コマンドを使用すると、Windows ベースのプログラムをリモート コンピューター上
    で実行できます。たとえば、リモート コンピューター上で Shutdown.exe や Ipconfig を実行できます。

    ただし、Windows PowerShell コマンドを使用してリモート コンピューター上のプログラムのユーザー イン
    ターフェイスを開くことはできません。

    リモート コンピューター上で Windows プログラムを起動したとき、コマンドはまだ完了していません。プログラ
    ムを終了するか、Ctrl キーを押しながら C キーを押してコマンドを停止するまで、Windows PowerShell のコ
    マンド プロンプトには戻りません。たとえば、リモート コンピューター上で IpConfig プログラムを実行した場
    合、IpConfig が完了するまで、コマンド プロンプトには戻りません。
 
    リモート コマンドを使用してユーザー インターフェイスを持つプログラムを起動した場合、プログラムのプロセ
    スは開始されますが、そのユーザー インターフェイスは表示されません。Windows PowerShell コマンドは完
    了しておらず、プログラムのプロセスを停止するか、Ctrl キーを押しながら C キーを押してコマンドとプロセ
    スを停止するまで、コマンド プロンプトには戻りません。
 
    たとえば、Windows PowerShell コマンドを使用してリモート コンピューター上でメモ帳を実行した場合、リ
    モート コンピューターでメモ帳のプロセスは開始されますが、メモ帳のユーザー インターフェイスは表示されま
    せん。コマンドを停止し、コマンド プロンプトに戻るには、Ctrl キーを押しながら C キーを押します。
 

 自分のコンピューター上で他のユーザーによるリモートでの実行が可能なコマンドを制限することはできますか。

    はい、できます。どのリモート セッションでも、リモート コンピューターのいずれかのセッション構成を使用す
    る必要があります。コンピューターのセッション構成 (およびそれらのセッション構成へのアクセス許可) を管理
    し、自分のコンピューター上でリモートでのコマンド実行が可能な他のユーザーや、それらのユーザーが実行でき
    るコマンドを指定できます。

    セッション構成で構成するのは、セッションの環境です。
    構成を定義するには、新しい構成クラスを実装するアセンブリか、セッションで実行されるスクリプトを使用します。
    構成では、セッションで使用可能なコマンドを指定できます。また、構成には、コンピューターを保護するための
    設定 (セッションで単一のオブジェクトやコマンドを通じてリモートで受信できるデータの量を制限する設定など) 
    を含めることができます。さらに、構成を使用するために必要なアクセス許可を指定するセキュリティ記述子を指
    定することもできます。

    Enable-PSRemoting コマンドレットは、コンピューターの既定のセッション構成である Microsoft.PowerShell を
    作成します (64 ビットのオペレーティング システムの場合は Microsoft.PowerShell32)。また、Enable-PSRe
    moting は、コンピューターの Administrators グループのメンバーのみに構成の使用を許可する、セキュリティ
    記述子を設定します。
 
    セッション構成コマンドレットでは、既定のセッション構成の編集、新しいセッション構成の作成、すべてのセッション
    構成のセキュリティ記述子の変更が可能です。

    ユーザーは、Invoke-Command、New-PSSession、または Enter-PSSession コマンドレットを使用する際に、
    ConfigurationName パラメーターを使用して、セッションで使用するセッション構成を指定できます。また、セッシ
    ョンで $PSSessionConfigurationName 設定変数の値を変更することにより、セッションで使用する既定の構成を変更
    できます。

    セッション構成の詳細については、セッション構成コマンドレットのヘルプを参照してください。セッション構成コマンド
    レットを探すには、次のように入力します。

	get-command *pssessionconfiguration

   

 ファンイン構成およびファンアウト構成とは何ですか。
	
   複数のコンピューターが関与する、最も一般的な Windows PowerShell リモート処理のシナリオは、1 台のローカル 
   コンピューター (管理者のコンピューター) が多数のリモート コンピューター上で Windows PowerShell コマンドを実行
   する 1 対多の構成です。このシナリオは、"ファンアウト" シナリオと呼ばれます。

   一方、多数のクライアント コンピューターが Windows PowerShell を実行している 1 台のリモート コンピューター
   に接続する、多対 1 の構成を使用する企業もあります (たとえば、ファイル サーバーやキオスクなど)。
   これは、"ファンイン" 構成と呼ばれます。

   Windows PowerShell リモート処理は、ファンアウト構成とファンイン構成の両方に対応しています。

   ファンアウト構成の場合、Windows PowerShell では Web Services for Management 
   (WS-Management) プロトコルと、WS-Management のマイクロソフトによる実装をサポートしている WinRM 
   サービスを使用します。ローカル コンピューターがリモート コンピューターに接続すると、WS-Management が接
   続を確立し、Windows PowerShell 向けのプラグインを使用して、リモート コンピューター上で Windows PowerShell 
   ホスト プロセス (Wsmprovhost.exe) を開始します。ユーザーは、代替ポート、代替セッション構成、およびその他の
   リモート接続のカスタマイズ機能を指定できます。

   "ファンイン" 構成をサポートするために、Windows PowerShell ではインターネット インフォメーション サービス 
   (IIS) を使用して、WS-Management のホスト、Windows PowerShell プラグインの読み込み、Windows PowerShell の
   起動を行います。このシナリオでは、各 Windows PowerShell セッションを個別のプロセスで開始する代わりに、
   すべての Windows PowerShell セッションを同じホスト プロセスで実行します。

   IIS ホスティングとファンイン リモート管理は、Windows XP と Windows Server 2003 
   ではサポートされていません。

   ファンイン構成では、ユーザーは、トランスポート、コンピューター名、ポート、アプリケーション名を含め、接
   続 URI と HTTP エンドポイントを指定できます。IIS は、指定されたアプリケーション名を含むすべての要求をアプ
   リケーションに転送します。既定値は、Windows PowerShell をホストできる WS-Management です。

   認証メカニズムの指定も可能なほか、HTTP エンドポイントおよび HTTPS エンドポイントからのリダイレクトを禁
   止または許可することもできます。
      

 (ドメイン内ではなく) 1 台のコンピューター上でリモート処理をテストすることはできますか。

    はい、できます。Windows PowerShell リモート処理は、ローカル コンピューターがドメイン内にない場合で
    も使用可能です。リモート処理機能を使用して、同じコンピューター上のセッションに接続したり、同じコンピュ
    ーター上にセッションを作成したりできます。リモート処理機能は、リモート コンピューターに接続するときと同
    様に機能します。

    ワークグループ内のコンピューター上でリモート コマンドを実行するには、そのコンピューターで次の Windows 
    設定を変更します。

    注意: これらの設定はシステム上のすべてのユーザーに影響し、悪意のある攻撃に対するシステムの脆弱性が高ま
          る可能性があります。これらの変更を行う場合は、十分注意してください。


    --  Windows XP SP2:

        ローカル セキュリティ設定 (Secpol.msc) を使用して、[セキュリティの設定]、[ローカル ポリシー]、[セキ
        ュリティ オプション] の順に選択し、[ネットワーク アクセス: ローカル アカウントの共有とセキュリティ モ
        デル] ポリシーの設定を [クラシック] に変更します。


    --  Windows Vista:

        次のレジストリ エントリを作成し、その値を 1 に設定します。
        LocalAccountTokenFilterPolicy 
        (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System)

        このエントリを追加する際に次の Windows PowerShell コマンドを使用できます。

        new-itemproperty `
        –path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System `
        –name LocalAccountTokenFilterPolicy –propertyType DWord –value 1

    --  Windows 2003:

        [ネットワーク アクセス: ローカル アカウントの共有とセキュリティ モデル] ポリシーの既定の設定が [クラ
        シック] なので、変更の必要はありません。設定が変更されていないことを確認してください。


 別のドメインのコンピューター上でリモート コマンドを実行することはできますか。

    はい、できます。通常、コマンドは正常に実行されますが、Invoke-Command、New-PSSession、または 
    Enter-PSSession コマンドレットの Credential パラメーターを使用して、リモート コンピューターの 
    Administrators グループのメンバーの資格情報を提供しなければならない場合もあります。現在のユーザーがローカル 
    コンピューターおよびリモート コンピューターの Administrators グループのメンバーであっても、場合によってはこの
    資格情報を提供する必要があります。

    ただし、ローカル コンピューターが信頼するドメインにリモート コンピューターが属していない場合、リモート 
    コンピューターでユーザーの資格情報を認証できない場合があります。

    認証できるようにするには、次のコマンドを使用して、WinRM でローカル コンピューターの信頼されたホストの
    一覧にリモート コンピューターを追加します。
    Windows PowerShell プロンプトで次の形式のコマンドを入力します。

        set-item WSMan:\localhost\Client\TrustedHosts -value <Remote-computer-name>

    たとえば、ローカル コンピューターの信頼されたホストの一覧に Server01 コンピューターを追加するには、
    Windows PowerShell プロンプトで次のコマンドを入力します。

        set-item WSMan:\localhost\Client\TrustedHosts -value Server01


関連項目
    about_Remote
    about_Profiles
    about_PSSessions
    about_Remote_Jobs
    Invoke-Command
    New-PSSession




目次