次の方法で共有


Invoke-Command

ローカル コンピューターおよびリモート コンピューター上でコマンドを実行します。

構文

Invoke-Command
      [-ScriptBlock] <ScriptBlock>
      [-NoNewScope]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-Session] <PSSession[]>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      [[-ComputerName] <String[]>]
      [-Credential <PSCredential>]
      [-Port <Int32>]
      [-UseSSL]
      [-ConfigurationName <String>]
      [-ApplicationName <String>]
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-InDisconnectedSession]
      [-SessionName <String[]>]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-ScriptBlock] <ScriptBlock>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-CertificateThumbprint <String>]
      [<CommonParameters>]
Invoke-Command
      [-Credential <PSCredential>]
      [-ConfigurationName <String>]
      [-ThrottleLimit <Int32>]
      [[-ConnectionUri] <Uri[]>]
      [-AsJob]
      [-InDisconnectedSession]
      [-HideComputerName]
      [-JobName <String>]
      [-FilePath] <String>
      [-AllowRedirection]
      [-SessionOption <PSSessionOption>]
      [-Authentication <AuthenticationMechanism>]
      [-EnableNetworkAccess]
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMGuid] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-ScriptBlock] <ScriptBlock>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      [-VMGuid] <Guid[]>
      [<CommonParameters>]
Invoke-Command
      -Credential <PSCredential>
      [-ThrottleLimit <Int32>]
      [-AsJob]
      [-HideComputerName]
      [-FilePath] <String>
      [-InputObject <PSObject>]
      [-ArgumentList <Object[]>]
      -VMName <String[]>
      [<CommonParameters>]

説明

コマンドレットは Invoke-Command 、ローカル コンピューターまたはリモート コンピューターでコマンドを実行し、エラーを含むコマンドからすべての出力を返します。 1 つの Invoke-Command コマンドを使用して、複数のコンピューターでコマンドを実行できます。

リモート コンピューターで 1 つのコマンドを実行するには、ComputerName パラメーターを使用します。 データを共有する一連の関連コマンドを実行するには、 コマンドレットをNew-PSSession使用してリモート コンピューターに PSSession (永続的な接続) を作成し、 の Invoke-CommandSession パラメーターを使用して PSSession でコマンドを実行します。 切断されたセッションのコマンドを実行するには、InDisconnectedSession パラメーターを使用します。 コマンドをバックグラウンド ジョブとして実行するには、AsJob パラメーターを使用します。

また、ローカル コンピューターで をコマンドとしてスクリプト ブロックに使用 Invoke-Command することもできます。 PowerShell は、現在のスコープの子スコープでスクリプト ブロックを直ちに実行します。

を使用して Invoke-Command リモート コンピューターでコマンドを実行する前に、「 about_Remote」を参照してください。

一部のコード サンプルでは、スプラッティングを使用して行の長さを短くします。 詳細については、「 about_Splatting」を参照してください。

例 1: サーバーでスクリプトを実行する

次の使用例は、 Test.ps1 Server01 コンピューターでスクリプトを実行します。

Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01

FilePath パラメーターは、ローカル コンピューター上にあるスクリプトを指定します。 このスクリプトは、リモート コンピューターで実行され、結果はローカル コンピューターに返されます。

例 2: リモート サーバーでコマンドを実行する

次の使用例は、 Get-Culture Server01 リモート コンピューターでコマンドを実行します。

Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock { Get-Culture }

ComputerName パラメーターは、リモート コンピューターの名前を指定します。 Credential パラメーターは、コマンドを実行するアクセス許可を持つユーザーである Domain01\User01 のセキュリティ コンテキストでコマンドを実行するために使用されます。 ScriptBlock パラメーターは、リモート コンピューターで実行するコマンドを指定します。

これに対して、PowerShell は User01 アカウントのパスワードと認証方法を要求します。 次に、Server01 コンピューターでコマンドを実行して結果を返します。

例 3: 永続的な接続でコマンドを実行する

この例では、Server02 という名前のリモート コンピューターで、永続的な接続を使用してセッションで同じ Get-Culture コマンドを実行します。

$s = New-PSSession -ComputerName Server02 -Credential Domain01\User01
Invoke-Command -Session $s -ScriptBlock {Get-Culture}

コマンドレットは New-PSSession 、Server02 リモート コンピューターにセッションを作成し、 変数に $s 保存します。 通常、セッションは、リモート コンピューターで一連のコマンドを実行する場合にのみ作成します。

このコマンドレットは Invoke-CommandGet-Culture Server02 でコマンドを実行します。 Session パラメーターは、 変数に保存されたセッションを$s指定します。

応答として、PowerShell は Server02 コンピューター上のセッションで コマンドを実行します。

例 4: セッションを使用して、データを共有する一連のコマンドを実行する

この例では、 の ComputerName パラメーターと Session パラメーターを使用した場合の効果を Invoke-Command比較します。 セッションを使用して、同じデータを共有する一連のコマンドを実行する方法を示しています。

Invoke-Command -ComputerName Server02 -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -ComputerName Server02 -ScriptBlock {$p.VirtualMemorySize}
$s = New-PSSession -ComputerName Server02
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -Session $s -ScriptBlock {$p.VirtualMemorySize}

17930240

最初の 2 つのコマンドでは、 の ComputerName パラメーター Invoke-Command を使用して、Server02 リモート コンピューターでコマンドを実行します。 最初のコマンドでは、 コマンドレットを Get-Process 使用して、リモート コンピューター上の PowerShell プロセスを取得し、変数に $p 保存します。 2 番目のコマンドは、PowerShell プロセスの VirtualMemorySize プロパティの値を取得します。

ComputerName パラメーターを使用すると、PowerShell によってコマンドを実行するための新しいセッションが作成されます。 コマンドが完了すると、セッションは閉じられます。 変数は $p 1 つの接続で作成されましたが、2 番目のコマンド用に作成された接続には存在しません。

この問題は、リモート コンピューターに永続的なセッションを作成し、両方のコマンドを同じセッションで実行することで解決されます。

コマンドレットは New-PSSession 、コンピューター Server02 に永続的なセッションを作成し、そのセッションを 変数に $s 保存します。 次の行ではInvoke-Command、Session パラメーターを使用して、同じセッションで両方のコマンドを実行します。 両方のコマンドが同じセッションで実行されるため、値は $p アクティブなままです。

例 5: ローカル変数に格納されているコマンドを入力する

この例では、ローカル変数にスクリプト ブロックとして格納されるコマンドを作成する方法を示します。 スクリプト ブロックをローカル変数に保存する場合は、 ScriptBlock パラメーターの値として変数を指定できます。

$command = { Get-EventLog -LogName "Windows PowerShell" |
  Where-Object {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

変数には $commandGet-EventLog スクリプト ブロックとして書式設定されたコマンドが格納されます。 は Invoke-Command 、S1 および S2 リモート コンピューターに格納されている $command コマンドを実行します。

例 6: 複数のコンピューターで 1 つのコマンドを実行する

この例では、 を使用 Invoke-Command して複数のコンピューターで 1 つのコマンドを実行する方法を示します。

$parameters = @{
  ComputerName = "Server01", "Server02", "TST-0143", "localhost"
  ConfigurationName = 'MySession.PowerShell'
  ScriptBlock = { Get-EventLog "Windows PowerShell" }
}
Invoke-Command @parameters

ComputerName パラメーターは、コンピューター名のコンマ区切りの一覧を指定します。 コンピューターの一覧には、ローカル コンピューターを表す localhost 値が含まれています。 ConfigurationName パラメーターは、代替セッション構成を指定します。 ScriptBlock パラメーターを実行Get-EventLogして、各コンピューターからWindows PowerShellイベント ログを取得します。

例 7: 複数のコンピューター上のホスト プログラムのバージョンを取得する

この例では、200 台のリモート コンピューターで実行されている PowerShell ホスト プログラムのバージョンを取得します。

$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {(Get-Host).Version}

コマンドは 1 つだけ実行されるため、各コンピューターへの永続的な接続を作成する必要はありません。 ただし、ComputerName パラメーターを使用してコンピューターを指定します。 コンピューターを指定するために、 コマンドレットを Get-Content 使用して、コンピューター名のファイルである Machine.txt ファイルの内容を取得します。

コマンドレットは Invoke-CommandGet-Host リモート コンピューターでコマンドを実行します。 ドット表記を使用して、PowerShell ホストの Version プロパティを取得します。

これらのコマンドは一度に 1 つずつ実行されます。 コマンドが完了すると、すべてのコンピューターからのコマンドの出力が 変数に $version 保存されます。 出力には、データの発生元であるコンピューターの名前も含まれます。

例 8: 複数のリモート コンピューターでバックグラウンド ジョブを実行する

次の使用例は、2 台のリモート コンピューターでコマンドを実行します。 コマンドは Invoke-CommandAsJob パラメーターを使用して、コマンドがバックグラウンド ジョブとして実行されるようにします。 コマンドはリモート コンピューターで実行されますが、ジョブはローカル コンピューターに存在します。 結果はローカル コンピューターに送信されます。

$s = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $s -ScriptBlock {Get-EventLog system} -AsJob

Id   Name    State      HasMoreData   Location           Command
---  ----    -----      -----         -----------        ---------------
1    Job1    Running    True          Server01,Server02  Get-EventLog system

$j = Get-Job
$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  :

$results = $j | Receive-Job

このコマンドレットは New-PSSession 、Server01 および Server02 リモート コンピューターにセッションを作成します。 コマンドレットは Invoke-Command 、各セッションでバックグラウンド ジョブを実行します。 このコマンドは AsJob パラメーターを使用して、バックグラウンド ジョブとしてコマンドを実行します。 このコマンドは、2 台のリモート コンピューターでそれぞれ実行されるジョブに対応する 2 つの子ジョブ オブジェクトを含むジョブ オブジェクトを返します。

コマンドは Get-Job 、ジョブ オブジェクトを 変数に $j 保存します。 その後、変数は $j コマンドレットに Format-List パイプ処理され、ジョブ オブジェクトのすべてのプロパティが一覧に表示されます。 最後のコマンドは、ジョブの結果を取得します。 ジョブ オブジェクト $j を コマンドレットに Receive-Job パイプ処理し、結果を 変数に $results 格納します。

例 9: リモート コンピューターで実行するコマンドにローカル変数を含める

この例は、リモート コンピューターで実行されるコマンドにローカル変数の値を含める方法を示しています。 コマンドは、スコープ修飾子を Using 使用して、リモート コマンド内のローカル変数を識別します。 既定では、すべての変数は、リモート セッションで定義されると見なされます。 スコープ修飾子は Using 、PowerShell 3.0 で導入されました。 スコープ修飾子の Using 詳細については、「 about_Remote_Variablesabout_Scopes」を参照してください。

$Log = "Windows PowerShell"
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-EventLog -LogName $Using:Log -Newest 10 }

変数には$Log、イベント ログの名前 (Windows PowerShell) が格納されます。 コマンドレットは Invoke-Command Server01 で実行され Get-EventLog 、イベント ログから最新の 10 個のイベントを取得します。 LogName パラメーターの値は $Log 変数です。変数の前にはスコープ修飾子が付Usingき、リモート セッションではなくローカル セッションで作成されたことを示します。

例 10: コンピューター名を非表示にする

この例では、 の HideComputerName パラメーターを使用した場合の Invoke-Command効果を示します。 HideComputerName では、このコマンドレットが返すオブジェクトは変更されません。 表示のみを変更します。 Format コマンドレットを 使用しても、影響を受けるオブジェクトの PsComputerName プロパティを表示できます。

Invoke-Command -ComputerName S1, S2 -ScriptBlock {Get-Process PowerShell}

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

Invoke-Command -ComputerName S1, S2 -ScriptBlock {Get-Process PowerShell} -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

最初の 2 つのコマンドは、 を使用 Invoke-Command して PowerShell プロセスのコマンドを実行 Get-Process します。 最初のコマンドの出力には、PsComputerName プロパティが含まれます。このプロパティは、コマンドが実行されているコンピューター名を示します。 HideComputerName を使用する 2 番目のコマンドの出力には、PsComputerName 列は含まれません。

例 11: スクリプト ブロックで Param キーワード (keyword)を使用する

Param キーワード (keyword)と ArgumentList パラメーターは、スクリプト ブロック内の名前付きパラメーターに変数値を渡すために使用されます。 次の使用例は、文字 a で始まり拡張子を持つファイル名を .pdf 表示します。

キーワード (keyword)のParam詳細については、「about_Language_Keywords」を参照してください。

$parameters = @{
    ComputerName = "Server01"
    ScriptBlock = { Param ($param1,$param2) Get-ChildItem -Name $param1 -Include $param2 }
    ArgumentList = "a*", "*.pdf"
}
Invoke-Command @parameters

aa.pdf
ab.pdf
ac.pdf
az.pdf

Invoke-Commandでは、 と という 2 つの変数$param1を定義する ScriptBlock パラメーターを$param2使用します。 Get-ChildItem では、名前付きパラメーター NameInclude を変数名と共に使用します。 ArgumentList は、値を変数に渡します。

例 12: スクリプト ブロックで$args自動変数を使用する

$args自動変数と ArgumentList パラメーターは、スクリプト ブロック内のパラメーター位置に配列値を渡すために使用されます。 次の使用例は、サーバーのファイルのディレクトリコンテンツを .txt 表示します。 Get-ChildItemPath パラメーターは位置 0、Filter パラメーターは位置 1 です。

変数の$args詳細については、「about_Automatic_Variables」を参照してください。

$parameters = @{
    ComputerName = "Server01"
    ScriptBlock = { Get-ChildItem $args[0] $args[1] }
    ArgumentList = "C:\Test", "*.txt*"
}
Invoke-Command @parameters

Directory: C:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           6/12/2019    15:15            128 alog.txt
-a---           7/27/2019    15:16            256 blog.txt
-a---           9/28/2019    17:10             64 zlog.txt

Invoke-Commandは ScriptBlock パラメーターを使用し、 と Get-ChildItem$args[1] 配列の値を$args[0]指定します。 ArgumentList はPath と Filter の$argsパラメーター位置にGet-ChildItem配列値を渡します

例 13: テキスト ファイルに一覧表示されているすべてのコンピューターでスクリプトを実行する

この例では、 コマンドレットを Invoke-Command 使用して、 Sample.ps1 ファイルに一覧表示されているすべてのコンピューターでスクリプトを Servers.txt 実行します。 このコマンドは、FilePath パラメーターを使用して、スクリプト ファイルを指定しています。 このコマンドを使用すると、スクリプト ファイルにリモート コンピューターからアクセスできない場合でも、リモート コンピューターでスクリプトを実行できます。

Invoke-Command -ComputerName (Get-Content Servers.txt) -FilePath C:\Scripts\Sample.ps1 -ArgumentList Process, Service

コマンドを送信すると、ファイルの Sample.ps1 内容がスクリプト ブロックにコピーされ、スクリプト ブロックが各リモート コンピューターで実行されます。 この手順では、ScriptBlock パラメーターを使用してスクリプトの内容を送信した場合と同じ結果が得られます。

例 14: URI を使用してリモート コンピューターでコマンドを実行する

この例では、Uniform Resource Identifier (URI) で識別されるリモート コンピューターでコマンドを実行する方法を示します。 この特定の例では、 Set-Mailbox リモート Exchange サーバーでコマンドを実行します。

$LiveCred = Get-Credential
$parameters = @{
  ConfigurationName = 'Microsoft.Exchange'
  ConnectionUri = 'https://ps.exchangelabs.com/PowerShell'
  Credential = $LiveCred
  Authentication = 'Basic'
  ScriptBlock = {Set-Mailbox Dan -DisplayName "Dan Park"}
}
Invoke-Command @parameters

最初の行では、 コマンドレットを Get-Credential 使用して、変数に Windows Live ID 資格情報を $LiveCred 格納します。 PowerShell は、ユーザーに Windows Live ID 資格情報の入力を求めるメッセージを表示します。

変数は $parameters 、コマンドレットに渡される Invoke-Command パラメーターを含むハッシュ テーブルです。 コマンドレットはInvoke-CommandSet-MailboxMicrosoft.Exchange セッション構成を使用してコマンドを実行します。 ConnectionURI パラメーターは、Exchange サーバーのエンドポイントの URL を指定しています。 Credential パラメーターは、 変数に格納されている資格情報を$LiveCred指定します。 AuthenticationMechanism パラメーターでは、基本認証の使用を指定しています。 ScriptBlockパラメーターは、コマンドが含まれているスクリプト ブロックを指定しています。

例 15: セッション オプションを使用する

この例では、 SessionOption パラメーターを作成して使用する方法を示します。

$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
Invoke-Command -ComputerName server01 -UseSSL -ScriptBlock { Get-HotFix } -SessionOption $so -Credential server01\user01

コマンドレットはNew-PSSessionOption、受信 HTTPS 接続の評価中に、リモート エンドが証明機関、正規名、失効Listsを検証しないようにするセッション オプション オブジェクトを作成します。 SessionOption オブジェクトは 変数に$so保存されます。

注意

これらのチェックを無効にすることはトラブルシューティングには便利ですが、明らかに安全ではありません。

コマンドレットは Invoke-Command コマンドをリモートで Get-HotFix 実行します。 SessionOption パラメーターに変数が指定されています$so

例 16: リモート コマンドで URI リダイレクトを管理する

この例では、 AllowRedirection パラメーターと SessionOption パラメーターを使用して、リモート コマンドで URI リダイレクトを管理する方法を示します。

$max = New-PSSessionOption -MaximumRedirection 1
$parameters = @{
  ConnectionUri = "https://ps.exchangelabs.com/PowerShell"
  ScriptBlock = { Get-Mailbox dan }
  AllowRedirection = $true
  SessionOption = $max
}
Invoke-Command @parameters

コマンドレットは New-PSSessionOption 、変数に保存される PSSessionOption オブジェクトを $max 作成します。 このコマンドは、MaximumRedirection パラメーターを使用して、PSSessionOption オブジェクトの MaximumConnectionRedirectionCount プロパティを 1 に設定しています。

コマンドレットはInvoke-CommandGet-Mailboxリモート Microsoft Exchange Serverでコマンドを実行します。 AllowRedirection パラメーターは、接続を代替エンドポイントにリダイレクトするための明示的なアクセス許可を提供します。 SessionOption パラメーターは、 変数に格納されているセッション オブジェクトを$max使用します。

その結果、 ConnectionURI で指定されたリモート コンピューターからリダイレクト メッセージが返された場合、PowerShell は接続をリダイレクトしますが、新しい宛先から別のリダイレクト メッセージが返された場合、リダイレクトカウント値 1 を超え、 Invoke-Command 終了しないエラーが返されます。

例 17: リモート セッションでネットワーク共有にアクセスする

この例では、リモート セッションからネットワーク共有にアクセスする方法を示します。 この例を示すために、3 台のコンピューターを使用します。 Server01 はローカル コンピューター、Server02 はリモート コンピューター、Net03 にはネットワーク共有が含まれています。 Server01 は Server02 に接続し、Server02 はネットワーク共有にアクセスするために Net03 への 2 番目のホップを実行します。 PowerShell リモート処理がコンピューター間のホップをサポートする方法の詳細については、「 PowerShell リモート処理での 2 番目のホップの作成」を参照してください。

必要な資格情報セキュリティ サポート プロバイダー (CredSSP) の委任は、ローカル コンピューターのクライアント設定とリモート コンピューターのサービス設定で有効になります。 この例のコマンドを実行するには、ローカル コンピューターとリモート コンピューターの Administrators グループのメンバーである必要があります。

Enable-WSManCredSSP -Role Client -DelegateComputer Server02
$s = New-PSSession Server02
Invoke-Command -Session $s -ScriptBlock {Enable-WSManCredSSP -Role Server -Force}
$parameters = @{
  Session = $s
  ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
  Authentication = "CredSSP"
  Credential = "Domain01\Admin01"
}
Invoke-Command @parameters

コマンドレットを Enable-WSManCredSSP 使用すると、Server01 ローカル コンピューターから Server02 リモート コンピューターへの CredSSP 委任が有効になります。 Role パラメーターは、ローカル コンピューターで CredSSP クライアント設定を構成するクライアントを指定します。

New-PSSession は Server02 の PSSession オブジェクトを作成し、 オブジェクトを 変数に $s 格納します。

コマンドレットは Invoke-Command 、 変数を $s 使用してリモート コンピューター Server02 に接続します。 ScriptBlock パラメーターは、リモート コンピューター上で実行されますEnable-WSManCredSSPRole パラメーターは、リモート コンピューターで CredSSP サーバー設定を構成するサーバーを指定します。

変数には $parameters 、ネットワーク共有に接続するためのパラメーター値が含まれています。 コマンドレットは Invoke-CommandGet-Item のセッション $sでコマンドを実行します。 このコマンドは、ネットワーク共有からスクリプトを \\Net03\Scripts 取得します。 コマンドは、値が CredSSPAuthentication パラメーターと、値 Domain01\Admin01Credential パラメーターを使用します。

例 18: 多くのリモート コンピューターでスクリプトを開始する

この例では、100 台を超えるコンピューターでスクリプトを実行します。 ローカル コンピューターへの影響を最小限に抑えるために、各コンピューターに接続してスクリプトを起動した後で、各コンピューターとの接続を切断します。 スクリプトは、引き続き切断されたセッションで実行されます。

$parameters = @{
  ComputerName = (Get-Content -Path C:\Test\Servers.txt)
  InDisconnectedSession = $true
  FilePath = "\\Scripts\Public\ConfigInventory.ps1"
  SessionOption = @{OutputBufferingMode="Drop";IdleTimeout=43200000}
}
Invoke-Command @parameters

コマンドは、 を使用 Invoke-Command してスクリプトを実行します。 ComputerName パラメーターの値は、Get-Contentテキスト ファイルからリモート コンピューターの名前を取得するコマンドです。 InDisconnectedSession パラメーターにより、コマンドを起動するとすぐにセッションが切断されます。 FilePath パラメーターの値は、各コンピューターで実行されるInvoke-Commandスクリプトです。

SessionOption の値はハッシュ テーブルです。 OutputBufferingMode 値は Drop に設定され、IdleTimeout 値は 43200000 ミリ秒 (12 時間) に設定されます。

切断されたセッションで実行されるコマンドとスクリプトの結果を取得するには、 コマンドレットを Receive-PSSession 使用します。

パラメーター

-AllowRedirection

この接続を代替 Uniform Resource Identifier (URI) にリダイレクトできます。

ConnectionURI パラメーターを使用すると、リモートの送信先は別の URI にリダイレクトするように指示を返すことができます。 既定では、PowerShell は接続をリダイレクトしませんが、このパラメーターを使用して接続のリダイレクトを許可できます。

また、MaximumConnectionRedirectionCount セッション オプション値を変更することで、接続をリダイレクトする回数を制限することもできます。 コマンドレットの MaximumRedirection パラメーターを New-PSSessionOption 使用するか、ユーザー設定変数の MaximumConnectionRedirectionCount プロパティを $PSSessionOption 設定します。 既定値は 5 です。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

接続 URI のアプリケーション名セグメントを指定します。 コマンドで ConnectionURI パラメーターを使用していない場合は、このパラメーターを使用してアプリケーション名を指定します。

既定値は、ローカル コンピューターの $PSSessionApplicationName 基本設定変数の値です。 この基本設定変数が定義されていない場合、既定値は WSMAN です。 この値はほとんどの用途に適しています。 詳細については、「 about_Preference_Variables」を参照してください。

WinRM サービスは、アプリケーション名を使用して、接続要求を処理するリスナーを選択します。 このパラメーターの値は、リモート コンピューター上のリスナーの URLPrefix プロパティの値に一致している必要があります。

Type:String
Position:Named
Default value:$PSSessionApplicationName if set on the local computer, otherwise WSMAN
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ArgumentList

コマンド内のローカル変数の値を指定します。 コマンド内のローカル変数は、リモート コンピューターでコマンドが実行される前に、これらの値に置き換えられます。 コンマ区切りのリストで、値を入力します。 値は、一覧表示されている順序で変数に関連付けられます。 ArgumentList のエイリアスは Args です。

ArgumentList パラメーターの値には、1024 などの実際の値を指定できます。または、 などの$maxローカル変数への参照を指定することもできます。

コマンド内でローカル変数を使用するには、次のコマンド形式を使用します。

{param($<name1>[, $<name2>]...) <command-with-local-variables>} -ArgumentList <value> または <local-variable>

param キーワード (keyword)には、 コマンドで使用されるローカル変数が一覧表示されます。 ArgumentList は、変数の値を一覧表示された順序で提供します。

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsJob

このコマンドレットは、リモート コンピューターでバックグラウンド ジョブとしてコマンドを実行することを示します。 このパラメーターを使用して、完了に時間がかかるコマンドを実行します。

AsJob パラメーターを使用すると、コマンドはジョブを表す オブジェクトを返し、コマンド プロンプトを表示します。 ジョブが完了しても、引き続きセッションで作業できます。 ジョブを管理するには、 コマンドレットを *-Job 使用します。 ジョブの結果を取得するには、Receive-Job コマンドレットを使用します。

AsJob パラメーターは、 コマンドレットをInvoke-Command使用してコマンドレットをリモートで実行Start-Jobする場合と似ています。 ただし、 AsJob では、ジョブがリモート コンピューターで実行されている場合でも、ローカル コンピューター上にジョブが作成されます。 リモート ジョブの結果は、ローカル コンピューターに自動的に返されます。

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

ユーザーの資格情報の認証に使用されるメカニズムを指定します。 CredSSP 認証は、Windows Vista、Windows Server 2008、およびそれ以降のバージョンの Windows オペレーティング システムでのみ使用できます。

このパラメーターに使用できる値は次のとおりです。

  • Default
  • Basic
  • Credssp
  • ダイジェスト
  • Kerberos
  • ネゴシエート
  • NegotiateWithImplicitCredential

既定値は Default です。

このパラメーターの値の詳細については、「 AuthenticationMechanism 列挙」を参照してください。

注意事項

ユーザーの資格情報が認証対象のリモート コンピューターに渡される Credential Security Support Provider (CredSSP) 認証は、リモート ネットワーク共有にアクセスする場合など、複数のリソースの認証を必要とするコマンドを対象としています。 このメカニズムを使用すると、リモート操作のセキュリティ リスクが高まります。 リモート コンピューターのセキュリティが低下している場合は、そのリモート コンピューターに渡される資格情報を使用してネットワーク セッションが制御される場合があります。 詳細については、「 資格情報セキュリティ サポート プロバイダー」を参照してください。

Type:AuthenticationMechanism
Accepted values:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

切断されたセッションに接続するためのアクセス許可を持つユーザー アカウントのデジタル公開キー証明書 (X509) を指定します。 証明書の拇印を入力します。

証明書は、クライアント証明書ベースの認証で使用されます。 これらはローカル ユーザー アカウントにのみマップでき、ドメイン アカウントでは機能しません。

証明書の拇印を取得するには、PowerShell 証明書: ドライブで または Get-ChildItem コマンドを使用Get-Itemします。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

コマンドを実行するコンピューターを指定します。 既定値はローカル コンピューターです。

ComputerName パラメーターを使用すると、PowerShell によって、指定したコマンドの実行にのみ使用される一時的な接続が作成され、閉じられます。 永続的な接続が必要な場合は、 Session パラメーターを使用します。

コンマ区切りのリストで、1 台または複数のコンピューターの NETBIOS 名、IP アドレス、または完全修飾ドメイン名を入力します。 ローカル コンピューターを指定するには、コンピューター名、localhost、またはドット (.) を入力します。

ComputerName の値に IP アドレスを使用するには、コマンドに Credential パラメーターを含める必要があります。 コンピューターは HTTPS トランスポート用に構成する必要があります。または、リモート コンピューターの IP アドレスをローカル コンピューターの WinRM TrustedHosts リストに含める必要があります。 TrustedHosts リストにコンピューター名を追加する手順については、「How to Add a Computer to the Trusted Host List」を参照してください。

Windows Vista 以降のバージョンの Windows オペレーティング システムでは、 ComputerName の値にローカル コンピューターを含めるには、[ 管理者として実行 ] オプションを使用して PowerShell を実行する必要があります。

Type:String[]
Aliases:Cn
Position:0
Default value:Local computer
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConfigurationName

新しい PSSession に使用されるセッション構成を指定します。

セッション構成の構成名または完全修飾リソース URI を入力します。 構成名のみを指定した場合は、次のスキーマ URI が先頭に付加されます。 https://schemas.microsoft.com/PowerShell

セッションのセッション構成は、リモート コンピューター上にあります。 指定したセッション構成がリモート コンピューターに存在しない場合、コマンドは失敗します。

既定値は、ローカル コンピューターの $PSSessionConfigurationName 基本設定変数の値です。 この基本設定変数が設定されていない場合、既定値は Microsoft.PowerShell です。 詳細については、「 about_Preference_Variables」を参照してください。

Type:String
Position:Named
Default value:$PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ConnectionUri

セッションの接続エンドポイントを定義する Uniform Resource Identifier (URI) を指定します。 URI は完全修飾名にする必要があります。

この文字列の形式は次のとおりです。

<Transport>://<ComputerName>:<Port>/<ApplicationName>

既定値は、次のとおりです。

https://localhost:5985/WSMAN

接続 URI を指定しない場合は、 UseSSL パラメーターと Port パラメーターを使用して接続 URI 値を指定できます。

URI の Transport セグメントの有効な値は、HTTP および HTTPS です。 トランスポート セグメントを使用して接続 URI を指定し、ポートを指定しない場合、セッションは標準ポート (HTTP の場合は 80、HTTPS の場合は 443) で作成されます。 PowerShell リモート処理に既定のポートを使用するには、HTTP の場合はポート 5985、HTTPS の場合は 5986 を指定します。

宛先コンピューターが接続を別の URI にリダイレクトする場合、コマンドで AllowRedirection パラメーターを使用しない限り、PowerShell はリダイレクトを防止します。

Type:Uri[]
Aliases:URI, CU
Position:0
Default value:https://localhost:5985/WSMAN
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

この処理を実行するアクセス許可を持つユーザー アカウントを指定します。 既定値は現在のユーザーです。

User01 や Domain01\User01 などのユーザー名を入力します。 または、コマンドレットによって生成されたものなど、 PSCredential オブジェクトを Get-Credential 入力します。 ユーザー名を入力すると、このコマンドレットによってパスワードの入力が求められます。

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-EnableNetworkAccess

このコマンドレットがループバック セッションに対話型セキュリティ トークンを追加することを示します。 対話型トークンを使用すると、他のコンピューターからデータを取得するコマンドをループバック セッションで実行できます。 たとえば、リモート コンピューターからローカル コンピューターに XML ファイルをコピーするコマンドをセッションで実行できます。

ループバック セッションは、同じコンピューター上で開始および終了する PSSession です。 ループバック セッションを作成するには、 ComputerName パラメーターを省略するか、値をドット (.)、localhost、またはローカル コンピューターの名前に設定します。

既定では、ループバック セッションはネットワーク トークンを使用して作成されます。これにより、リモート コンピューターに対して認証するための十分なアクセス許可が提供されない可能性があります。

EnableNetworkAccess パラメーターは、ループバック セッションでのみ有効です。 リモート コンピューターでセッションを作成するときに EnableNetworkAccess を 使用すると、コマンドは成功しますが、 パラメーターは無視されます。

セッション資格情報を他のコンピューターに委任する Authentication パラメーターの CredSSP 値を使用して、ループバック セッションでリモート アクセスを許可できます。

悪意のあるアクセスからコンピューターを保護するために、 EnableNetworkAccess を使用して作成された対話型トークンを持つ切断されたループバック セッションは、セッションが作成されたコンピューターからのみ再接続できます。 CredSSP 認証を使用するセッションが切断された場合には、他のコンピューターから再接続することができます。 詳細については、「Disconnect-PSSession」を参照してください。

このパラメーターは、PowerShell 3.0 で導入されました。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

このコマンドレットが 1 つ以上のリモート コンピューターで実行されるローカル スクリプトを指定します。 スクリプトのパスとファイル名を入力するか、スクリプト パスを に Invoke-Commandパイプします。 スクリプトは、ローカル コンピューター上か、またはローカル コンピューターがアクセスできるディレクトリ内に存在する必要があります。 ArgumentList を使用して、スクリプト内のパラメーターの値を指定します。

このパラメーターを使用すると、PowerShell は指定したスクリプト ファイルの内容をスクリプト ブロックに変換し、スクリプト ブロックをリモート コンピューターに送信して、リモート コンピューター上で実行します。

Type:String
Aliases:PSPath
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-HideComputerName

このコマンドレットは、出力表示から各オブジェクトのコンピューター名を省略することを示します。 既定では、オブジェクトを生成したコンピューター名が画面に表示されます。

このパラメーターが有効なのは、出力の表示だけです。 オブジェクトは変更されません。

Type:SwitchParameter
Aliases:HCN
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InDisconnectedSession

このコマンドレットが、切断されたセッションでコマンドまたはスクリプトを実行することを示します。

InDisconnectedSession パラメーターを使用すると、Invoke-Command各リモート コンピューターに永続的なセッションが作成され、ScriptBlock または FilePath パラメーターで指定されたコマンドが開始され、セッションから切断されます。 コマンドは、切断されたセッションで引き続き実行されます。 InDisconnectedSession を使用すると、リモート セッションへの接続を維持せずにコマンドを実行できます。 また、結果が返される前にセッションが切断されるため、 InDisconnectedSession では、セッション間で分割されるのではなく、すべてのコマンド結果が再接続されたセッションに確実に返されます。

Session パラメーターまたは AsJob パラメーターでは InDisconnectedSession を使用できません。

InDisconnectedSession を使用するコマンドは、切断されたセッションを表す PSSession オブジェクトを返します。 コマンド出力は返されません。 切断されたセッションに接続するには、 または Receive-PSSession コマンドレットをConnect-PSSession使用します。 セッションで実行されたコマンドの結果を取得するには、 コマンドレットを Receive-PSSession 使用します。 切断されたセッションで出力を生成するコマンドを実行するには、 OutputBufferingMode セッション オプションの値を Drop に設定 します。 切断されたセッションに接続する場合は、セッションを削除する前に接続するのに十分な時間が確保されるように、セッションでアイドル タイムアウトを設定します。

出力バッファリング モードとアイドル タイムアウトは 、SessionOption パラメーターまたは基本設定変数で $PSSessionOption 設定できます。 セッション オプションの詳細については、「」と「about_Preference_Variables」を参照してくださいNew-PSSessionOption

切断されたセッションの機能の詳細については、「about_Remote_Disconnected_Sessions」を参照してください。

このパラメーターは、PowerShell 3.0 で導入されました。

Type:SwitchParameter
Aliases:Disconnected
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

コマンドへの入力を指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。

InputObject パラメーターを使用する場合は、ScriptBlock パラメーターの値で自動変数を使用$Inputして、入力オブジェクトを表します。

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-JobName

バックグラウンド ジョブのフレンドリ名を指定します。 既定では、ジョブには という名前が付けられます Job<n>。ここで <n> 、 は序数です。

コマンドで JobName パラメーターを使用すると、コマンドはジョブとして実行され Invoke-Command 、コマンドに AsJob を含めない場合でもジョブ オブジェクトが返されます。

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

Type:String
Position:Named
Default value:Job<n>
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoNewScope

このコマンドレットが、現在のスコープで指定したコマンドを実行することを示します。 既定では、 Invoke-Command は独自のスコープでコマンドを実行します。

このパラメーターは、現在のセッションで実行されるコマンド、つまり、ComputerName および Session の両パラメーターを除外したコマンド内でのみ有効です。

このパラメーターは、PowerShell 3.0 で導入されました。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Port

このコマンドに使用されるリモート コンピューター上のネットワーク ポートを指定します。 リモート コンピューターに接続するには、リモート コンピューターで、接続に使用されるポートをリッスンすることが必要です。 既定のポートは、HTTP の WinRM ポートである 5985 と、HTTPS の WinRM ポートである 5986 です。

別のポートを使用する場合には、そのポートでリッスンするようにリモート コンピューターの WinRM リスナーを構成します。 リスナーを構成するには、PowerShell プロンプトで次の 2 つのコマンドを入力します。

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>

必要な場合を除き、 Port パラメーターを使用しないでください。 コマンドに設定されているポートは、コマンドが実行されるすべてのコンピューターまたはセッションに適用されます。 代替ポートの設定によっては、コマンドがすべてのコンピューターで実行されない場合があります。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

実行するコマンドを指定します。 コマンドを中かっこで囲み、 { } スクリプト ブロックを作成します。 このパラメーターは必須です。

既定では、コマンド内のどの変数もリモート コンピューター上で評価されます。 コマンドにローカル変数を含めるには、 ArgumentList を使用します

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Session

このコマンドレットがコマンドを実行するセッションの配列を指定します。 PSSession オブジェクトを含む変数、または PSSession オブジェクトを作成または取得するコマンド (または Get-PSSession コマンドなど) をNew-PSSession入力します。

PSSession を作成すると、PowerShell によってリモート コンピューターへの永続的な接続が確立されます。 PSSession を使用して、データを共有する一連の関連コマンドを実行します。 1 つのコマンドまたは一連の関連のないコマンドを実行するには、 ComputerName パラメーターを使用します。 詳細については、「 about_PSSessions」を参照してください。

Type:PSSession[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionName

切断されたセッションのフレンドリ名を指定します。 名前を使用して、コマンドなどの後続のコマンドでセッションを Get-PSSession 参照できます。 このパラメーターは、InDisconnectedSession パラメーターと共に使用する場合に限り有効です。

このパラメーターは、PowerShell 3.0 で導入されました。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionOption

セッションの詳細オプションを指定します。 コマンドレットを使用New-PSSessionOptionして作成した SessionOption オブジェクトや、キーがセッション オプション名で値がセッション オプション値であるハッシュ テーブルを入力します。

オプションの既定値は、設定されている場合は、基本設定変数の $PSSessionOption 値によって決まります。 それ以外の場合、既定値はセッション構成で設定されたオプションによって決まります。

セッション オプションの値は、基本設定変数とセッション構成で設定された $PSSessionOption セッションの既定値よりも優先されます。 ただし、セッション構成で設定された最大値、クォータ、または制限よりも優先されません。

既定値を含むセッション オプションの説明については、「」を参照してください New-PSSessionOption。 基本設定変数の $PSSessionOption 詳細については、「 about_Preference_Variables」を参照してください。 セッション構成の詳細については、「 about_Session_Configurations」を参照してください。

Type:PSSessionOption
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ThrottleLimit

このコマンドを実行するために確立できる最大コンカレント接続数を指定します。 このパラメーターを省略した場合、または値 0 を入力した場合は、既定値の 32 が使用されます。

スロットル制限は現在のコマンドのみに適用され、セッションまたはコンピューターには適用されません。

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseSSL

このコマンドレットが Secure Sockets Layer (SSL) プロトコルを使用してリモート コンピューターへの接続を確立することを示します。 既定では、SSL は使用されません。

WS-Management は、ネットワーク経由で送信されるすべての PowerShell コンテンツを暗号化します。 UseSSL パラメーターは、HTTP ではなく HTTPS 経由でデータを送信する追加の保護です。

このパラメーターを使用しても、コマンドに使用されているポートで SSL を使用できない場合、コマンドは失敗します。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-VMId

仮想マシンの ID の配列を指定します。

Type:Guid[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-VMName

仮想マシンの名前の配列を指定します。

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

入力

ScriptBlock

スクリプト ブロック内のコマンドを に Invoke-Commandパイプできます。 コマンドの $Input 入力オブジェクトを表すには、自動変数を使用します。

出力

System.Management.Automation.PSRemotingJob, System.Management.Automation.Runspaces.PSSession, or the output of the invoked command

AsJob パラメーターを使用すると、このコマンドレットはジョブ オブジェクトを返します。 InDisconnectedSession パラメーターを指定すると、 Invoke-CommandPSSession オブジェクトが返されます。 それ以外の場合は、呼び出されたコマンドの出力 ( ScriptBlock パラメーターの値) が返されます。

メモ

Windows Vista 以降のバージョンの Windows オペレーティング システムでは、 の ComputerName パラメーター Invoke-Command を使用してローカル コンピューターでコマンドを実行するには、[ 管理者として実行 ] オプションを使用して PowerShell を実行する必要があります。

複数のコンピューターでコマンドを実行すると、PowerShell は一覧に表示される順序でコンピューターに接続します。 ただし、コマンド出力はリモート コンピューターから受信した順序で表示されます。これは異なる場合があります。

実行されるコマンドから発生した Invoke-Command エラーは、コマンドの結果に含まれます。 ローカル コマンドでは "終了するエラー" となるエラーは、リモート コマンドでは "終了しないエラー" として扱われます。 この方法により、1 台のコンピューターで終了エラーが発生しても、実行されているすべてのコンピューターでコマンドが閉じないようにします。 また、この方法は、1 台のコンピューターでリモート コマンドを実行する場合にも、使用されます。

リモート コンピューターがローカル コンピューターが信頼するドメインにない場合、コンピューターはユーザーの資格情報を認証できない可能性があります。 WS-Management で信頼されたホストの一覧にリモート コンピューターを追加するには、プロバイダーで次のコマンドを WSMAN 使用します。ここで <Remote-Computer-Name> 、 はリモート コンピューターの名前です。

Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>

PSSession を切断する場合、InDisconnectedSession パラメーターを使用すると、セッションの状態は Disconnected になり、可用性は None になりますState プロパティの値は、現在のセッションに関連付けられています。 Disconnected の値は、PSSession が現在のセッションに接続されていないことを意味します。 ただし、 PSSession がすべてのセッションから切断されているわけではありません。 別のセッションに接続されている可能性があるためです。 セッションに接続または再接続できるかどうかを確認するには、Availability プロパティを使用します。

Availability の値が None の場合は、セッションに接続できることを示します。 [ビジー] の値は、別のセッションに接続されているため、PSSession に接続できないことを示します。 セッションの State プロパティの値の詳細については、「 RunspaceState」を参照してください。 セッションの Availability プロパティの値の詳細については、「 RunspaceAvailability」を参照してください。