Invoke-Command
在本機和遠端電腦上執行命令。
語法
InProcess (預設值)
Invoke-Command
[-ScriptBlock] <ScriptBlock>
[-NoNewScope]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Session
Invoke-Command
[[-Session] <PSSession[]>]
[-ScriptBlock] <ScriptBlock>
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
FilePathRunspace
Invoke-Command
[[-Session] <PSSession[]>]
[-FilePath] <String>
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
FilePathComputerName
Invoke-Command
[[-ComputerName] <String[]>]
[-FilePath] <String>
[-Credential <PSCredential>]
[-Port <Int32>]
[-UseSSL]
[-ConfigurationName <String>]
[-ApplicationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <String[]>]
[-HideComputerName]
[-JobName <String>]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
ComputerName
Invoke-Command
[[-ComputerName] <String[]>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Port <Int32>]
[-UseSSL]
[-ConfigurationName <String>]
[-ApplicationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-InDisconnectedSession]
[-SessionName <String[]>]
[-HideComputerName]
[-JobName <String>]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-CertificateThumbprint <String>]
[<CommonParameters>]
Uri
Invoke-Command
[[-ConnectionUri] <Uri[]>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <String>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[-CertificateThumbprint <String>]
[<CommonParameters>]
FilePathUri
Invoke-Command
[[-ConnectionUri] <Uri[]>]
[-FilePath] <String>
[-Credential <PSCredential>]
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-InDisconnectedSession]
[-HideComputerName]
[-JobName <String>]
[-AllowRedirection]
[-SessionOption <PSSessionOption>]
[-Authentication <AuthenticationMechanism>]
[-EnableNetworkAccess]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
VMId
Invoke-Command
[-ScriptBlock] <ScriptBlock>
[-VMId] <Guid[]>
-Credential <PSCredential>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
VMName
Invoke-Command
[-ScriptBlock] <ScriptBlock>
-Credential <PSCredential>
-VMName <String[]>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
FilePathVMId
Invoke-Command
[-FilePath] <String>
[-VMId] <Guid[]>
-Credential <PSCredential>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
FilePathVMName
Invoke-Command
[-FilePath] <String>
-Credential <PSCredential>
-VMName <String[]>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
ContainerId
Invoke-Command
[-ScriptBlock] <ScriptBlock>
-ContainerId <String[]>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-RunAsAdministrator]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
FilePathContainerId
Invoke-Command
[-FilePath] <String>
-ContainerId <String[]>
[-ConfigurationName <String>]
[-ThrottleLimit <Int32>]
[-AsJob]
[-HideComputerName]
[-JobName <String>]
[-RunAsAdministrator]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Description
Invoke-Command Cmdlet 會在本機或遠端電腦上執行命令,並傳回命令的所有輸出,包括錯誤。 您可以使用單一 Invoke-Command 命令,在多部計算機上執行命令。
若要在遠端電腦上執行單一命令,請使用 ComputerName 參數。 若要執行一系列共享數據的相關命令,請使用 New-PSSession Cmdlet 在遠端電腦上建立 PSSession (持續性連線),然後使用 的 Invoke-Command 參數,在 PSSession中執行命令。 若要在中斷連線的會話中執行命令,請使用 InDisconnectedSession 參數。 若要在背景作業中執行命令,請使用 AsJob 參數。
您也可以在本機計算機上使用 Invoke-Command,將執行腳本區塊當做命令使用。 PowerShell 會立即在目前範圍的子範圍中執行腳本區塊。
在使用 Invoke-Command 在遠端電腦上執行命令之前,請先讀取 about_Remote。
某些程式代碼範例會使用曲線來減少行長。 如需詳細資訊,請參閱 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 Cmdlet 會在 Server02 遠端電腦上建立工作階段,並將它儲存在 $s 變數中。 一般而言,只有在遠端電腦上執行一系列命令時,才會建立會話。
Invoke-Command Cmdlet 會在 Server02 上執行 Get-Culture 命令。
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
前兩個命令會使用 Invoke-Command 參數,在 Server02 遠端電腦上執行命令。 第一個命令會使用 Get-Process Cmdlet 來取得遠端電腦上的 PowerShell 進程,並將它儲存在 $p 變數中。 第二個命令會取得 PowerShell 進程的 VirtualMemorySize 屬性值。
當您使用 ComputerName 參數時,PowerShell 會建立新的會話來執行命令。
當命令完成時,工作階段會關閉。
$p 變數是在一個連接中建立的,但它不存在於為第二個命令建立的連線中。
此問題可藉由在遠端電腦上建立持續性會話,然後在相同的會話中執行這兩個命令來解決。
New-PSSession Cmdlet 會在 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
$command 變數會儲存格式化為腳本區塊的 Get-EventLog 命令。
Invoke-Command 會執行儲存在 S1 和 S2 遠端電腦上的 $command 命令。
範例 6:在數部計算機上執行單一命令
此範例示範如何使用 Invoke-Command 在多部計算機上執行單一命令。
$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
}
因為只會執行一個命令,因此您不需要建立每部計算機的持續性連線。 相反地,命令會使用 ComputerName 參數來指出電腦。 若要指定計算機,它會使用 Get-Content Cmdlet 來取得 Machine.txt 檔案的內容,也就是計算機名稱的檔案。
Invoke-Command Cmdlet 會在遠端電腦上執行 Get-Host 命令。 它會使用點表示法來取得PowerShell主機的 Version 屬性。
這些命令會一次執行一個。 當命令完成時,來自所有計算機的命令輸出會儲存在 $version 變數中。 輸出包含數據的來源計算機名稱。
範例 8:在數部遠端電腦上執行背景工作
此範例會在兩部遠端電腦上執行命令。
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 Cmdlet 會在 Server01 和 Server02 遠端電腦上建立會話。
Invoke-Command Cmdlet 會在每個工作中執行背景工作。 此命令會使用 AsJob 參數,以背景工作的形式執行命令。 此命令會傳回作業物件,其中包含兩個子工作物件,其中一個用於兩部遠端計算機上執行的每個作業。
Get-Job 命令會將作業物件儲存在 $j 變數中。 接著會將 $j 變數傳送至 Format-List Cmdlet,以在清單中顯示作業物件的所有屬性。 最後一個命令會取得作業的結果。 它會使用管線將 $j 中的作業物件傳送至 Receive-Job Cmdlet,並將結果儲存在 $results 變數中。
範例 9:在遠端電腦上執行的命令中包含局部變數
這個範例示範如何在遠端電腦上執行的命令中包含局部變數的值。 此命令會使用 Using: 範圍修飾詞來識別遠端命令中的局部變數。 根據預設,系統會假設所有變數都會在遠端會話中定義。
Using: 範圍修飾詞是在PowerShell 3.0中引進的。 如需 Using: 範圍修飾詞的詳細資訊,請參閱 about_Remote_Variables 和 about_Scopes。
$Log = 'Windows PowerShell'
Invoke-Command -ComputerName Server01 -ScriptBlock {
Get-EventLog -LogName $Using:Log -Newest 10
}
變數 $Log 會儲存事件記錄檔 Windows PowerShell 的名稱。
Invoke-Command Cmdlet 會在 Server01 上執行 Get-EventLog,以從事件記錄檔取得十個最新的事件。 LogName 參數的值是 $Log 變數,其前面會加上Using:範圍修飾詞,以指出它是在本機會話中建立的,而不是在遠端會話中建立的。
範例 10:隱藏計算機名稱
此範例顯示使用 Invoke-Command 參數的效果。
HideComputerName 不會變更此 Cmdlet 傳回的物件。 它只會變更顯示。 您仍然可以使用 Format Cmdlet 來顯示任何受影響物件的 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
前兩個命令會使用 Invoke-Command 來執行 PowerShell 程式的 Get-Process 命令。 第一個命令的輸出包含 PsComputerName 屬性,其中包含命令執行所在的計算機名稱。 第二個命令的輸出會使用 HideComputerName,不包含 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 會使用 ScriptBlock 參數來定義兩個變數,$Param1 和 $Param2。
Get-ChildItem 會使用具名參數、名稱 和 包含變數名稱。
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 參數,Get-ChildItem 指定 $args[0] 和 $args[1] 陣列值。
ArgumentList 會將 $args 陣列值傳遞至 Get-ChildItem 和 Filter 參數位置。
範例 13:在文本檔中列出的所有計算機上執行腳本
此範例會使用 Invoke-Command Cmdlet,在 Sample.ps1 檔案中列出的所有電腦上執行 Servers.txt 腳本。 命令會使用 FilePath 參數來指定腳本檔案。 此命令可讓您在遠端電腦上執行腳本,即使遠端電腦無法存取腳本檔案也一樣。
$parameters = @{
ComputerName = (Get-Content Servers.txt)
FilePath = 'C:\Scripts\Sample.ps1'
ArgumentList = 'Process', 'Service'
}
Invoke-Command @parameters
當您提交命令時,Sample.ps1 檔案的內容會複製到腳本區塊中,而且腳本區塊會在每部遠端計算機上執行。 此程式相當於使用 ScriptBlock 參數來提交腳本的內容。
範例 14:使用 URI 在遠端電腦上執行命令
此範例示範如何在統一資源標識碼 (URI) 所識別的遠端電腦上執行命令。 這個特定範例會在遠端 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 Cmdlet,將 Windows Live ID 認證儲存在 $LiveCred 變數中。 PowerShell 會提示使用者輸入 Windows Live ID 認證。
$parameters 變數是一個哈希表,其中包含要傳遞至 Invoke-Command Cmdlet 的參數。
Invoke-Command Cmdlet 會使用 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 Cmdlet 會建立工作階段選項物件,讓遠端端在評估傳入 HTTPS 連線時,不會驗證證書頒發機構單位、標準名稱和撤銷清單。
SessionOption 物件會儲存在 $so 變數中。
備註
停用這些檢查很方便進行疑難解答,但顯然不安全。
Invoke-Command Cmdlet 會從遠端執行 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 Cmdlet 會建立儲存在 變數中的 $max 物件。 此命令會使用 MaximumRedirection 參數,將 PSSessionOption 物件的 MaximumConnectionRedirectionCount 屬性設定為 1。
Invoke-Command Cmdlet 會在遠端Microsoft Exchange Server 上執行 Get-Mailbox 命令。
AllowRedirection 參數提供將連線重新導向至替代端點的明確許可權。
SessionOption 參數會使用儲存在 $max 變數中的會話物件。
因此,如果 ConnectionURI 所指定的遠端電腦 傳回重新導向訊息,PowerShell 會重新導向連線,但如果新的目的地傳回另一個重新導向訊息,則會超過重新導向計數值 1,且 Invoke-Command 傳回非終止錯誤。
範例 17:存取遠端會話中的網路共用
此範例示範如何從遠端會話存取網路共用。 三部計算機可用來示範此範例。 Server01 是本機計算機,Server02 是遠端計算機,而 Net03 則包含網路共用。 Server01 會連線到 Server02,然後 Server02 對 Net03 執行第二個躍點來存取網路共用。 如需 PowerShell 遠端功能如何在電腦之間支援躍點的詳細資訊,請參閱 在 PowerShell 遠端處理中建立第二個躍點。
必要的認證安全性支援提供者 (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 Cmdlet 會啟用從 Server01 本機電腦到 Server02 遠端電腦的 CredSSP 委派。
Role 參數會指定 Client 在本機電腦上設定 CredSSP 用戶端設定。
New-PSSession 會為 Server02 建立 PSSession 物件,並將物件儲存在 $s 變數中。
Invoke-Command Cmdlet 會使用 $s 變數來連線到遠端電腦 Server02。
ScriptBlock 參數會在遠端電腦上執行 Enable-WSManCredSSP。
Role 參數會指定 Server,以在遠端電腦上設定 CredSSP 伺服器設定。
$parameters 變數包含連線到網路共享的參數值。
Invoke-Command Cmdlet 會在 Get-Item的工作階段中執行 $s 命令。 此命令會從 \\Net03\Scripts 網路共用取得腳本。 此命令會使用 Authentication 參數搭配 CredSSP 值,以及值為 Domain01\Admin01的 Credential 參數。
範例 18:在許多遠端電腦上啟動腳本
此範例會在一百多部計算機上執行腳本。 為了將本機計算機的影響降到最低,它會連線到每部計算機、啟動腳本,然後與每部計算機中斷連線。 腳本會繼續在中斷連線的會話中執行。
$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 Cmdlet。
參數
-AllowRedirection
允許將此連線重新導向至替代的統一資源標識碼(URI)。
當您使用 ConnectionURI 參數時,遠端目的地可以傳回指示以重新導向至不同的 URI。 根據預設,PowerShell 不會重新導向連線,但您可以使用此參數來允許它重新導向連線。
您也可以變更 MaximumConnectionRedirectionCount 會話選項值,來限制重新導向連線的次數。 使用 Cmdlet 的 New-PSSessionOption 參數,或設定 預設變數的 $PSSessionOption 屬性。 預設值為 5。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ApplicationName
指定連線 URI 的應用程式名稱區段。 當您不使用命令中的 ConnectionURI 參數時,請使用此參數來指定應用程式名稱。
預設值是本機計算機上 $PSSessionApplicationName 喜好設定變數的值。 如果未定義此喜好設定變數,預設值為 WSMAN。 此值適用於大部分使用。 如需詳細資訊,請參閱 about_Preference_Variables。
WinRM 服務會使用應用程式名稱來選取接聽程式以服務連線要求。 此參數的值應該符合遠端電腦上接聽程式 URLPrefix 屬性的值。
參數屬性
| 類型: | String |
| 預設值: | $PSSessionApplicationName if set on the local computer, otherwise WSMAN |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-ArgumentList
提供 scriptblock 的參數值。 腳本區塊中的參數會依提供給 ArgumentList的陣列值位置傳遞。 這稱為陣列展開。 如需 ArgumentList行為的詳細資訊,請參閱 about_Splatting。
參數屬性
| 類型: | Object[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 參數 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-AsJob
指出此 Cmdlet 會在遠端電腦上以背景工作的形式執行命令。 使用此參數來執行需要大量時間才能完成的命令。
當您使用 AsJob 參數時,命令會傳回代表作業的物件,然後顯示命令提示字元。 您可以在作業完成時繼續在工作階段中工作。 若要管理作業,請使用 *-Job Cmdlet。 若要取得作業結果,請使用 Receive-Job Cmdlet。
AsJob 參數類似於使用 Invoke-Command Cmdlet 從遠端執行 Start-Job Cmdlet。 不過,AsJob時,即使作業是在遠端電腦上執行,還是會在本機電腦上建立作業。 遠端作業的結果會自動傳回至本機計算機。
如需 PowerShell 背景工作的詳細資訊,請參閱 about_Jobs 和 about_Remote_Jobs。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Session
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathRunspace
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Authentication
指定用來驗證使用者認證的機制。 CredSSP 驗證僅適用於 Windows Vista、Windows Server 2008 和更新版本的 Windows作系統。
此參數可接受的值如下:
- 預設
- 基本
- Credssp
- 摘要
- Kerberos
- 談判
- 使用隱式憑證進行協商
預設值為 Default。
如需此參數值的詳細資訊,請參閱 AuthenticationMechanism 列舉。
謹慎
認證安全性支援提供者(CredSSP)驗證的設計目的是將使用者的認證傳遞給遠端電腦進行認證,適用於需要在多個資源上進行驗證的命令,例如存取遠端網路共用。 此機制會增加遠端作業的安全性風險。 如果遠端電腦遭到入侵,傳遞給它的認證可用來控制網路會話。 如需詳細資訊,請參閱 認證安全性支援提供者。
參數屬性
| 類型: | AuthenticationMechanism |
| 預設值: | Default |
| 接受的值: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-CertificateThumbprint
指定具有權限將斷線會話重新連線之用戶帳戶的數位公鑰憑證(X509)。 輸入憑證的指紋。
憑證用於客戶端憑證型驗證。 它們只能對應至本機用戶帳戶,而且無法與網域帳戶搭配使用。
若要取得憑證指紋,請使用PowerShell憑證: 磁碟驅動器中的 Get-Item 或 Get-ChildItem 命令。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ComputerName
指定命令執行所在的計算機。 預設值為本機電腦。
當您使用 ComputerName 參數時,PowerShell 會建立一個暫存連線,該連接只用來執行指定的命令,然後關閉。 如果您需要持續性連線,請使用 Session 參數。
在逗號分隔清單中,輸入一或多部計算機的NETBIOS名稱、IP 位址或完整域名。 若要指定本機計算機,請輸入計算機名稱、localhost 或點 (.)。
若要在 ComputerName的值中使用 IP 位址,命令必須包含 Credential 參數。 計算機必須針對 HTTPS 傳輸進行設定,或遠端電腦的 IP 位址必須包含在本機電腦的 WinRM TrustedHosts 清單中。 如需將電腦名稱新增至 TrustedHosts 列表的指示,請參閱 如何將電腦新增至信任主機清單。
在 Windows Vista 和更新版本的 Windows作系統上,若要將本機電腦包含在 ComputerName的值中,您必須使用 [以 系統管理員身分執行] 選項 執行 PowerShell。
參數屬性
| 類型: | String[] |
| 預設值: | Local computer |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | Cn |
參數集
FilePathComputerName
| Position: | 0 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | 0 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ConfigurationName
指定用於新 PSSession的會話組態。
輸入工作階段組態的組態名稱或完整限定資源URI。 如果您只指定組態名稱,則前面會加上下列架構 URI:http://schemas.microsoft.com/PowerShell。
會話的會話組態位於遠端電腦上。 如果遠端電腦上沒有指定的工作階段組態,命令會失敗。
預設值是本機計算機上 $PSSessionConfigurationName 喜好設定變數的值。 如果未設定這個喜好設定變數,則預設值為 Microsoft.PowerShell。 如需詳細資訊,請參閱 about_Preference_Variables。
參數屬性
| 類型: | String |
| 預設值: | $PSSessionConfigurationName if set on the local computer, otherwise Microsoft.PowerShell |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
VMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
VMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathVMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathVMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
ContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-ConnectionUri
指定定義工作階段連接端點的統一資源識別碼 (URI)。 URI 必須完整限定。
此字串格式如下所示:
<Transport>://<ComputerName>:<Port>/<ApplicationName>
預設值如下:
http://localhost:5985/WSMAN
如果您未指定連線 URI,您可以使用 UseSSL 和 Port 參數來指定連線 URI 值。
URI 傳輸 區段的有效值為 HTTP 和 HTTPS。 如果您使用傳輸區段指定連線 URI,但未指定埠,則會使用標準埠建立會話:80 代表 HTTP,而 HTTPS 則為 443。 若要使用 PowerShell 遠端的預設埠,請對於 HTTP 指定埠 5985,或對於 HTTPS 指定埠 5986。
如果目的地計算機將連線重新導向至不同的 URI,除非您在命令中使用 AllowRedirection 參數,否則 PowerShell 會防止重新導向。
參數屬性
| 類型: | Uri[] |
| 預設值: | http://localhost:5985/WSMAN |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | URI, CU |
參數集
Uri
| Position: | 0 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | 0 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ContainerId
指定容器識別碼的陣列。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ContainerId
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-Credential
指定具有執行此動作許可權的用戶帳戶。 預設值為目前的使用者。
輸入使用者名稱,例如 User01 或 Domain01\User01,或輸入 Cmdlet 所產生的 Get-Credential 物件。 如果您輸入使用者名稱,系統會提示您輸入密碼。
認證會儲存在 PSCredential 物件中,密碼會儲存為 secureString 。
備註
如需 SecureString 數據保護的詳細資訊,請參閱 SecureString 有多安全?。
參數屬性
| 類型: | PSCredential |
| 預設值: | Current user |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
VMId
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
VMName
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathVMId
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathVMName
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-EnableNetworkAccess
指出此 Cmdlet 會將互動式安全性令牌新增至回送會話。 互動式令牌可讓您在從其他電腦取得數據的回送會話中執行命令。 例如,您可以在會話中執行命令,將 XML 檔案從遠端電腦複製到本機電腦。
回送會話是 來自相同電腦上的 PSSession。 若要建立回送會話,請省略 ComputerName 參數,或將其值設定為 dot (.)、localhost 或本機計算機的名稱。
根據預設,會使用網路令牌來建立回送會話,而網路令牌可能無法提供足夠的許可權來向遠端計算機進行驗證。
EnableNetworkAccess 參數只在回送會話中有效。 如果您在遠端電腦上建立會話時,使用 EnableNetworkAccess,命令會成功,但會忽略 參數。
您可以使用 CredSSPAuthentication 參數的值,在回送會話中允許遠端訪問,此參數會將會話認證委派給其他計算機。
若要保護計算機免於惡意存取,具有互動式令牌的已中斷聯機回送會話,也就是使用 enableNetworkAccess 建立的會話,只能從建立會話的電腦重新連線。 使用 CredSSP 驗證的已中斷聯機會話可以從其他電腦重新連線。 如需詳細資訊,請參閱Disconnect-PSSession。
此參數是在 PowerShell 3.0 中引進的。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-FilePath
指定此 Cmdlet 在一或多個遠端電腦上執行的本機腳本。 輸入文稿的路徑和檔案名,或使用管線將文稿路徑傳送至 Invoke-Command。 腳本必須存在於本機計算機上或本機計算機可以存取的目錄中。 使用 ArgumentList 來指定腳本中的參數值。
當您使用此參數時,PowerShell 會將指定腳本檔案的內容轉換成腳本區塊、將腳本區塊傳輸到遠端電腦,並在遠端電腦上執行。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | PSPath |
參數集
FilePathRunspace
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathComputerName
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMId
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMName
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-HideComputerName
指出這個 Cmdlet 會從輸出顯示中省略每個物件的電腦名稱。 根據預設,產生對象的計算機名稱會出現在顯示器中。
此參數只會影響輸出顯示。 它不會變更物件。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | HCN |
參數集
Session
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathRunspace
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-InDisconnectedSession
指出此 Cmdlet 會在中斷連線的會話中執行命令或腳本。
當您使用 InDisconnectedSession 參數時,Invoke-Command 在每個遠端電腦上建立永續性會話、啟動 ScriptBlock 或 FilePath 參數所指定的命令,然後與會話中斷連線。 命令會繼續在中斷連線的會話中執行。
InDisconnectedSession 可讓您執行命令,而不需維護遠端會話的連線。 而且,由於會話在傳回任何結果之前已中斷連線,InDisconnectedSession 可確保所有命令結果都會傳回至重新連線的會話,而不是在會話之間分割。
您無法搭配 Session 參數或 AsJob 參數使用 InDisconnectedSession。
使用 InDisconnectedSession 的命令 會傳回代表已中斷連線之會話 PSSession 物件。 它們不會傳回命令輸出。 若要連線到已中斷連線的會話,請使用 Connect-PSSession 或 Receive-PSSession Cmdlet。 若要取得會話中執行的命令結果,請使用 Receive-PSSession Cmdlet。 若要在中斷連線的工作階段中執行產生輸出的命令,請將 OutputBufferingMode 工作階段選項的值設定為 Drop。 如果您想要連線到已中斷連線的會話,請在會話中設定閑置逾時,以便讓您在刪除會話之前有足夠的時間連線。
您可以在 SessionOption 參數或 $PSSessionOption 喜好設定變數中設定輸出緩衝模式和閑置逾時。 如需工作階段選項的詳細資訊,請參閱 New-PSSessionOption 和 about_Preference_Variables。
如需有關斷線會話功能的更多資訊,請參閱 about_Remote_Disconnected_Sessions。
此參數是在 PowerShell 3.0 中引進的。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 已中斷連線 |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-InputObject
指定命令的輸入。 輸入包含 物件的變數,或輸入取得物件的命令或表達式。
使用 InputObject 參數時,請使用 $input 參數值中的 自動變數來表示輸入物件。
參數屬性
| 類型: | PSObject |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-JobName
指定背景作業的易記名稱。 根據預設,作業會命名為 Job<n>,其中 <n> 為序數。
如果您在命令中使用 JobName 參數,命令會以作業的形式執行,而且 Invoke-Command 會傳回作業物件,即使您未在命令中包含 AsJob 也一樣。
如需PowerShell背景工作的詳細資訊,請參閱 about_Jobs。
參數屬性
| 類型: | String |
| 預設值: | Job<n> |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Session
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathRunspace
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-NoNewScope
表示此 Cmdlet 會在目前範圍中執行指定的命令。 根據預設,Invoke-Command 在其自己的範圍內執行命令。
此參數只有在目前會話中執行的命令中有效,也就是省略 ComputerName 和 Session 參數的命令。
此參數是在 PowerShell 3.0 中引進的。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
InProcess
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Port
指定遠端電腦上用於此命令的網路埠。 若要連線到遠端電腦,遠端計算機必須接聽連線所使用的埠。 默認埠為 5985(適用於 HTTP 的 WinRM 連接埠)和 5986(適用於 HTTPS 的 WinRM 連接埠)。
使用替代埠之前,請先將遠端電腦上的 WinRM 接聽程式設定為在該埠上接聽。 若要設定接聽程式,請在PowerShell提示字元中輸入下列兩個命令:
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>
除非您必須,否則請勿使用 Port 參數。 命令中設定的埠會套用至命令執行所在的所有計算機或會話。 替代埠設定可能會防止命令在所有計算機上執行。
參數屬性
| 類型: | Int32 |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-RunAsAdministrator
指出此 Cmdlet 會以系統管理員身分叫用命令。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ScriptBlock
指定要執行的命令。 以大括弧 ({ }) 括住命令,以建立腳本區塊。 使用 Invoke-Command 遠端執行命令時,命令中的任何變數都會在遠端電腦上進行評估。
備註
scriptblock 的參數只能依位置從 ArgumentList 傳入。 參數無法依位置傳遞。 如果您需要參數的行為就像 SwitchParameter 類型,請改用 布爾值 類型。
參數屬性
| 類型: | ScriptBlock |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 指令 |
參數集
InProcess
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Session
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMId
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMName
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ContainerId
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Session
指定此 Cmdlet 執行命令的工作階段陣列。 輸入變數,其中包含 PSSession 物件或建立或取得 PSSession 物件的命令,例如 New-PSSession 或 Get-PSSession 命令。
當您建立 PSSession時,PowerShell 會建立與遠端電腦的持續性連線。 使用 PSSession 來執行一系列共用數據的相關命令。 若要執行單一命令或一系列不相關的命令,請使用 ComputerName 參數。 如需詳細資訊,請參閱 about_PSSessions。
參數屬性
| 類型: | |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Session
| Position: | 0 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathRunspace
| Position: | 0 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-SessionName
指定已中斷連線之會話的易記名稱。 您可以使用名稱來參考後續命令中的工作階段,例如 Get-PSSession 命令。 此參數僅適用於 InDisconnectedSession 參數。
此參數是在 PowerShell 3.0 中引進的。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-SessionOption
指定工作階段的進階選項。 輸入 SessionOption 物件,例如您使用 New-PSSessionOption Cmdlet 建立的工作階段選項名稱,以及值是會話選項值的哈希表。
備註
如果您為 sessionOption 指定哈希表,PowerShell 會將哈希表轉換成 System.Management.Automation.Remoting.PSSessionOption 物件。 哈希表中指定的索引鍵值會轉換成 物件的相符屬性。 這的行為與呼叫 New-PSSessionOption不同。 例如,System.TimeSpan 逾時屬性的值,例如 IdleTimeout,將整數值轉換成刻度,而不是毫秒。
如需 PSSessionOption 物件及其屬性的詳細資訊,請參閱 PSSessionOption
選項的預設值由 $PSSessionOption 喜好設定變數的值決定,前提是該變數已被設定。 否則,預設值是由會話組態中設定的選項所建立。
會話選項值優先於 $PSSessionOption 喜好設定變數和會話組態中設定的會話預設值。 不過,它們不會優先於會話設定中設定的最大值、配額或限制。
包含預設值的會話選項描述,請參閱 New-PSSessionOption。 如需 $PSSessionOption 喜好設定變數的相關信息,請參閱 about_Preference_Variables。 如需工作階段組態的詳細資訊,請參閱 about_Session_Configurations。
參數屬性
| 類型: | PSSessionOption |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ThrottleLimit
指定可以建立以執行此命令的並行連線數目上限。 如果您省略此參數或輸入 0 值,則會使用預設值 32。
節流限制僅適用於目前的命令,不適用於會話或計算機。
參數屬性
| 類型: | Int32 |
| 預設值: | 32 |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Session
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathRunspace
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
Uri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathUri
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
VMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathVMName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
FilePathContainerId
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-UseSSL
指出此 Cmdlet 會使用安全套接字層 (SSL) 通訊協定來建立與遠端電腦的連線。 根據預設,不會使用 SSL。
WS-Management 會加密透過網路傳輸的所有PowerShell內容。 UseSSL 參數是額外的保護,可跨 HTTPS 傳送數據,而不是 HTTP。
如果您使用此參數,但在用於命令的埠上無法使用 SSL,命令會失敗。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
FilePathComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
ComputerName
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-VMId
指定虛擬機的識別碼陣列。
參數屬性
| 類型: | Guid[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | VMGuid |
參數集
VMId
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathVMId
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-VMName
指定包含虛擬機器名稱的陣列。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
VMName
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
FilePathVMName
| Position: | Named |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
CommonParameters
此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
ScriptBlock
您可以使用管線在文稿區塊中傳送命令,以 Invoke-Command。 使用 $input 自動變數來表示命令中的輸入物件。
輸出
System.Management.Automation.PSRemotingJob
如果您使用 AsJob 參數,此 Cmdlet 會傳回作業物件。
PSSession
如果您使用 InDisconnectedSession 參數,這個 Cmdlet 會傳回 PSSession 物件。
Object
根據預設,此 Cmdlet 會傳回叫用命令的輸出,這是 ScriptBlock 參數的值。
備註
Windows PowerShell 包含下列 Invoke-Command的別名:
icm
在 Windows Vista 和更新版本的 Windows作系統上,若要使用 的 Invoke-Command 參數,在本機電腦上執行命令,您必須使用 [以 系統管理員身分執行] 選項 執行 PowerShell。
當您在多部計算機上執行命令時,PowerShell 會以清單顯示的順序連接到電腦。 不過,命令輸出會依從遠端電腦接收的順序顯示,這可能不同。
命令結果中包含 Invoke-Command 執行命令所產生的錯誤。
本機命令中將終止錯誤的錯誤視為遠端命令中的非終止錯誤。 此策略可確保在一部計算機上終止錯誤不會在執行它的所有計算機上關閉命令。 即使在單一計算機上執行遠端命令時,也會使用這個做法。
如果遠端電腦不在本機電腦信任的網域中,計算機可能無法驗證用戶的認證。 若要將遠端電腦新增至 WS-Management 中受信任的主機清單,請在 WSMan 提供者中使用下列命令,其中 <Remote-Computer-Name> 是遠端電腦的名稱:
Set-Item -Path WSMan:\Localhost\Client\TrustedHosts -Value \<Remote-Computer-Name\>
當您使用 InDisconnectedSession 參數中斷 PSSession 時,會話狀態會 Disconnected,而且可用性 None。 State 屬性的值相對於目前的會話。 已中斷連線 值表示 PSSession 未連線到目前的會話。 不過,這並不表示 PSSession 與所有會話中斷連線。 它可能會連線到不同的工作階段。 若要判斷您是否可以連線或重新連線到會話,請使用 Availability 屬性。
Availability 值 None 表示您可以連線到會話。 Busy 的值表示您無法連線到 PSSession,因為它已連線到另一個會話。 如需有關工作階段的 狀態 屬性之值的詳細資訊,請參閱執行空間狀態 。 如需會話之 Availability 屬性值的詳細資訊,請參閱 RunspaceAvailability。