PowerShell Cmdlet - Invoke-Command
 記事記号:[mg1910] 初版:2011/Sep/30

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

名前
    Invoke-Command
    
概要
    ローカルとリモートのコンピューターでコマンドを実行します。
    
構文
    Invoke-Command [-ScriptBlock] <scriptblock> [[-ComputerName] <string[]>] [-A
    pplicationName <string>] [-AsJob] [-Authentication {Default | Basic | Negoti
    ate | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}] [-Cert
    ificateThumbprint <string>] [-ConfigurationName <string>] [-Credential <PSCr
    edential>] [-HideComputerName] [-JobName <string>] [-Port <int>] [-SessionOp
    tion <PSSessionOption>] [-ThrottleLimit <int>] [-UseSSL] [-ArgumentList <Obj
    ect[]>] [-InputObject <psobject>] [<CommonParameters>]
    
    Invoke-Command [-FilePath] <string> [[-ComputerName] <string[]>] [-Applicati
    onName <string>] [-AsJob] [-Authentication {Default | Basic | Negotiate | Ne
    gotiateWithImplicitCredential | Credssp | Digest | Kerberos}] [-Configuratio
    nName <string>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <
    string>] [-Port <int>] [-SessionOption <PSSessionOption>] [-ThrottleLimit <i
    nt>] [-UseSSL] [-ArgumentList <Object[]>] [-InputObject <psobject>] [<Common
    Parameters>]
    
    Invoke-Command [-FilePath] <string> [[-Session] <PSSession[]>] [-AsJob] [-Hi
    deComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-ArgumentList <O
    bject[]>] [-InputObject <psobject>] [<CommonParameters>]
    
    Invoke-Command [-FilePath] <string> [[-ConnectionURI] <Uri[]>] [-AllowRedire
    ction] [-AsJob] [-Authentication {Default | Basic | Negotiate | NegotiateWit
    hImplicitCredential | Credssp | Digest | Kerberos}] [-ConfigurationName <str
    ing>] [-Credential <PSCredential>] [-HideComputerName] [-JobName <string>] [
    -SessionOption <PSSessionOption>] [-ThrottleLimit <int>] [-ArgumentList <Obj
    ect[]>] [-InputObject <psobject>] [<CommonParameters>]
    
    Invoke-Command [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-Inp
    utObject <psobject>] [<CommonParameters>]
    
    Invoke-Command [-ScriptBlock] <scriptblock> [[-Session] <PSSession[]>] [-AsJ
    ob] [-HideComputerName] [-JobName <string>] [-ThrottleLimit <int>] [-Argumen
    tList <Object[]>] [-InputObject <psobject>] [<CommonParameters>]
    
    Invoke-Command [-ScriptBlock] <scriptblock> [[-ConnectionURI] <Uri[]>] [-All
    owRedirection] [-AsJob] [-Authentication {Default | Basic | Negotiate | Nego
    tiateWithImplicitCredential | Credssp | Digest | Kerberos}] [-CertificateThu
    mbprint <string>] [-ConfigurationName <string>] [-Credential <PSCredential>] 
    [-HideComputerName] [-JobName <string>] [-SessionOption <PSSessionOption>] [
    -ThrottleLimit <int>] [-ArgumentList <Object[]>] [-InputObject <psobject>] [
    <CommonParameters>]
    
説明
    Invoke-Command コマンドレットは、ローカル コンピューターまたはリモート コン
    ピューターでコマンドを実行し、エラーも含め、コマンドからのすべての出力を返し
    ます。単一の Invoke-Command コマンドを使用して、複数のコンピューターでコマン
    ドを実行できます。
    
    リモート コンピューターで単一のコマンドを実行するには、ComputerName パラメー
    ターを使用します。データを共有する一連の関連コマンドを実行するには、リモート 
    コンピューター上に PSSession (固定接続) を作成し、Invoke-Command の Session 
    パラメーターを使用して PSSession でコマンドを実行します。
    
    ローカル コンピューター上で Invoke-Command を使用して、スクリプト ブロックの
    文字列をコマンドとして評価または実行することもできます。Windows PowerShell 
    はスクリプト ブロックをコマンドに変換し、コマンド ラインに文字列のエコーを表
    示する代わりに、現在のスコープ内でコマンドを即座に実行します。
    
    Invoke-Command を使用してリモート コンピューターでコマンドを実行する前に、「
    about_Remote」を参照してください。
    
パラメーター
    -AllowRedirection [<SwitchParameter>]
        この接続を代替 URI にリダイレクトできます。
        
        ConnectionURI パラメーターを使用すると、リモートの配信先は別の URI にリ
        ダイレクトするための命令を返すことができます。既定では、Windows PowerShe
        ll は接続をリダイレクトしませんが、ユーザーは AllowRedirection パラメー
        ターを使用して接続のリダイレクトを許可できます。
        
        また、$PSSessionOption preference 変数の MaximumConnectionRedirectionCou
        nt property プロパティ、または SessionOption パラメーターの値の MaximumC
        onnectionRedirectionCount プロパティを設定することにより、接続をリダイレ
        クトする回数を制限することもできます。既定値は 5 です。詳細については、S
        essionOption パラメーターの説明と、New-PSSessionOption コマンドレットの
        ヘルプ トピックを参照してください。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -ApplicationName <string>
        接続 URI のアプリケーション名セグメントを指定します。ConnectionURI パラ
        メーターをコマンド内で使用しない場合は、このパラメーターを使用してアプリ
        ケーション名を指定します。
        
        既定値は、ローカル コンピューターの $PSSessionApplicationName ユーザー設
        定変数の値です。この設定変数を定義しない場合、既定値は WSMAN になります。
        この値はほとんどのユーザーに適しています。詳細については、「about_Prefer
        ence_Variables」を参照してください。
        
        WinRM サービスは、アプリケーション名を使用して接続要求を処理するリスナー
        を選択します。このパラメーターの値は、リモート コンピューターにあるリス
        ナーの URLPrefix プロパティの値と一致する必要があります。
        
        必須                         false
        位置                         named
        既定値                       WSMAN
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -ArgumentList <Object[]>
        コマンドのローカル変数の値を指定します。コマンドの変数は、リモート コン
        ピューターでのコマンドの実行前にこれらの値で置換されます。値をコンマ区切
        り一覧で入力します。値は、一覧されている順に変数に関連付けられます。Argu
        mentList のエイリアスは "Args" です。
        
        ArgumentList の値は、"1024" などの実際の値にすることも、"$max" などのロ
        ーカル変数の参照にすることもできます。
        
        コマンドでローカル変数を使用するには、次のコマンド形式を使用します。
        {param($<名前 1>[, $<名前 2>]...)<ローカル変数を持つコマンド>} -Argument
        List <値 | $ローカル変数>
        
        "param" キーワードには、コマンドで使用するローカル変数を列挙します。Argu
        mentList パラメーターには、変数を列挙した順にその値を指定します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -AsJob [<SwitchParameter>]
        リモート コンピューター上でバックグラウンド ジョブとしてコマンドを実行し
        ます。完了に時間のかかるコマンドを実行するには、このパラメーターを使用し
        ます。
        
        AsJob を使用すると、ジョブを表すオブジェクトが返され、その後コマンド プ
        ロンプトが表示されます。ジョブが完了しても、引き続きセッションで作業でき
        ます。ジョブを管理するには、Job コマンドレットを使用します。ジョブの結果
        を取得するには、Receive-Job を使用します。
        
        AsJob パラメーターの動作は、Invoke-Command を使用してリモートから Start-
        Job コマンドを実行する場合と似ています。ただし、AsJob では、ジョブは、リ
        モート コンピューターで実行されますが、ローカル コンピューターで作成され、
        リモート ジョブの結果が自動的にローカル コンピューターに返されます。
        
        Windows PowerShell のバックグラウンド ジョブの詳細については、「about_Jo
        bs」および「about_Remote_Jobs」を参照してください。
        
        必須                         false
        位置                         named
        既定値                       なし
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Authentication <AuthenticationMechanism>
        ユーザーの資格情報の認証に使用するメカニズムを指定します。有効な値は、De
        fault、Basic、Credssp、Digest、Kerberos、Negotiate、および NegotiateWith
        ImplicitCredential です。既定値は Default です。
        
        CredSSP 認証は、Windows Vista、Windows Server 2008、およびそれ以降のバー
        ジョンの Windows でのみ使用できます。
        
        このパラメーターの値の詳細については、MSDN で System.Management.Automati
        on.Runspaces.AuthenticationMechanism 列挙体の説明を参照してください。
        
        注意: ユーザーの資格情報が認証対象のリモート コンピューターに渡される、
        資格情報のセキュリティ サービス プロバイダー (CredSSP) 認証は、リモート 
        ネットワーク共有にアクセスする場合など、複数のリソースの認証を必要とする
        コマンドを対象としています。このメカニズムを使用すると、リモート操作のセ
        キュリティ リスクが高まります。リモート コンピューターのセキュリティが低
        下している場合は、そのリモート コンピューターに渡される資格情報を使用し
        てネットワーク セッションを制御できます。
        
        必須                         false
        位置                         named
        既定値                       Default
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -CertificateThumbprint <string>
        この処理を実行するアクセス許可を持つユーザー アカウントのデジタル公開キ
        ー証明書 (X509) を指定します。証明書の拇印を入力します。
        
        証明書は、クライアント証明書ベースの認証で使用されます。これらはローカル 
        ユーザー アカウントにのみマッピングできます。ドメイン アカウントでは機能
        しません。
        
        証明書の拇印を取得するには、Windows PowerShell Cert: ドライブで Get-Item 
        または Get-ChildItem コマンドを使用します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -ComputerName <string[]>
        コマンドが実行されるコンピューターを指定します。既定値はローカル コンピ
        ューターです。
        
        ComputerName パラメーターを使用すると、Windows PowerShell は、指定された
        コマンドを実行するためにのみ使用した後で閉じられる一時接続を作成します。
        固定接続が必要な場合、Session パラメーターを使用します。
        
        コンマ区切り一覧にある 1 台または複数のコンピューターの NETBIOS 名、IP 
        アドレス、または完全修飾ドメイン名を入力します。ローカル コンピューター
        を指定するには、コンピューター名、「localhost」、またはドット (.) を入力
        します。
        
        ComputerName パラメーターの値に IP アドレスを使用するには、コマンドに Cr
        edential パラメーターを含める必要があります。また、コンピューターが HTTP
        S トランスポート用に構成されているか、リモート コンピューターの IP アド
        レスがローカル コンピューター上の WinRM TrustedHosts リストに含まれてい
        る必要があります。コンピューター名を TrustedHosts リストに追加する方法に
        ついては、「about_Remote_Troubleshooting」の「How to Add a Computer to t
        he Trusted Host List (コンピューターを信頼されたホストの一覧に追加する方
        法)」を参照してください。
        
        注: Windows Vista 以降のバージョンの Windows で、ローカル コンピューター
        を ComputerName パラメーターの値に含めるには、Windows PowerShell を開く
        ときに [管理者として実行] を指定する必要があります。
        
        必須                         false
        位置                         1
        既定値                       
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -ConfigurationName <string>
        新しい PSSession に使用するセッション構成を指定します。
        
        構成名またはセッション構成の完全修飾リソース URI を入力します。構成名の
        みを指定すると、スキーマ URI "http://schemas.microsoft.com/powershell" 
        が先頭に付加されます。
        
        セッションのセッション構成は、リモート コンピューター上にあります。指定
        したセッション構成がリモート コンピューター上に存在しない場合、コマンド
        は失敗します。
        
        既定値は、ローカル コンピューターの $PSSessionConfigurationName ユーザー
        設定変数の値です。この設定変数を設定しない場合、既定値は Microsoft.Power
        Shell になります。詳細については、「about_preference_variables」を参照し
        てください。
        
        必須                         false
        位置                         named
        既定値                       http://Schemas.Microsoft.com/PowerShell/Mic
                                     rosoft.PowerShell
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -ConnectionURI <Uri[]>
        接続エンドポイントを定義する URI (Uniform Resource Identifier) を指定し
        ます。URI は完全修飾名でなければなりません。
        
        この文字列の形式は次のとおりです。
            <Transport>://<ComputerName>:<Port>/<ApplicationName>
        
        既定値は次のとおりです。
            http://localhost:80/WSMAN
        
        URI のトランスポート セグメントの有効な値は HTTP および HTTPS です。Conn
        ectionURI を指定しない場合、UseSSL、ComputerName、Port、および Applicati
        onName パラメーターを使用して URI 値を指定できます。
        
        対象のコンピューターが接続を別の URI にリダイレクトする場合、コマンドで 
        AllowRedirection パラメーターを使用しない限り、Windows PowerShell によっ
        てリダイレクトが防止されます。
        
        必須                         false
        位置                         1
        既定値                       http://localhost:80/wsman
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -Credential <PSCredential>
        この処理を実行するアクセス許可を持つユーザー アカウントを指定します。既
        定値は現在のユーザーです。
        
        "User01"、"Domain01\User01" などのユーザー名を入力するか、Get-Credential 
        コマンドレットで生成されるような PSCredential オブジェクトが含まれた変数
        を入力します。ユーザー名を入力すると、パスワードの入力を促すメッセージが
        表示されます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -FilePath <string>
        1 つまたは複数のリモート コンピューターで、指定されたローカル スクリプト
        を実行します。スクリプトのパスとファイル名を入力するか、パイプを使用して
        スクリプト パスを Invoke-Command に渡します。スクリプトは、ローカル コン
        ピューター上またはローカル コンピューターがアクセスできるディレクトリ内
        に保存されている必要があります。スクリプトのパラメーターの値を指定するに
        は、ArgumentList パラメーターを使用します。
        
        このパラメーターを使用すると、Windows PowerShell は、指定されたスクリプ
        ト ファイルの内容をスクリプト ブロックに変換し、そのスクリプト ブロック
        をリモート コンピューターに送信して、リモート コンピューター上で実行しま
        す。
        
        必須                         true
        位置                         2
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -HideComputerName [<SwitchParameter>]
        出力表示から各オブジェクトのコンピューター名を除外します。既定では、オブ
        ジェクトを生成したコンピューターの名前が画面に表示されます。
        
        このパラメーターは出力表示にのみ影響します。オブジェクトは変更されません。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -InputObject <psobject>
        コマンドへの入力を指定します。オブジェクトが格納されている変数を入力する
        か、オブジェクトを取得するコマンドまたは式を入力します。
        
        InputObject を使用する場合、ScriptBlock パラメーターの値に $input 自動変
        数を使用して入力オブジェクトを表します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   true (ByValue)
        ワイルドカード文字を許可する false
        
    -JobName <string>
        バックグラウンド ジョブのフレンドリ名を指定します。既定では、ジョブには 
        "Job<n>" という名前が付けられます。<n> は序数です。このパラメーターは、
        AsJob パラメーターと共に使用した場合にのみ有効です。
        
        コマンドで JobName パラメーターを使用し、コマンドをジョブとして実行した
        場合、コマンドに AsJob パラメーターを含めていなくても、Invoke-Command に
        よって、ジョブ オブジェクトが返されます。
        
        Windows PowerShell のバックグラウンド ジョブの詳細については、「about_Jo
        bs」を参照してください。
        
        必須                         false
        位置                         named
        既定値                       Job<n>
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Port <int>
        このコマンドで使用するリモート コンピューター上のネットワーク ポートを指
        定します。既定値はポート 80 (HTTP ポート) です。
        
        代替ポートを使用する前に、リモート コンピューター上でそのポートをリッス
        ンするための WinRM リスナーを構成する必要があります。リスナーを構成する
        には、Windows PowerShell プロンプトで次の 2 つのコマンドを入力します。
        
        remove-item -path wsman:\Localhost\listener\listener* -recurse
        new-item -path wsman:\Localhost\listener -Transport http -Address * -por
        t <port-number>
        
        必要がない限り、Port パラメーターを使用しないでください。コマンドに設定
        されたポートは、すべてのコンピューターまたはコマンドが実行されるセッショ
        ンに適用されます。代替ポート設定によって、すべてのコンピューターでのコマ
        ンドの実行が妨げられている可能性があります。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -ScriptBlock <scriptblock>
        実行するコマンドを指定します。コマンドを中かっこ ({ }) で囲み、スクリプ
        ト ブロックを作成します。このパラメーターは必須です。
        
        既定では、コマンドの変数はリモート コンピューターで評価されます。コマン
        ドにローカル変数を含めるには、ArgumentList パラメーターを使用します。
        
        必須                         true
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Session <PSSession[]>
        指定された Windows PowerShell セッション (PSSession) でコマンドを実行し
        ます。PSSessions を格納する変数を入力するか、New-PSSession コマンドや Ge
        t-PSSession コマンドなど、PSSessions を作成または取得するコマンドを入力
        します。
        
        PSSession を作成すると、Windows PowerShell はリモート コンピューターに対
        する固定接続を確立します。PSSession を使用して、データを共有する一連の関
        連コマンドを実行します。単一のコマンドまたは一連の関連のないコマンドを実
        行するには、ComputerName パラメーターを使用します。
        
        PSSession を作成するには、New-PSSession コマンドレットを使用します。詳細
        については、「about_PSSessions」を参照してください。
        
        必須                         false
        位置                         1
        既定値                       
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -SessionOption <PSSessionOption>
        セッションの詳細オプションを設定します。New-PSSessionOption コマンドレッ
        トを使用して作成する SessionOption オブジェクトを入力します。
        
        $PSSessionOption 設定変数の値が設定されている場合、オプションの既定値は
        この値によって決まります。それ以外の場合、セッションではシステムの既定値
        が使用されます。
        
        既定値を含め、セッション オプションの詳細については、New-PSSessionOption 
        コマンドレットのヘルプ トピックを参照してください。$PSSessionOption 設定
        変数の詳細については、「about_Preference_Variables」を参照してください。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -ThrottleLimit <int>
        このコマンドを実行するために確立できる最大同時接続数を指定します。このパ
        ラメーターを省略した場合、または値 0 を入力した場合は、既定値の 32 が使
        用されます。
        
        スロットル制限は現在のコマンドのみに適用され、セッションまたはコンピュー
        ターには適用されません。
        
        必須                         false
        位置                         named
        既定値                       32
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -UseSSL [<SwitchParameter>]
        Secure Sockets Layer (SSL) プロトコルを使用してリモート コンピューターと
        の接続を確立します。既定では、SSL は使用されません。
        
        WS-Management では、ネットワーク上で送信されるすべての Windows PowerShel
        l コンテンツが暗号化されます。UseSSL は、HTTP ではなく HTTPS を使用して
        データを送信する追加の保護機能です。
        
        このパラメーターを使用するが、コマンドに使用されるポートで SSL が利用で
        きない場合、コマンドは失敗します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。
    
入力
    System.Management.Automation.ScriptBlock
        パイプを使用してスクリプト ブロックのコマンドを Invoke-Command に渡すこ
        とができます。$input 自動変数を使用して、コマンドの入力オブジェクトを表
        します。
    
出力
    System.Management.Automation.PSRemotingJob または呼び出されたコマンドの出力
        AsJob パラメーターが使用された場合、Invoke-Command はジョブ オブジェクト
        を返します。それ以外の場合は、呼び出されたコマンドの出力 (ScriptBlock パ
        ラメーターの値) を返します。
    
メモ
        -- Windows Vista 以降のバージョンの Windows で、Invoke-Command の Comput
        erName パラメーターを使用してローカル コンピューターでコマンドを実行する
        には、Windows PowerShell を開くときに [管理者として実行] を指定する必要
        があります。
        
        -- 複数のコンピューターでコマンドを実行する場合、Windows PowerShell は一
        覧に示された順序でコンピューターに接続します。ただし、コマンドの出力はリ
        モート コンピューターから受信した順序で表示されるため、この順序と異なる
        場合があります。
        
        -- Invoke-Command により実行されるコマンドで発生したエラーは、コマンドの
        結果に含まれます。ローカル コマンドで終了エラーとなるエラーは、リモート 
        コマンドでは未終了エラーとして扱われます。この処理方法により、1 つのコン
        ピューター上の終了エラーによってコマンドが実行されるすべてのコンピュータ
        ーでコマンドが終了することが避けられます。この方法は、リモート コマンド
        を単一のコンピューターで実行する場合にも使用されます。
        
        -- ローカル コンピューターが信頼するドメインにリモート コンピューターが
        属していない場合は、コンピューターでユーザーの資格情報を認証できない場合
        があります。WS-Management の "信頼されたホスト" の一覧にリモート コンピ
        ューターを追加するには、WSMAN プロバイダーで次のコマンドを使用します。<R
        emote-Computer-Name> はリモート コンピューターの名前です。set-item -path 
        wsman:\Localhost\Client\TrustedHosts -value <Remote-Computer-Name>.
        
    -------------------------- 例 1 --------------------------
    
    C:\PS>invoke-command -filepath c:\scripts\test.ps1 -computerName Server01
    
    Disks: C:, D:, E:
    Status: Warning, Normal, Normal
    
    説明
    -----------
    このコマンドは、Server01 コンピューターで Test.ps1 スクリプトを実行します。
    
    このコマンドは FilePath パラメーターを使用して、ローカル コンピューターにあ
    るスクリプトを指定します。このスクリプトはリモート コンピューターで実行され、
    結果はローカル コンピューターに返されます。
    
    -------------------------- 例 2 --------------------------
    
    C:\PS>invoke-command -computername server01 -credential domain01\user01 -scr
    iptblock {get-culture}
    
    説明
    -----------
    このコマンドは、Server01 リモート コンピューターで Get-Culture コマンドを実
    行します。
    
    このコマンドは、ComputerName パラメーターを使用してコンピューター名を指定し、
    Credential パラメーターを使用してコマンドの実行権限のあるユーザー "Domain01\
    User01" のセキュリティ コンテキストでコマンドを実行します。また、ScriptBlock 
    パラメーターを使用して、リモート コンピューターで実行するコマンドを指定しま
    す。
    
    応答として、Windows PowerShell は、User01 アカウントのパスワードと認証方法を
    要求するダイアログ ボックスを表示します。その後、Server01 コンピューターでコ
    マンドを実行して、その結果を返します。
    
    -------------------------- 例 3 --------------------------
    
    C:\PS>$s = new-pssession -computername server02 -credential domain01\user01
    
    C:\PS> invoke-command -session $s -scriptblock {get-culture}
    
    説明
    -----------
    この例では、Server02 リモート コンピューターのセッション (固定接続) で同じ "
    Get-Culture" コマンドを実行します。通常、セッションは、リモート コンピュータ
    ーで一連のコマンドを実行する場合にのみ作成します。
    
    最初のコマンドは、New-PSSession コマンドレットを使用して Server02 リモート 
    コンピューターでセッションを作成します。次に、そのセッションを $s 変数に保存
    します。
    
    2 番目のコマンドは、Invoke-Command コマンドレットを使用して、Server02 上で G
    et-Culture コマンドを実行します。このコマンドは、Session パラメーターを使用
    して、$s 変数に保存されたセッションを指定します。
    
    応答として、Windows PowerShell は Server02 コンピューター上のセッションでコ
    マンドを実行します。
    
    -------------------------- 例 4 --------------------------
    
    C:\PS>invoke-command -computername Server02 -scriptblock {$p = get-process p
    owershell}
    
    C:\PS> invoke-command -computername Server02 -scriptblock {$p.virtualmemorys
    ize}
    C:\PS>
    
    C:\PS> $s = new-pssession -computername Server02
    C:\PS> invoke-command -session $s -scriptblock {$p = get-process powershell}
    C:\PS> invoke-command -session $s -scriptblock {$p.virtualmemorysize}
    17930240
    
    説明
    -----------
    この例は、Invoke-Command の ComputerName パラメーターと Session パラメーター
    を使用した結果を比較しています。また、同じデータを共有する一連のコマンドを実
    行するためにセッションを使用する方法を示しています。
    
    最初の 2 つのコマンドは、Invoke-Command の ComputerName パラメーターを使用し
    て、Server02 リモート コンピューター上でコマンドを実行します。最初のコマンド
    は、Get-Process コマンドを使用して、リモート コンピューターの PowerShell プ
    ロセスを取得して $p 変数に保存します。2 番目のコマンドは、PowerShell プロセ
    スの VirtualMemorySize プロパティの値を取得します。
    
    最初のコマンドは成功しますが、2 番目のコマンドは失敗します。ComputerName パ
    ラメーターが使用された場合、Windows PowerShell はコマンドを実行するためにの
    み接続を作成するからです。コマンドが完了すると、接続を閉じます。$p 変数は 1 
    つの接続に作成されていますが、2 番目のコマンド用に作成された接続には存在しま
    せん。
    
    この問題を解決するには、リモート コンピューターにセッション (持続的な接続) 
    を作成し、そのセッションで両方の関連コマンドを実行します。
    
    3 番目のコマンドは、New-PSSession コマンドレットを使用して Server02 コンピ
    ューターでセッションを作成します。次に、そのセッションを $s 変数に保存します。
    4 番目と 5 番目のコマンドは、最初のセットで使用した一連のコマンドを繰り返し
    ますが、この場合、Invoke-Command コマンドは Session パラメーターを使用して、
    同じセッションで両方のコマンドを実行します
    
    この場合、同じセッションで両方のコマンドが実行されるため、コマンドは正常に実
    行され、$p の値は後で使用できるように $s セッションでアクティブのままになり
    ます。
    
    -------------------------- 例 5 --------------------------
    
    C:\PS>$command = { get-eventlog -log "windows powershell" | where {$_.messag
    e -like "*certificate*"} }
    
    C:\PS> invoke-command -computername S1, S2 -scriptblock $command
    
    説明
    -----------
    この例は、ローカル変数に保存するコマンドの入力方法を示しています。
    
    ローカル変数にコマンド全体が保存されている場合、その変数を ScriptBlock パラ
    メーターの値として指定することができます。ローカル変数の値を送信するために "
    param" キーワードまたは ArgumentList 変数を使用する必要はありません。
    
    最初のコマンドは、Get-Eventlog コマンドを $command 変数に保存します。コマン
    ドはスクリプト ブロックとして書式設定されます。
    
    2 番目のコマンドは、Invoke-Command コマンドレットを使用して、S1 および S2 リ
    モート コンピューターで $command のコマンドを実行します。
    
    -------------------------- 例 6 --------------------------
    
    C:\PS>invoke-command -computername server01, server02, TST-0143, localhost -
    configurationname MySession.PowerShell -scriptblock {get-eventlog "windows p
    owershell"}    
    
    説明
    -----------
    この例は、Invoke-Command コマンドレットを使用して、複数のコンピューター上で
    単一のコマンドを実行する方法を示しています。
    
    このコマンドは、ComputerName パラメーターを使用してコンピューターを指定しま
    す。コンピューター名はコンマ区切り一覧で指定します。コンピューターの一覧には、
    ローカル コンピューターを表す "localhost" 値が含まれます。
    
    このコマンドは、Windows PowerShell の代替セッション構成の指定には Configurat
    ionName パラメーターを、コマンドの指定には ScriptBlock パラメーターをそれぞ
    れ使用します。
    
    この例で、スクリプト ブロック内のコマンドは、各リモート コンピューター上の W
    indows PowerShell イベント ログのイベントを取得します。
    
    -------------------------- 例 7 --------------------------
    
    C:\PS>$version = invoke-command -computername (get-content machines.txt) -sc
    riptblock {(get-host).version}
    
    説明
    -----------
    このコマンドは、200 台のリモート コンピューターで実行中の Windows PowerShell 
    ホストのバージョンを取得します。
    
    1 つのコマンドのみが実行されているため、各コンピューターへの固定接続 (セッシ
    ョン) を作成する必要はありません。代わりに、このコマンドは ComputerName パラ
    メーターを使用してコンピューターを指定します。
    
    このコマンドは、Invoke-Command コマンドレットを使用して Get-Host コマンドを
    実行します。また、ドット表記を使用して、Windows PowerShell ホストの Version 
    プロパティを取得します。
    
    このコマンドは、Get-Content コマンドレットを使用して Machine.txt ファイル (
    コンピューター名のファイル) の内容を取得し、コンピューターを指定します。
    
    これらのコマンドは同期して (一度に 1 つずつ) 実行されます。コマンドが完了す
    ると、すべてのコンピューターからのコマンドの出力が変数 $version に保存されま
    す。出力には、データの生成元のコンピューター名が含まれています。
    
    -------------------------- 例 8 --------------------------
    
    C:\PS>$s = new-pssession -computername Server01, Server02
    
    C:\PS> invoke-command -session $s -scriptblock {get-eventlog system} -AsJob
    
    Id   Name    State      HasMoreData   Location           Command
    ---  ----    -----      -----         -----------        --------            
    1    Job1    Running    True          Server01,Server02  get-eventlog system
    
    C:\PS> $j = Get-Job
    
    C:\PS> $j | format-list -property *
    
    HasMoreData   : True
    StatusMessage :
    Location      : Server01,Server02
    Command       : get-eventlog system
    JobStateInfo  : Running
    Finished      : System.Threading.ManualResetEvent
    InstanceId    : e124bb59-8cb2-498b-a0d2-2e07d4e030ca
    Id            : 1
    Name          : Job1
    ChildJobs     : {Job2, Job3}
    Output        : {}
    Error         : {}
    Progress      : {}
    Verbose       : {}
    Debug         : {}
    Warning       : {}
    StateChanged  :
    
    C:\PS> $results = $j | Receive-Job
    
    説明
    -----------
    これらのコマンドは、2 台のリモート コンピューターでバックグラウンド ジョブを
    実行します。Invoke-Command コマンドは AsJob パラメーターを使用するため、コマ
    ンドはリモート コンピューターで実行しますが、実際にはジョブはローカル コンピ
    ューターに存在し、結果はローカル コンピューターに送信されます。
    
    最初のコマンドは、New-PSSession コマンドレットを使用して、Server01 リモート 
    コンピューターと Server02 リモート コンピューターでセッションを作成します。
    
    2 番目のコマンドは、Invoke-Command コマンドレットを使用して、各セッションで
    バックグラウンド ジョブを実行します。また、AsJob パラメーターを使用して、バ
    ックグラウンド ジョブとしてコマンドを実行します。このコマンドは、2 台のリモ
    ート コンピューター上でそれぞれ実行されるジョブに対応する 2 つの子ジョブ オ
    ブジェクトを含むジョブ オブジェクトを返します。
    
    3 番目のコマンドは、Get-Job コマンドレットを使用して、$j 変数にジョブ オブジ
    ェクトを保存します。
    
    4 番目のコマンドは、パイプライン演算子 (|) を使用して $j 変数の値を Format-L
    ist コマンドレットに送ります。これにより、ジョブ オブジェクトのすべてのプロ
    パティが一覧表示されます。
    
    5 番目のコマンドは、ジョブの結果を取得します。このコマンドは、パイプを使用し
    て $j のジョブ オブジェクトを Receive-Job コマンドレットに渡し、その結果を $
    results 変数に保存します。
    
    -------------------------- 例 9 --------------------------
    
    C:\PS>$MWFO-LOg = Microsoft-Windows-Forwarding/Operational
    
    C:\PS> invoke-command -computername server01 -scriptblock {param($log, $num) 
    get-eventlog -logname $log -newest $num} -ArgumentList $MWFO-log, 10
    
    説明
    -----------
    この例は、リモート コンピューターで実行されるコマンドにローカル変数の値を含
    める方法を示しています。
    
    最初のコマンドは、Microsoft-Windows-Forwarding/Operational イベント ログの名
    前を $MWFO-Log 変数に保存します。
    
    2 番目のコマンドは、Invoke-Command コマンドレットを使用して、Server01 リモー
    ト コンピューターで Get-EventLog コマンドを実行します。このコマンドは、Serve
    r01 上の Microsoft-Windows-Forwarding/Operational イベント ログから最新のイ
    ベント 10 件を取得します。
    
    このコマンドは "param" キーワードを使用して、2 つの変数 $log と $num を作成
    します。これらの変数は、Get-EventLog コマンドでプレースホルダーとして使用さ
    れます。これらのプレースホルダーの名前は、値を提供するローカル変数の名前に一
    致する必要はなく、任意の名前を使用できます。
    
    ArgumentList パラメーターの値は、引数一覧の値を指定する 2 つの異なる方法を示
    します。$log プレースホルダーの値は $MFWO-Log 変数です。この変数は最初のコマ
    ンドで定義されます。$num 変数の値は 10 です。
    
    コマンドがリモート コンピューターに送信される前に、変数は指定された値で置換
    されます。
    
    -------------------------- 例 10 --------------------------
    
    C:\PS>invoke-command -computername S1, S2 -scriptblock {get-process powershe
    ll} 
    
    PSComputerName  Handles  NPM(K)  PM(K)  WS(K) VM(M)  CPU(s)  Id   ProcessName
    --------------  -------  ------  -----  ----- -----  ------  --   -----------
    S1              575      15      45100  40988   200    4.68  1392 powershell
    S2              777      14      35100  30988   150    3.68  67   powershell
    
    C:\PS> invoke-command -computername S1, S2 -scriptblock {get-process powersh
    ell} -HideComputerName
    
    Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id   ProcessName
    -------  ------    -----      ----- -----   ------     --   -----------
    575      15        45100      40988   200     4.68     1392 powershell
    777      14        35100      30988   150     3.68     67   powershell
    
    説明
    -----------
    この例は、Invoke-Command の HideComputerName パラメーターを使用した結果を示
    しています。
    
    最初の 2 つのコマンドは、Invoke-Command コマンドレットを使用して、PowerShell 
    プロセスに対して Get-Process コマンドを実行します。最初のコマンドの出力には、
    コマンドが実行されたコンピューターの名前を格納した PsComputerName プロパティ
    が含まれています。HideComputerName パラメーターを使用する 2 番目のコマンドの
    出力には、PsComputerName 列は含まれていません。
    
    HideComputerName パラメーターを使用すると、オブジェクトは変更されません。影
    響を受けるいずれかのオブジェクトの PsComputerName プロパティを表示するために、
    Format コマンドレットを使用することもできます。
    
    -------------------------- 例 11 --------------------------
    
    C:\PS>invoke-command -comp (get-content servers.txt) -filepath c:\scripts\sa
    mple.ps1 -argumentlist Process, Service
    
    説明
    -----------
    この例では、Invoke-Command コマンドレットを使用して、Servers.txt ファイルに
    示されているすべてのコンピューター上で Sample.ps1 スクリプトを実行します。こ
    のコマンドは、FilePath パラメーターを使用してスクリプト ファイルを指定します。
    このコマンドを使用すると、スクリプト ファイルがリモート コンピューターにアク
    セスできない場合でも、リモート コンピューターでスクリプトを実行することがで
    きます。
    
    このコマンドを送信すると、Sample.ps1 ファイルの内容がスクリプト ブロックにコ
    ピーされ、スクリプト ブロックが各リモート コンピューターで実行されます。この
    手順は、ScriptBlock パラメーターを使用してスクリプトの内容を送信した場合と同
    じです。
    
    -------------------------- 例 12 --------------------------
    
    C:\PS>$LiveCred = Get-Credential
    
    C:\PS> Invoke-Command -ConfigurationName Microsoft.Exchange `
             -ConnectionUri https://ps.exchangelabs.com/powershell `
             -Credential $LiveCred  -Authentication Basic `
             -scriptblock {Invoke-Command {Set-Mailbox dan -DisplayName "Dan Par
             k"}
    
    説明
    -----------
    この例は、URI (インターネット アドレス) によって識別されるリモート コンピュ
    ーターでコマンドを実行する方法を示しています。この例では、リモートの Exchang
    e サーバーで Set-Mailbox コマンドを実行します。コマンドのバッククォート文字 
    (`) は、Windows PowerShell の連結文字です。
    
    最初のコマンドは、Get-Credential コマンドレットを使用して、Windows Live ID 
    の資格情報を $LiveCred 変数に保存します。資格情報ダイアログ ボックスが表示さ
    れたら、Windows Live ID の資格情報を入力します。
    
    2 番目のコマンドは、Invoke-Command コマンドレットを使用して Set-Mailbox コマ
    ンドを実行します。このコマンドは、ConfigurationName パラメーターを使用して、
    Microsoft.Exchange セッション構成を使用したセッションでコマンドを実行するよ
    うに指定します。ConnectionURI パラメーターは、Exchange サーバーのエンドポイ
    ントの URL を指定します。
    
    資格情報パラメーターは、$LiveCred 変数に保存されている Windows Live の資格情
    報を指定します。AuthenticationMechanism パラメーターは、基本認証の使用を指定
    します。ScriptBlock パラメーターは、コマンドが含まれるスクリプト ブロックを
    指定します。
    
    -------------------------- 例 13 --------------------------
    
    C:\PS>$max = New-PSSessionOption -MaximumRedirection 1
    
    C:\PS> Invoke-Command -ConnectionUri https://ps.exchangelabs.com/powershell `
             -scriptblock {Invoke-Command {Get-Mailbox dan} `
             -AllowRedirection -SessionOption $max
    
    説明
    -----------
    この例は、AllowRedirection パラメーターと SessionOption パラメーターを使用し
    て、リモートのコマンドで URI リダイレクトを管理する方法を示しています。
    
    最初のコマンドは New-PSSessionOption コマンドレットを使用して、$max 変数に保
    存する PSSessionOpption オブジェクトを作成します。このコマンドは MaximumRedi
    rection パラメーターを使用して、PSSessionOption オブジェクトの MaximumConnec
    tionRedirectionCount プロパティを 1 に設定します。
    
    2 番目のコマンドは、Invoke-Command コマンドレットを使用して、Microsoft Excha
    nge Server を実行しているリモート サーバーで Get-Mailbox コマンドを実行しま
    す。このコマンドは、AllowRedirection パラメーターを使用して、代替エンドポイ
    ントへ接続をリダイレクトするための明示的な許可を提供します。また、SessionOpt
    ion パラメーターを使用して、$max 変数内のセッション オブジェクトも指定します。
    
    その結果、ConnectionURI パラメーターによって指定されたリモート コンピュータ
    ーがリダイレクト メッセージを返すと Windows PowerShell は接続をリダイレクト
    しますが、新しい接続先が別のリダイレクト メッセージを返すとリダイレクト回数
    の値が 1 を超え、Invoke-Command によって未終了エラーが返されます。
    
    -------------------------- 例 14 --------------------------
    
    C:\PS>$so = New-PSSessionOption -SkipCACheck
    
    PS C:\> invoke-command $s { get-hotfix } -SessionOption $so -credential serv
    er01\user01
    
    説明
    -----------
    この例は、SessionOption パラメーターの作成方法と使用方法を示しています。
    
    最初のコマンドは、New-PSSessionOption コマンドレットを使用してセッションのオ
    プションを作成します。このコマンドは、結果の SessionOption オブジェクトを $s
    o パラメーターに保存します。
    
    2 番目のコマンドは、Invoke-Command コマンドレットを使用して、リモートから Ge
    t-Hotfix コマンドを実行します。SessionOption パラメーターの値は、$so 変数の 
    SessionOption オブジェクトです。
    
    -------------------------- 例 15 --------------------------
    
    C:\PS>enable-wsmanCredSSP -delegate server02
    
    C:\PS> connect-wsman Server02
    
    C:\PS> set-item wsman:\server02*\service\auth\credSSP -value $true
    
    C:\PS> $s = new-pssession server02
    
    C:\PS> invoke-command -session $s -script {get-item \\Net03\Scripts\LogFiles
    .ps1} -authentication credssp -credential domain01\admin01
    
    説明
    -----------
    この例は、リモート セッション内からネットワーク共有にアクセスする方法を示し
    ています。
    
    このコマンドを使用するには、ローカル コンピューターのクライアント設定とリモ
    ート コンピューターのサービス設定で CredSSP 委任を有効にする必要があります。
    この例のコマンドを実行するには、ローカル コンピューターとリモート コンピュー
    ターで Administrators グループのメンバーであることが必要です。
    
    最初のコマンドは Enable-WSManCredSSP コマンドレットを使用して、Server01 ロー
    カル コンピューターから Server02 リモート コンピューターへの CredSSP 委任を
    有効にします。これによってローカル コンピューターに CredSSP クライアント設定
    が構成されます。
    
    2 番目のコマンドは、Connect-WSMan コマンドレットを使用して Server02 コンピュ
    ーターに接続します。この操作によって、Server02 コンピューターのノードがロー
    カル コンピューターの WSMan: ドライブに追加されるので、Server02 コンピュータ
    ーで WS-Management の設定の表示と変更が可能になります。
    
    3 番目のコマンドは、Set-Item コマンドレットを使用して Server02 コンピュータ
    ーの Service ノードの CredSSP 項目の値を True に変更します。この操作によって、
    リモート コンピューターのサービス設定で CredSSP が有効になります。
    
    4 番目のコマンドは、New-PSSession コマンドレットを使用して Server02 コンピュ
    ーターで PSSession セッションを作成します。PSSession は $s 変数に保存されま
    す。
    
    5 番目のコマンドは、Invoke-Command コマンドレットを使用して $s のセッション
    で Get-Item コマンドを実行し、Net03\Scripts ネットワーク共有からスクリプトを
    取得します。このコマンドは Credential パラメーターを使用し、CredSSP という値
    と共に Authentication パラメーターを使用します。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=135225
    about_Remote 
    about_PSSessions 
    New-PSSession 
    Get-PSSession 
    Remove-PSSession 
    Enter-PSSession 
    Exit-PSSession 
    WS-Management Provider 
    	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Cmdlet、Invoke-Command
ご利用数: 1975407
感想・要望・問い合わせは こちら