PowerShell HelpFile - about_remote_FAQ
 記事記号:[me1569] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    about_Remote_FAQ

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


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

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

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

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

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

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


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

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

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


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

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

    保護を強化するために、HTTP の代わりに SSL (Secure Sockets Layer) を使用して 
    Windows Remote Management (WinRM) の要求をリッスンするようにリモート コンピ
    ューターを構成できます。さらに、ユーザーは、接続を確立する際に Invoke-Comman
    d、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 Powe
   rShell リモート処理機能が必要かどうかを確認するには、パラメーターの説明を参照
   してください。パラメーターの説明を表示するには、次の形式で入力します。

	get-help <cmdlet-name> -parameter ComputerName

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

        get-help get-process -parameter Computername

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


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

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

   コマンドは中かっこ ({}) で囲んで、スクリプト ブロックにします。また、Invoke-C
   ommand の 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 Power
    Shell は PSSession 用の固定接続を確立します。その後で、データを共有するコマ
    ンドを含め、複数のコマンドを PSSession で実行できます。

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

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


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

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

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

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

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


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

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

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

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

        invoke-command -session $s -filepath $profile


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

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


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

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

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



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

   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\<Us
   erName> です。Windows Server 2003 の場合、ホーム ディレクトリは通常は C:\Doc
   uments and Settings\<UserName> です。

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


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

   ただし、ほとんどのライブ オブジェクトはネットワークを介して送信できないので、
   Windows PowerShell は、リモート コマンドで送信されるほとんどのオブジェクトを 
   "シリアル化" します。つまり、各オブジェクトを転送用に一連の XML (CLiXML (Con
   straint 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-PSRemoting は、コンピューターの 
    Administrators グループのメンバーのみに構成の使用を許可する、セキュリティ
    記述子を設定します。
 
    セッション構成コマンドレットでは、既定のセッション構成の編集、新しいセッショ
    ン構成の作成、すべてのセッション構成のセキュリティ記述子の変更が可能です。

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

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

	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 のホスト、Window
   s 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-PS
    Session、または 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
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_remote_FAQ
ご利用数: 1857837
感想・要望・問い合わせは こちら