Invoke-Command
ローカル コンピューターおよびリモート コンピューター上でコマンドを実行します。
構文
Invoke-Command
[-StrictMode <Version>]
[-ScriptBlock] <ScriptBlock>
[-NoNewScope]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-Session] <PSSession[]>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-FilePath] <String>
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[[-Session] <PSSession[]>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-ScriptBlock] <ScriptBlock>
[-RemoteDebug]
[-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]
[-RemoteDebug]
[-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]
[-RemoteDebug]
[-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]
[-RemoteDebug]
[-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]
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-ScriptBlock] <ScriptBlock>
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-VMId] <Guid[]>
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-ScriptBlock] <ScriptBlock>
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
-VMName <String[]>
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-FilePath] <String>
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-VMId] <Guid[]>
[<CommonParameters>]
Invoke-Command
-Credential <PSCredential>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-FilePath] <String>
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
-VMName <String[]>
[<CommonParameters>]
Invoke-Command
[-Port <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-ScriptBlock] <ScriptBlock>
-HostName <String[]>
[-UserName <String>]
[-KeyFilePath <String>]
[-Subsystem <String>]
[-ConnectingTimeout <Int32>]
[-SSHTransport]
[-Options <Hashtable>]
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-ScriptBlock] <ScriptBlock>
[-RunAsAdministrator]
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
-ContainerId <String[]>
[<CommonParameters>]
Invoke-Command
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-FilePath] <String>
[-RunAsAdministrator]
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
-ContainerId <String[]>
[<CommonParameters>]
Invoke-Command
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-ScriptBlock] <ScriptBlock>
-SSHConnection <Hashtable[]>
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-AsJob]
[-HideComputerName]
[-FilePath] <String>
-HostName <String[]>
[-UserName <String>]
[-KeyFilePath <String>]
[-Subsystem <String>]
[-ConnectingTimeout <Int32>]
[-SSHTransport]
[-Options <Hashtable>]
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Invoke-Command
[-AsJob]
[-HideComputerName]
[-FilePath] <String>
-SSHConnection <Hashtable[]>
[-RemoteDebug]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
説明
Invoke-Command
コマンドレットは、ローカル コンピューターまたはリモート コンピューターでコマンドを実行し、エラーを含むコマンドからすべての出力を返します。 1 つの Invoke-Command
コマンドを使用して、複数のコンピューターでコマンドを実行できます。
リモート コンピューターで 1 つのコマンドを実行するには、 ComputerName パラメーターを使用します。 データを共有する一連の関連コマンドを実行するには、New-PSSession
コマンドレットを使用してリモート コンピューターに PSSession (永続的な接続) を作成し、Invoke-Command
の Session パラメーターを使用して、PSSession でコマンドを実行します。 切断されたセッションでコマンドを実行するには、 InDisconnectedSession パラメーターを使用します。 バックグラウンド ジョブでコマンドを実行するには、 AsJob パラメーターを使用します。
また、ローカル コンピューターの Invoke-Command
をコマンドとして実行スクリプト ブロックに使用することもできます。 PowerShell は、現在のスコープの子スコープでスクリプト ブロックを直ちに実行します。
Invoke-Command
を使用してリモート コンピューターでコマンドを実行する前に、about_Remoteを読み取ってください。
PowerShell 6.0 以降では、Secure Shell (SSH) を使用してリモート コンピューターへの接続を確立し、コマンドを呼び出すことができます。 SSH はローカル コンピューターにインストールする必要があり、リモート コンピューターは PowerShell SSH エンドポイントを使用して構成する必要があります。 SSH ベースの PowerShell リモート セッションの利点は、複数のプラットフォーム (Windows、Linux、macOS) で動作することです。 SSH ベースのセッションでは、 HostName または SSHConnection パラメーターを使用して、リモート コンピューターと関連する接続情報を指定します。 PowerShell SSH リモート処理を設定する方法の詳細については、「 PowerShell Remoting over SSH」を参照してください。
一部のコード サンプルでは、スプラッティングを使用して行の長さを短くします。 詳細については、「 about_Splatting」を参照してください。
例
例 1: サーバーでスクリプトを実行する
この例では、Server01 コンピューターで Test.ps1
スクリプトを実行します。
Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01
FilePath パラメーターは、ローカル コンピューター上にあるスクリプトを指定します。 このスクリプトは、リモート コンピューターで実行され、結果はローカル コンピューターに返されます。
例 2: リモート サーバーでコマンドを実行する
この例では、Server01 リモート コンピューターで Get-Culture
コマンドを実行します。
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-Command
コマンドレットは、Server02 で Get-Culture
コマンドを実行します。 Session パラメーターは、$s
変数に保存されたセッションを指定します。
これに対して、PowerShell は Server02 コンピューター上のセッションでコマンドを実行します。
例 4: セッションを使用して、データを共有する一連のコマンドを実行する
この例では、Invoke-Command
の ComputerName パラメーターと Session パラメーターの使用の効果を比較します。 セッションを使用して、同じデータを共有する一連のコマンドを実行する方法を示しています。
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 つのコマンドでは、Invoke-Command
の ComputerName パラメーターを使用して、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-WinEvent -LogName PowerShellCore/Operational |
Where-Object -FilterScript { $_.Message -like '*certificate*' }
}
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command
$command
変数には、スクリプト ブロックとして書式設定されたGet-WinEvent
コマンドが格納されます。 Invoke-Command
は、S1 および S2 リモート コンピューター上の$command
に格納されているコマンドを実行します。
例 6: 複数のコンピューターで 1 つのコマンドを実行する
この例では、 Invoke-Command
を使用して複数のコンピューターで 1 つのコマンドを実行する方法を示します。
$parameters = @{
ComputerName = 'Server01', 'Server02', 'TST-0143', 'localhost'
ConfigurationName = 'MySession.PowerShell'
ScriptBlock = { Get-WinEvent -LogName PowerShellCore/Operational }
}
Invoke-Command @parameters
ComputerName パラメーターは、コンピューター名のコンマ区切りの一覧を指定します。 コンピューターの一覧には、ローカル コンピューターを表す localhost 値が含まれています。 ConfigurationName パラメーターは、代替セッション構成を指定します。 ScriptBlock パラメーターは、各コンピューターから PowerShellCore/Operational イベント ログを取得するためにGet-WinEvent
実行されます。
例 7: 複数のコンピューター上のホスト プログラムのバージョンを取得する
この例では、200 台のリモート コンピューターで実行されている PowerShell ホスト プログラムのバージョンを取得します。
$version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {
(Get-Host).Version
}
実行されるコマンドは 1 つだけなので、各コンピューターへの永続的な接続を作成する必要はありません。 代わりに、 ComputerName パラメーターを使用してコンピューターを示します。 コンピューターを指定するには、 Get-Content
コマンドレットを使用して、Machine.txt ファイル (コンピューター名のファイル) の内容を取得します。
Invoke-Command
コマンドレットは、リモート コンピューターでGet-Host
コマンドを実行します。 ドット表記を使用して、PowerShell ホストの Version プロパティを取得します。
これらのコマンドは一度に 1 つずつ実行されます。 コマンドが完了すると、すべてのコンピューターからのコマンドの出力が $version
変数に保存されます。 出力には、データの発生元であるコンピューターの名前も含まれます。
例 8: 複数のリモート コンピューターでバックグラウンド ジョブを実行する
この例では、2 台のリモート コンピューターでコマンドを実行します。 Invoke-Command
コマンドは、AsJob パラメーターを使用して、コマンドがバックグラウンド ジョブとして実行されるようにします。 コマンドはリモート コンピューターで実行されますが、ジョブはローカル コンピューターに存在します。 結果はローカル コンピューターに送信されます。
$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_Variablesとabout_Scopes」を参照してください。
$Log = 'PowerShellCore/Operational'
Invoke-Command -ComputerName Server01 -ScriptBlock {
Get-WinEvent -LogName $Using:Log -MaxEvents 10
}
$Log
変数には、イベント ログの名前である PowerShellCore/Operational が格納されます。 Invoke-Command
コマンドレットは Server01 でGet-WinEvent
実行され、イベント ログから最新の 10 個のイベントを取得します。 LogName パラメーターの値は、リモート セッションではなくローカル セッションで作成されたことを示すために、Using
スコープ修飾子のプレフィックスが付いた$Log
変数です。
例 10: コンピューター名を非表示にする
この例では、Invoke-Command
の HideComputerName パラメーターを使用した場合の効果を示します。
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 -HideComputerName -ScriptBlock {
Get-Process PowerShell
}
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 キーワードを使用する
Param
キーワードと ArgumentList パラメーターは、スクリプト ブロック内の名前付きパラメーターに変数値を渡すために使用されます。 次の使用例は、文字 a
で始まり、拡張子が .pdf
のファイル名を表示します。
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
は、$param1
と$param2
の 2 つの変数を定義する ScriptBlock パラメーターを使用します。 Get-ChildItem
は、名前付きパラメーター Name および Include を変数名と共に使用します。 ArgumentListは変数に値を渡します。
例 12: スクリプト ブロックで $args 自動変数を使用する
$args
自動変数と ArgumentList パラメーターは、スクリプト ブロック内のパラメーター位置に配列値を渡すために使用されます。 次の使用例は、 .txt
ファイルのサーバーのディレクトリの内容を表示します。 Get-ChildItem
Path パラメーターは位置 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 パラメーターを使用し、$args[0]
と$args[1]
配列値を指定Get-ChildItem
。 ArgumentList は、Path および Filter のGet-ChildItem
パラメーター位置に$args
配列値を渡します。
例 13: テキスト ファイルに一覧表示されているすべてのコンピューターでスクリプトを実行する
この例では、Invoke-Command
コマンドレットを使用して、Servers.txt
ファイルに一覧表示されているすべてのコンピューターでSample.ps1
スクリプトを実行します。 このコマンドでは、 FilePath パラメーターを使用してスクリプト ファイルを指定します。 このコマンドを使用すると、リモート コンピューターからスクリプト ファイルにアクセスできない場合でも、リモート コンピューターでスクリプトを実行できます。
$parameters = @{
ComputerName = (Get-Content Servers.txt)
FilePath = 'C:\Scripts\Sample.ps1'
ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters
コマンドを送信すると、 Sample.ps1
ファイルの内容がスクリプト ブロックにコピーされ、各リモート コンピューターでスクリプト ブロックが実行されます。 この手順は、 ScriptBlock パラメーターを使用してスクリプトの内容を送信することと同じです。
例 14: URI を使用してリモート コンピューターでコマンドを実行する
この例では、Uri (Uniform Resource Identifier) によって識別されるリモート コンピューターでコマンドを実行する方法を示します。 この特定の例では、リモート Exchange サーバーで Set-Mailbox
コマンドを実行します。
$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-Command
コマンドレットは、Microsoft.Exchange セッション構成を使用してSet-Mailbox
コマンドを実行します。 ConnectionURI パラメーターは、Exchange サーバー エンドポイントの URL を指定します。 Credential パラメーターは、$LiveCred
変数に格納されている資格情報を指定します。 AuthenticationMechanism パラメーターは、基本認証の使用を指定します。 ScriptBlock パラメーターは、コマンドを含むスクリプト ブロックを指定します。
例 15: セッション オプションを使用する
この例では、 SessionOption パラメーターを作成して使用する方法を示します。
$so = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$parameters = @{
ComputerName = 'server01'
UseSSL = $true
ScriptBlock = { Get-HotFix }
SessionOption = $so
Credential = 'server01\user01'
}
Invoke-Command @parameters
New-PSSessionOption
コマンドレットは、受信 HTTPS 接続の評価中に、リモート エンドが証明機関、正規名、失効リストを検証しないようにするセッション オプション オブジェクトを作成します。 SessionOption オブジェクトは、$so
変数に保存されます。
Note
これらのチェックを無効にするとトラブルシューティングには便利ですが、明らかに安全ではありません。
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
コマンドレットは、$max
変数に保存されるPSSessionOption オブジェクトを作成します。 このコマンドでは、MaximumRedirection パラメーターを使用して、PSSessionOption オブジェクトの MaximumConnectionRedirectionCount プロパティを 1 に設定します。
Invoke-Command
コマンドレットは、リモートの Microsoft Exchange Server でGet-Mailbox
コマンドを実行します。 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 = @{
ComputerName = 'Server02'
ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }
Authentication = 'CredSSP'
Credential = 'Domain01\Admin01'
}
Invoke-Command @parameters
Enable-WSManCredSSP
コマンドレットを使用すると、Server01 ローカル コンピューターから Server02 リモート コンピューターへの CredSSP 委任が有効になります。 Role パラメーターは、ローカル コンピューターで CredSSP クライアント設定を構成する Client を指定します。
New-PSSession
は Server02 の PSSession オブジェクトを作成し、そのオブジェクトを $s
変数に格納します。
Invoke-Command
コマンドレットは、$s
変数を使用してリモート コンピューター Server02 に接続します。 ScriptBlock パラメーターは、リモート コンピューターでEnable-WSManCredSSP
実行されます。 Role パラメーターは、リモート コンピューターで CredSSP サーバー設定を構成するServerを指定します。
$parameters
変数には、ネットワーク共有に接続するためのパラメーター値が含まれています。 Invoke-Command
コマンドレットは、$s
のセッションでGet-Item
コマンドを実行します。 このコマンドは、 \\Net03\Scripts
ネットワーク共有からスクリプトを取得します。 このコマンドでは、 Authentication パラメーターと値が CredSSP Credential パラメーターの値 Domain01\Admin01 が使用されます。
例 18: 多くのリモート コンピューターでスクリプトを開始する
この例では、100 を超えるコンピューターでスクリプトを実行します。 ローカル コンピューターへの影響を最小限に抑えるために、各コンピューターに接続してスクリプトを起動した後で、各コンピューターとの接続を切断します。 スクリプトは、引き続き切断されたセッションで実行されます。
$parameters = @{
ComputerName = (Get-Content -Path C:\Test\Servers.txt)
InDisconnectedSession = $true
FilePath = '\\Scripts\Public\ConfigInventory.ps1'
SessionOption = @{
OutputBufferingMode = 'Drop'
IdleTimeout = [timespan]::FromHours(12)
}
}
Invoke-Command @parameters
このコマンドでは、 Invoke-Command
を使用してスクリプトを実行します。 ComputerName パラメーターの値は、テキスト ファイルからリモート コンピューターの名前を取得するGet-Content
コマンドです。 InDisconnectedSession パラメーターは、コマンドを開始するとすぐにセッションを切断します。 FilePath パラメーターの値は、各コンピューターで実行Invoke-Command
スクリプトです。
SessionOption の値はハッシュ テーブルです。 OutputBufferingMode 値は Drop
に設定され、IdleTimeout 値は 12 時間に設定されます。
切断されたセッションで実行されるコマンドとスクリプトの結果を取得するには、 Receive-PSSession
コマンドレットを使用します。
例 19: SSH を使用してリモート コンピューターでコマンドを実行する
この例では、Secure Shell (SSH) を使用してリモート コンピューターでコマンドを実行する方法を示します。 リモート コンピューターでパスワードの入力を求める SSH が構成されている場合は、パスワード プロンプトが表示されます。 それ以外の場合は、SSH キーベースのユーザー認証を使用する必要があります。
Invoke-Command -HostName UserA@LinuxServer01 -ScriptBlock { Get-MailBox * }
例 20: SSH を使用してリモート コンピューターでコマンドを実行し、ユーザー認証キーを指定する
この例では、SSH を使用してリモート コンピューターでコマンドを実行し、ユーザー認証用のキー ファイルを指定する方法を示します。 キー認証が失敗し、リモート コンピューターが基本パスワード認証を許可するように構成されていない限り、パスワードの入力を求められません。
$parameters = @{
HostName = 'UserA@LinuxServer01'
ScriptBlock = { Get-MailBox * }
KeyFilePath = '/UserA/UserAKey_rsa'
}
Invoke-Command
例 21: SSH をジョブとして使用して複数のリモート コンピューターでスクリプト ファイルを実行する
この例では、SSH と SSHConnection パラメーター セットを使用して、複数のリモート コンピューターでスクリプト ファイルを実行する方法を示します。 SSHConnection パラメーターは、各コンピューターの接続情報を含むハッシュ テーブルの配列を受け取ります。 この例では、ターゲット リモート コンピューターでキー ベースのユーザー認証をサポートするように SSH が構成されている必要があります。
$sshConnections = @(
@{
HostName = "WinServer1"
UserName = "Domain\UserA"
KeyFilePath = "C:\Users\UserA\id_rsa"
}
@{
HostName = "UserB@LinuxServer5"
KeyFilePath = "/Users/UserB/id_rsa"
}
)
$results = Invoke-Command -FilePath c:\Scripts\GetInfo.ps1 -SSHConnection $sshConnections
例 22: SSH オプションを使用してリモート SSH セッションに接続する
この例では、SSH オプションを使用して、リモートの Linux ベースのコンピューターでスクリプト ファイルを実行する方法を示します。 Options パラメーターは、リモート システムへの接続を確立した基になるssh
コマンドにオプションとして渡される値のハッシュテーブルを受け取ります。
$options = @{
Port=22
User = 'UserB'
Host = 'LinuxServer5'
}
$results = Invoke-Command -FilePath c:\Scripts\CollectEvents.ps1 -KeyFilePath '/Users/UserB/id_rsa' -Options $options
パラメーター
-AllowRedirection
この接続を代替 Uniform Resource Identifier (URI) にリダイレクトできます。
ConnectionURI パラメーターを使用すると、リモート宛先は別の URI にリダイレクトする命令を返すことができます。 既定では、PowerShell は接続をリダイレクトしませんが、このパラメーターを使用して接続のリダイレクトを許可できます。
また、 MaximumConnectionRedirectionCount セッション オプション値を変更して、接続がリダイレクトされる回数を制限することもできます。 New-PSSessionOption
コマンドレットの MaximumRedirection パラメーターを使用するか、$PSSessionOption
設定変数の MaximumConnectionRedirectionCount プロパティを設定します。 既定値は 5 です。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ApplicationName
接続 URI のアプリケーション名セグメントを指定します。 コマンドで ConnectionURI パラメーターを使用していない場合は、このパラメーターを使用してアプリケーション名を指定します。
既定値は、ローカル コンピューターの $PSSessionApplicationName
基本設定変数の値です。 この基本設定変数が定義されていない場合、既定値は WSMAN です。 この値はほとんどの用途に適しています。 詳細については、「 about_Preference_Variables」を参照してください。
WinRM サービスは、アプリケーション名を使用して、接続要求を処理するリスナーを選択します。 このパラメーターの値は、リモート コンピューター上のリスナーの URLPrefix プロパティの値と一致する必要があります。
型: | String |
配置: | Named |
規定値: | $PSSessionApplicationName if set on the local computer, otherwise WSMAN |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-ArgumentList
scriptblock のパラメーターの値を指定します。 スクリプト ブロック内のパラメーターは、 ArgumentList に指定された配列値の位置によって渡されます。 これは配列スプラッティングと呼ばれます。 ArgumentList の動作の詳細については、about_Splattingを参照してください。
型: | Object[] |
Aliases: | Args |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-AsJob
このコマンドレットは、リモート コンピューターでバックグラウンド ジョブとしてコマンドを実行することを示します。 このパラメーターを使用して、完了に時間がかかるコマンドを実行します。
AsJob パラメーターを使用すると、ジョブを表すオブジェクトが返され、コマンド プロンプトが表示されます。 ジョブが完了しても、引き続きセッションで作業できます。 ジョブを管理するには、 *-Job
コマンドレットを使用します。 ジョブの結果を取得するには、 Receive-Job
コマンドレットを使用します。
AsJob パラメーターは、Invoke-Command
コマンドレットを使用してStart-Job
コマンドレットをリモートで実行する場合と似ています。 ただし、 AsJob では、ジョブがリモート コンピューターで実行されている場合でも、ジョブはローカル コンピューター上に作成されます。 リモート ジョブの結果は、ローカル コンピューターに自動的に返されます。
PowerShell バックグラウンド ジョブの詳細については、「 about_Jobs と about_Remote_Jobs」を参照してください。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Authentication
ユーザーの資格情報を認証するために使用されるメカニズムを指定します。 CredSSP 認証は、Windows Vista、Windows Server 2008、およびそれ以降のバージョンの Windows オペレーティング システムでのみ使用できます。
このパラメーターに使用できる値は次のとおりです。
- 既定値
- 基本
- Credssp
- Digest
- Kerberos
- ネゴシエート
- NegotiateWithImplicitCredential
既定値は Default です。
このパラメーターの値の詳細については、「 AuthenticationMechanism 列挙型を参照してください。
注意事項
ユーザーの資格情報が認証されるリモート コンピューターに渡される資格情報セキュリティ サポート プロバイダー (CredSSP) 認証は、リモート ネットワーク共有へのアクセスなど、複数のリソースで認証を必要とするコマンド用に設計されています。 このメカニズムを使用すると、リモート操作のセキュリティ リスクが高まります。 リモート コンピューターのセキュリティが低下している場合は、そのリモート コンピューターに渡される資格情報を使用してネットワーク セッションが制御される場合があります。 詳細については、「 Credential セキュリティ サポート プロバイダー」を参照してください。
型: | AuthenticationMechanism |
指定可能な値: | Basic, Default, Credssp, Digest, Kerberos, Negotiate, NegotiateWithImplicitCredential |
配置: | Named |
規定値: | Default |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-CertificateThumbprint
切断されたセッションに接続するためのアクセス許可を持つユーザー アカウントのデジタル公開キー証明書 (X509) を指定します。 証明書の拇印を入力します。
証明書は、クライアント証明書ベースの認証で使用されます。 これらはローカル ユーザー アカウントにのみマップでき、ドメイン アカウントでは機能しません。
証明書の拇印を取得するには、PowerShell 証明書: ドライブで Get-Item
または Get-ChildItem
コマンドを使用します。
型: | String |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ComputerName
コマンドを実行するコンピューターを指定します。 既定値はローカル コンピューターです。
ComputerName パラメーターを使用すると、PowerShell は、指定したコマンドの実行にのみ使用される一時的な接続を作成し、その後閉じます。 永続的な接続が必要な場合は、 Session パラメーターを使用します。
コンマ区切りのリストで、1 台または複数のコンピューターの NETBIOS 名、IP アドレス、または完全修飾ドメイン名を入力します。 ローカル コンピューターを指定するには、コンピューター名、localhost、またはドット (.
) を入力します。
ComputerNameの値に IP アドレスを使用するには、コマンドに Credential パラメーターを含める必要があります。 コンピューターは HTTPS トランスポート用に構成する必要があります。または、リモート コンピューターの IP アドレスをローカル コンピューターの WinRM TrustedHosts 一覧に含める必要があります。 TrustedHosts リストにコンピューター名を追加する手順については、「信頼できるホストの一覧にコンピューターを追加する方法を参照してください。
Windows Vista 以降のバージョンの Windows オペレーティング システムでは、ローカル コンピューターを ComputerName の値に含めるには、 Run as administrator オプションを使用して PowerShell を実行する必要があります。
型: | String[] |
Aliases: | Cn |
配置: | 0 |
規定値: | Local computer |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ConfigurationName
新しい PSSession に使用されるセッション構成を指定します。
セッション構成の構成名または完全修飾リソース URI を入力します。 構成名のみを指定すると、次のスキーマ URI が先頭に付加されます: http://schemas.microsoft.com/PowerShell
。
SSH と共に使用する場合、このパラメーターは、 sshd_config
で定義されているターゲットで使用するサブシステムを指定します。 SSH の既定値は、 powershell
サブシステムです。
セッションのセッション構成は、リモート コンピューター上にあります。 指定したセッション構成がリモート コンピューターに存在しない場合、コマンドは失敗します。
既定値は、ローカル コンピューターの $PSSessionConfigurationName
基本設定変数の値です。 この基本設定変数が設定されていない場合、既定値は Microsoft.PowerShell です。 詳細については、「 about_Preference_Variables」を参照してください。
型: | String |
配置: | Named |
規定値: | $PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-ConnectingTimeout
最初の SSH 接続が完了するまでの時間をミリ秒単位で指定します。 指定した時間内に接続が完了しない場合は、エラーが返されます。
このパラメーターは PowerShell 7.2 で導入されました
型: | Int32 |
配置: | Named |
規定値: | Unlimited |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ConnectionUri
セッションの接続エンドポイントを定義する Uniform Resource Identifier (URI) を指定します。 URI は完全修飾名にする必要があります。
この文字列の形式は次のとおりです。
<Transport>://<ComputerName>:<Port>/<ApplicationName>
既定値は、次のとおりです。
http://localhost:5985/WSMAN
接続 URI を指定しない場合は、 UseSSL パラメーターと Port パラメーターを使用して接続 URI 値を指定できます。
URI の Transport セグメントの有効な値は HTTP と HTTPS です。 トランスポート セグメントで接続 URI を指定してもポートを指定しない場合、セッションは標準ポート (HTTP の場合は 80、HTTPS の場合は 443) で作成されます。 PowerShell リモート処理に既定のポートを使用するには、HTTP の場合はポート 5985、HTTPS には 5986 を指定します。
宛先コンピューターが接続を別の URI にリダイレクトする場合、コマンドで AllowRedirection パラメーターを使用しない限り、PowerShell はリダイレクトを禁止します。
型: | Uri[] |
Aliases: | URI, CU |
配置: | 0 |
規定値: | http://localhost:5985/WSMAN |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ContainerId
コンテナー ID の配列を指定します。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Credential
この処理を実行するアクセス許可を持つユーザー アカウントを指定します。 既定値は現在のユーザーです。
User01 や Domain01\User01 などのユーザー名を入力するか、Get-Credential
コマンドレットによって生成されたPSCredential オブジェクトを入力します。 ユーザー名を入力すると、パスワードの入力を求められます。
資格情報は PSCredential オブジェクトに格納され、パスワードは SecureString として格納されます。
Note
SecureString データ保護の詳細については、「 SecureString のセキュリティ保護方法」を 参照してください。
型: | PSCredential |
配置: | Named |
規定値: | Current user |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-EnableNetworkAccess
このコマンドレットが、ループバック セッションに対話型セキュリティ トークンを追加することを示します。 対話型トークンを使用すると、他のコンピューターからデータを取得するコマンドをループバック セッションで実行できます。 たとえば、リモート コンピューターからローカル コンピューターに XML ファイルをコピーするコマンドをセッションで実行できます。
ループバック セッションは、同じコンピューターで開始および終了する PSSession です。 ループバック セッションを作成するには、 ComputerName パラメーターを省略するか、値を dot (.
)、localhost、またはローカル コンピューターの名前に設定します。
既定では、ループバック セッションはネットワーク トークンを使用して作成され、リモート コンピューターに対して認証するための十分なアクセス許可が提供されない可能性があります。
EnableNetworkAccess パラメーターは、ループバック セッションでのみ有効です。 リモート コンピューターでセッションを作成するときに EnableNetworkAccess を使用すると、コマンドは成功しますが、パラメーターは無視されます。
セッション資格情報を他のコンピューターに委任する Authentication パラメーターの CredSSP 値を使用して、ループバック セッションでリモート アクセスを許可できます。
コンピューターを悪意のあるアクセスから保護するために、対話型トークンを持つ切断されたループバック セッション ( EnableNetworkAccess を使用して作成されたもの) は、セッションが作成されたコンピューターからのみ再接続できます。 CredSSP 認証を使用するセッションが切断された場合には、他のコンピューターから再接続することができます。 詳細については、Disconnect-PSSession
を参照してください。
このパラメーターは PowerShell 3.0 で導入されました。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-FilePath
このコマンドレットが 1 つ以上のリモート コンピューターで実行されるローカル スクリプトを指定します。 スクリプトのパスとファイル名を入力するか、スクリプト パスをパイプして Invoke-Command
します。 スクリプトは、ローカル コンピューターまたはローカル コンピューターがアクセスできるディレクトリに存在する必要があります。 ArgumentList を使用して、スクリプト内のパラメーターの値を指定します。
このパラメーターを使用すると、PowerShell は、指定されたスクリプト ファイルの内容をスクリプト ブロックに変換し、スクリプト ブロックをリモート コンピューターに送信して、リモート コンピューター上で実行します。
型: | String |
Aliases: | PSPath |
配置: | 1 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-HideComputerName
このコマンドレットは、出力表示から各オブジェクトのコンピューター名を省略することを示します。 既定では、オブジェクトを生成したコンピューター名が画面に表示されます。
このパラメーターが有効なのは、出力の表示だけです。 オブジェクトは変更されません。
型: | SwitchParameter |
Aliases: | HCN |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-HostName
Secure Shell (SSH) ベースの接続のコンピューター名の配列を指定します。 これは ComputerName パラメーターに似ていますが、リモート コンピューターへの接続は Windows WinRM ではなく SSH を使用して行われます。
このパラメーターは、PowerShell 6.0 で導入されました。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-InDisconnectedSession
このコマンドレットが、切断されたセッションでコマンドまたはスクリプトを実行することを示します。
InDisconnectedSession パラメーターを使用すると、各リモート コンピューターで永続的なセッションが作成Invoke-Command
、ScriptBlock または FilePath パラメーターで指定されたコマンドが開始され、セッションから切断されます。 コマンドは、切断されたセッションで引き続き実行されます。 InDisconnectedSession を使用すると、リモート セッションへの接続を維持せずにコマンドを実行できます。 また、結果が返される前にセッションが切断されるため、 InDisconnectedSession では、セッション間で分割されるのではなく、すべてのコマンド結果が再接続されたセッションに確実に返されます。
InDisconnectedSession Session パラメーターまたは AsJob パラメーターでは使用できません。
InDisconnectedSessionを使用するコマンドは、切断されたセッションを表すPSSession オブジェクトを返します。 コマンド出力は返されません。 切断されたセッションに接続するには、 Connect-PSSession
または Receive-PSSession
コマンドレットを使用します。 セッションで実行されたコマンドの結果を取得するには、 Receive-PSSession
コマンドレットを使用します。 切断されたセッションで出力を生成するコマンドを実行するには、 OutputBufferingMode セッション オプションの値を Drop に設定します。 切断されたセッションに接続する場合は、セッションを削除する前に接続するのに十分な時間が確保されるように、セッションでアイドル タイムアウトを設定します。
出力バッファリング モードとアイドル タイムアウトは、 SessionOption パラメーターまたは $PSSessionOption
基本設定変数で設定できます。 セッション オプションの詳細については、「 New-PSSessionOption
と about_Preference_Variables」を参照してください。
切断されたセッション機能の詳細については、「 about_Remote_Disconnected_Sessions」を参照してください。
このパラメーターは PowerShell 3.0 で導入されました。
型: | SwitchParameter |
Aliases: | Disconnected |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-InputObject
コマンドへの入力を指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。
InputObject パラメーターを使用する場合は、ScriptBlock パラメーターの値に$Input
自動変数を使用して、入力オブジェクトを表します。
型: | PSObject |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-JobName
バックグラウンド ジョブのフレンドリ名を指定します。 既定では、ジョブには Job<n>
という名前が付けられます。ここで、 <n>
は序数です。
コマンドで JobName パラメーターを使用すると、コマンドはジョブとして実行され、 Invoke-Command
は、コマンドに AsJob を含めていなくてもジョブ オブジェクトを返します。
PowerShell バックグラウンド ジョブの詳細については、「 about_Jobs」を参照してください。
型: | String |
配置: | Named |
規定値: | Job<n> |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-KeyFilePath
リモート コンピューターでユーザーを認証するために Secure Shell (SSH) によって使用されるキー ファイル パスを指定します。
SSH を使用すると、基本パスワード認証の代わりに、秘密キーと公開キーを使用してユーザー認証を実行できます。 リモート コンピューターがキー認証用に構成されている場合、このパラメーターを使用して、ユーザーを識別するキーを指定できます。
このパラメーターは、PowerShell 6.0 で導入されました。
型: | String |
Aliases: | IdentityFilePath |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-NoNewScope
このコマンドレットが現在のスコープで指定されたコマンドを実行することを示します。 既定では、 Invoke-Command
は独自のスコープでコマンドを実行します。
このパラメーターは、現在のセッションで実行されるコマンド、つまり ComputerName パラメーターと Session パラメーターの両方を省略するコマンドでのみ有効です。
このパラメーターは PowerShell 3.0 で導入されました。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Options
リモート SSH ベースのセッションに接続するときに使用される SSH オプションのハッシュテーブルを指定します。 使用可能なオプションは、unix ベースのバージョンの ssh コマンドでサポートされている任意の値です。
パラメーターによって明示的に渡された値は、 Options ハッシュテーブルで渡された値よりも優先されます。 たとえば、Port パラメーターを使用すると、Options ハッシュテーブルで渡されたPort
キーと値のペアがオーバーライドされます。
このパラメーターは PowerShell 7.3 で追加されました。
型: | Hashtable |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Port
このコマンドに使用するリモート コンピューター上のネットワーク ポートを指定します。 リモート コンピューターに接続するには、リモート コンピューターで、接続に使用されるポートをリッスンすることが必要です。 既定のポートは 5985 (HTTP の場合は WinRM ポート) と 5986 (HTTPS の場合は WinRM ポート) です。
別のポートを使用する場合には、そのポートでリッスンするようにリモート コンピューターの WinRM リスナーを構成します。 リスナーを構成するには、PowerShell プロンプトで次の 2 つのコマンドを入力します。
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>
必要な場合を除き、 Port パラメーターは使用しないでください。 コマンドに設定されているポートは、コマンドが実行されるすべてのコンピューターまたはセッションに適用されます。 代替ポートの設定によっては、コマンドがすべてのコンピューターで実行されない場合があります。
型: | Int32 |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-RemoteDebug
リモート PowerShell セッションでデバッグ モードで呼び出されたコマンドを実行するために使用されます。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-RunAsAdministrator
このコマンドレットが管理者としてコマンドを呼び出したことを示します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ScriptBlock
実行するコマンドを指定します。 コマンドを中かっこ ({ }
) で囲み、スクリプト ブロックを作成します。 Invoke-Command
を使用してコマンドをリモートで実行すると、コマンド内のすべての変数がリモート コンピューターで評価されます。
Note
scriptblock のパラメーターは、 ArgumentList から位置によってのみ渡すことができます。 スイッチ パラメーターを位置で渡すことはできません。 SwitchParameter 型のように動作するパラメーターが必要な場合は、代わりに Boolean 型を使用します。
型: | ScriptBlock |
Aliases: | Command |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Session
このコマンドレットがコマンドを実行するセッションの配列を指定します。 PSSessionオブジェクトを含む変数、またはPSSessionオブジェクト (New-PSSession
やGet-PSSession
コマンドなど) を作成または取得するコマンドを入力します。
PSSessionを作成すると、PowerShell はリモート コンピューターへの永続的な接続を確立します。 PSSessionを使用して、データを共有する一連の関連コマンドを実行します。 1 つのコマンドまたは関連のない一連のコマンドを実行するには、 ComputerName パラメーターを使用します。 詳細については、 about_PSSessionsを参照してください。
型: | PSSession[] |
配置: | 0 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SessionName
切断されたセッションのフレンドリ名を指定します。 この名前を使用して、後続のコマンド ( Get-PSSession
コマンドなど) でセッションを参照できます。 このパラメーターは、 InDisconnectedSession パラメーターでのみ有効です。
このパラメーターは PowerShell 3.0 で導入されました。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SessionOption
セッションの詳細オプションを指定します。 SessionOption オブジェクト (New-PSSessionOption
コマンドレットを使用して作成するオブジェクトなど) を入力するか、キーがセッション オプション名で値がセッション オプション値であるハッシュ テーブルを入力します。
Note
SessionOptionにハッシュテーブルを指定すると、PowerShell はハッシュテーブルを System.Management.Autiomation.Remoting.PSSessionOption オブジェクトに変換します。 ハッシュテーブルで指定されたキーの値は、オブジェクトの一致するプロパティにキャストされます。 これは、 New-PSSessionOption
の呼び出しとは異なる動作をします。 たとえば、タイムアウト プロパティの System.TimeSpan 値 ( IdleTimeout など) は、整数値をミリ秒ではなくティックに変換します。
PSSessionOption オブジェクトとそのプロパティの詳細については、「PSSessionOption」を参照してください。
オプションの既定値は、設定されている場合、 $PSSessionOption
基本設定変数の値によって決まります。 それ以外の場合、既定値はセッション構成で設定されたオプションによって決まります。
セッション オプションの値は、 $PSSessionOption
基本設定変数およびセッション構成で設定されたセッションの既定値よりも優先されます。 ただし、セッション構成で設定された最大値、クォータ、または制限よりも優先されません。
デフォルト値を含むセッション・オプションの説明については、 New-PSSessionOption
を参照してください。 $PSSessionOption
基本設定変数の詳細については、about_Preference_Variablesを参照してください。 セッション構成の詳細については、「 about_Session_Configurations」を参照してください。
型: | PSSessionOption |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SSHConnection
このパラメーターはハッシュ テーブルの配列を受け取ります。各ハッシュ テーブルには、Secure Shell (SSH) 接続を確立するために必要な 1 つ以上の接続パラメーターが含まれています。 SSHConnection パラメーターは、各セッションに異なる接続情報が必要な複数のセッションを作成する場合に便利です。
ハッシュテーブルには、次のメンバーがあります。
- ComputerName (または HostName)
- ポート
- UserName
- KeyFilePath (または IdentityFilePath)
ComputerName (または HostName) は、必要な唯一のキーと値のペアです。
このパラメーターは、PowerShell 6.0 で導入されました。
型: | Hashtable[] |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SSHTransport
Secure Shell (SSH) を使用してリモート接続が確立されていることを示します。
既定では、PowerShell は Windows WinRM を使用してリモート コンピューターに接続します。 このスイッチにより、PowerShell は SSH ベースのリモート接続を確立するために HostName パラメーターを使用するように強制されます。
このパラメーターは、PowerShell 6.0 で導入されました。
型: | SwitchParameter |
指定可能な値: | true |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Subsystem
新しい PSSession に使用される SSH サブシステムを指定します。
これは、sshd_configで定義されているターゲットで使用するサブシステムを指定します。 サブシステムは、定義済みのパラメーターを使用して PowerShell の特定のバージョンを開始します。 指定したサブシステムがリモート コンピューターに存在しない場合、コマンドは失敗します。
このパラメーターを使用しない場合、既定値は powershell
サブシステムです。
型: | String |
配置: | Named |
規定値: | powershell |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ThrottleLimit
このコマンドを実行するために確立できる最大コンカレント接続数を指定します。 このパラメーターを省略した場合、または値 0 を入力した場合は、既定値の 32 が使用されます。
スロットル制限は現在のコマンドのみに適用され、セッションまたはコンピューターには適用されません。
型: | Int32 |
配置: | Named |
規定値: | 32 |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-UserName
リモート コンピューターでコマンドを実行するために使用するアカウントのユーザー名を指定します。 ユーザー認証方法は、リモート コンピューターでの Secure Shell (SSH) の構成方法によって異なります。
基本パスワード認証用に SSH が構成されている場合は、ユーザー パスワードの入力を求められます。
SSH がキー ベースのユーザー認証用に構成されている場合は、 KeyFilePath パラメーターを使用してキー ファイル パスを指定でき、パスワード プロンプトは表示されません。 クライアント ユーザー キー ファイルが SSH の既知の場所にある場合は、キーベースの認証に KeyFilePath パラメーターは必要ありません。ユーザー認証はユーザー名に基づいて自動的に行われます。 詳細については、キーベースのユーザー認証に関するプラットフォームの SSH ドキュメントを参照してください。
これは必須のパラメーターではありません。 UserName パラメーターが指定されていない場合は、現在ログオンしているユーザー名が接続に使用されます。
このパラメーターは、PowerShell 6.0 で導入されました。
型: | String |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-UseSSL
このコマンドレットが Secure Sockets Layer (SSL) プロトコルを使用してリモート コンピューターへの接続を確立することを示します。 既定では、SSL は使用されません。
WS-Management は、ネットワーク経由で送信されるすべての PowerShell コンテンツを暗号化します。 UseSSL パラメーターは、HTTP ではなく HTTPS 経由でデータを送信する追加の保護です。
このパラメーターを使用しても、コマンドに使用されているポートで SSL を使用できない場合、コマンドは失敗します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-VMId
仮想マシンの ID の配列を指定します。
型: | Guid[] |
Aliases: | VMGuid |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-VMName
仮想マシンの名前の配列を指定します。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
入力
スクリプト ブロック内のコマンドをパイプ処理して、 Invoke-Command
できます。 $Input
自動変数を使用して、コマンド内の入力オブジェクトを表します。
出力
System.Management.Automation.PSRemotingJob
AsJob パラメーターを使用すると、このコマンドレットはジョブ オブジェクトを返します。
InDisconnectedSession パラメーターを使用すると、このコマンドレットは PSSession オブジェクトを返します。
既定では、このコマンドレットは呼び出されたコマンドの出力を返します。これは、 ScriptBlock パラメーターの値です。
メモ
PowerShell には、 Invoke-Command
の次のエイリアスが含まれています。
- すべてのプラットフォーム:
icm
Windows Vista 以降のバージョンの Windows オペレーティング システムでは、Invoke-Command
の ComputerName パラメーターを使用してローカル コンピューターでコマンドを実行するには、管理者として実行 オプションを使用して PowerShell を実行する必要があります。
複数のコンピューターでコマンドを実行すると、PowerShell は一覧に表示される順序でコンピューターに接続します。 ただし、コマンド出力は、リモート コンピューターから受信した順序で表示されます。これは異なる場合があります。
Invoke-Command
実行されたコマンドの結果のエラーは、コマンドの結果に含まれます。
ローカル コマンドでは "終了するエラー" となるエラーは、リモート コマンドでは "終了しないエラー" として扱われます。 この方法により、1 台のコンピューターで終了エラーが発生しても、実行されているすべてのコンピューターでコマンドが閉じないようにします。 また、この方法は、1 台のコンピューターでリモート コマンドを実行する場合にも、使用されます。
リモート コンピューターがローカル コンピューターが信頼するドメインにない場合、コンピューターはユーザーの資格情報を認証できない可能性があります。 WS-Management で信頼されたホストの一覧にリモート コンピューターを追加するには、 WSMAN
プロバイダーで次のコマンドを使用します。ここで、 <Remote-Computer-Name>
はリモート コンピューターの名前です。
Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>
InDisconnectedSession パラメーターを使用してPSSessionを切断すると、セッション状態は Disconnected None。 State プロパティの値は、現在のセッションに対する相対値です。 Disconnected の値は、PSSessionが現在のセッションに接続されていないことを意味します。 ただし、 PSSession がすべてのセッションから切断されているわけではありません。 別のセッションに接続されている可能性があるためです。 セッションに接続できるか再接続できるかを判断するには、 Availability プロパティを使用します。
Availability None の値は、セッションに接続できることを示します。 Busy の値は、別のセッションに接続されているため、PSSession に接続できないことを示します。 セッションの State プロパティの値の詳細については、「 RunspaceState」を参照してください。 セッションの Availability プロパティの値の詳細については、「 RunspaceAvailability」を参照してください。
HostName および SSHConnection パラメーターは、PowerShell 6.0 以降に含まれていました。 Secure Shell (SSH) に基づく PowerShell リモート処理を提供するために追加されました。 PowerShell と SSH は、複数のプラットフォーム (Windows、Linux、macOS) でサポートされており、PowerShell と SSH がインストールおよび構成されているこれらのプラットフォームで PowerShell リモート処理が機能します。 これは、WinRM に基づく以前の Windows のみのリモート処理とは別であり、WinRM 固有の機能と制限の多くは適用されません。 たとえば、WinRM ベースのクォータ、セッション オプション、カスタム エンドポイント構成、切断/再接続機能は現在サポートされていません。 PowerShell SSH リモート処理を設定する方法の詳細については、「 PowerShell Remoting over SSH」を参照してください。
ssh
実行可能ファイルは、次のソースから次の順序で構成データを取得します。
- コマンド ライン オプション
- ユーザーの構成ファイル (~/.ssh/config)
- システム全体の構成ファイル (/etc/ssh/ssh_config)
次のコマンドレット パラメーターは、 ssh
パラメーターとオプションにマップされます。
コマンドレット パラメーター | ssh パラメーター | 同等の ssh -o オプション |
---|---|---|
-KeyFilePath |
-i <KeyFilePath> |
-o IdentityFile=<KeyFilePath> |
-UserName |
-l <UserName> |
-o User=<UserName> |
-Port |
-p <Port> |
-o Port=<Port> |
-ComputerName -Subsystem |
-s <ComputerName> <Subsystem> |
-o Host=<ComputerName> |
パラメーターによって明示的に渡された値は、 Options ハッシュテーブルで渡された値よりも優先されます。 ssh_config
ファイルの詳細については、「ssh_config(5)」を参照してください。
関連リンク
PowerShell