Get-PSSession

取得本機和遠端電腦上的 PowerShell 會話。

Syntax

Get-PSSession
   [-Name <String[]>]
   [<CommonParameters>]
Get-PSSession
   [-ComputerName] <String[]>
   [-ApplicationName <String>]
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-Port <Int32>]
   [-UseSSL]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ComputerName] <String[]>
   [-ApplicationName <String>]
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-Port <Int32>]
   [-UseSSL]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ConnectionUri] <Uri[]>
   [-ConfigurationName <String>]
   [-AllowRedirection]
   -InstanceId <Guid[]>
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ConnectionUri] <Uri[]>
   [-ConfigurationName <String>]
   [-AllowRedirection]
   [-Name <String[]>]
   [-Credential <PSCredential>]
   [-Authentication <AuthenticationMechanism>]
   [-CertificateThumbprint <String>]
   [-ThrottleLimit <Int32>]
   [-State <SessionFilterState>]
   [-SessionOption <PSSessionOption>]
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-State <SessionFilterState>]
   -VMName <String[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-State <SessionFilterState>]
   -ContainerId <String[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-State <SessionFilterState>]
   -ContainerId <String[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   [-Name <String[]>]
   [-State <SessionFilterState>]
   -VMId <Guid[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-State <SessionFilterState>]
   -VMId <Guid[]>
   [<CommonParameters>]
Get-PSSession
   [-ConfigurationName <String>]
   -InstanceId <Guid[]>
   [-State <SessionFilterState>]
   -VMName <String[]>
   [<CommonParameters>]
Get-PSSession
   [-InstanceId <Guid[]>]
   [<CommonParameters>]
Get-PSSession
   [-Id] <Int32[]>
   [<CommonParameters>]

Description

Cmdlet Get-PSSession 會在本機和遠端電腦上取得使用者管理的 PowerShell 會話 (PSSessions) 。

從 Windows PowerShell 3.0 開始,會話會儲存在每個連線的遠端端電腦上。 您可以使用 的 Get-PSSessionComputerNameConnectionUri參數來取得連線到本機電腦或遠端電腦的會話,即使它們未在目前的會話中建立也一樣。

如果沒有參數, Get-PSSession 請取得在目前會話中建立的所有會話。

使用篩選參數,包括NameIDInstanceIDStateApplicationName 和 ConfigurationName,從傳回的會話Get-PSSession 中選取。

使用其餘參數來設定當您使用ComputerNameConnectionUri參數時,命令執行 Get-PSSession 所在的暫存連接。

注意:在 Windows PowerShell 2.0 中,不含參數, Get-PSSession 取得在目前會話中建立的所有會話。 ComputerName參數會取得在目前會話中建立的會話,並聯機到指定的電腦。

如需 PowerShell 會話的詳細資訊,請參閱 about_PSSessions

範例

範例 1:取得在目前會話中建立的會話

Get-PSSession

此命令會取得目前會話中建立的所有 PSSession 。 它不會取得在其他會話或其他電腦上建立的 PSSession ,即使它們連線到這部電腦也一樣。

範例 2:取得連線到本機電腦的會話

Get-PSSession -ComputerName "localhost"

此命令會取得連線到本機電腦的 PSSession 。 若要指出本機電腦,請輸入電腦名稱稱、localhost 或點 (.)

此命令傳回本機電腦上的所有工作階段,即使它們是在不同的工作階段中或不同的電腦上所建立。

範例 3:取得連線到電腦的會話

Get-PSSession -ComputerName "Server02"

Id Name            ComputerName    State         ConfigurationName     Availability
 -- ----            ------------    -----         -----------------     ------------
  2 Session3        Server02       Disconnected  ITTasks                       Busy
  1 ScheduledJobs   Server02       Opened        Microsoft.PowerShell     Available
  3 Test            Server02       Disconnected  Microsoft.PowerShell          Busy

此命令會取得連接到 Server02 電腦的 PSSession

此命令傳回 Server02 上的所有工作階段,即使它們是在不同的工作階段中或不同的電腦上所建立。

輸出顯示有兩個工作階段的狀態為 Disconnected,且可用性為 Busy。 它們是在不同的工作階段中所建立,並且目前都正在使用中。 已于目前會話中建立已開啟和可用的 ScheduledJobs 會話。

範例 4:儲存此命令的結果

New-PSSession -ComputerName Server01, Server02, Server03
$s1, $s2, $s3 = Get-PSSession

此範例示範如何在多個變數中儲存命令的結果 Get-PSSession

第一個命令會 New-PSSession 使用 Cmdlet 在三部遠端電腦上建立 PSSession

第二個命令會使用 Cmdlet 來取得三個 Get-PSSessionPSSession。 然後,它會將每個 PSSession 儲存在不同的變數中。

當 PowerShell 將物件的陣列指派給變數陣列時,它會將第一個物件指派給第一個變數、第二個物件指派給第二個變數等等。 如果物件數目多於變數數目,它會將所有剩餘的物件指派給陣列中的最後一個變數。 如果變數數目多於物件數目,便不使用多餘的變數。

範例 5:使用實例識別碼刪除會話

Get-PSSession | Format-Table -Property ComputerName, InstanceID
$s = Get-PSSession -InstanceID a786be29-a6bb-40da-80fb-782c67f7db0f
Remove-PSSession -Session $s

此範例示範如何使用 PSSession 的實例識別碼來取得 PSSession,然後刪除 PSSession

第一個命令會取得目前會話中建立的所有 PSSession 。 它會將PSSession傳送至 Format-Table Cmdlet,以顯示每個PSSessionComputerNameInstanceID屬性。

第二個命令會 Get-PSSession 使用 Cmdlet 來取得特定的 PSSession ,並將它儲存在變數中 $s 。 此命令會使用 InstanceID 參數來識別 PSSession

第三個命令會使用 Remove-PSSession Cmdlet 來刪除變數中的 $sPSSession

範例 6:取得具有特定名稱的會話

此範例中的命令會尋找具有特定名稱格式且使用特定工作階段設定的工作階段,然後連線到該工作階段。 您可以使用與此類似的命令來尋找同事在其中啟動工作的工作階段,然後進行連線來完成工作。

Get-PSSession -ComputerName Server02, Server12 -Name BackupJob* -ConfigurationName ITTasks -SessionOption @{OperationTimeout=240000}

Id Name            ComputerName    State         ConfigurationName     Availability
 -- ----            ------------    -----         -----------------     ------------
  3 BackupJob04     Server02        Disconnected        ITTasks                  None

$s = Get-PSSession -ComputerName Server02 -Name BackupJob04 -ConfigurationName ITTasks | Connect-PSSession
$s

Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 5 BackupJob04     Server02        Opened        ITTasks                  Available

第一個命令會取得 Server02 和 Server12 遠端電腦上的會話,其名稱開頭為 BackupJob,並使用 ITTasks 會話組態。此命令會使用 Name 參數來指定名稱模式和 ConfigurationName 參數來指定會話組態。 SessionOption 參數的值是一個雜湊表,它會將 OperationTimeout 的值設定為 240000 毫秒 (4 分鐘)。 此設定可讓命令有更多時間完成。 ConfigurationNameSessionOption 參數可用來設定 Cmdlet 在每個電腦上執行的暫存會話 Get-PSSession 。輸出會顯示命令會傳回 BackupJob04 會話。 會話已中斷連線,且 可用性 為 None,表示它未使用中。

第二個命令會 Get-PSSession 使用 Cmdlet 來連線到 BackupJob04 會話和 Connect-PSSession Cmdlet 來連線到會話。 命令會將工作階段儲存於 $s 變數中。

第三個命令取得 $s 變數中的工作階段。 輸出顯示 Connect-PSSession 命令成功。 工作階段的狀態為 Opened 並且可供使用。

範例 7:使用其識別碼取得會話

Get-PSSession -Id 2

此命令會取得識別碼為 2 的 PSSession 。 因為 ID 屬性的值只在目前的會話中是唯一的, 所以 Id 參數只適用于本機命令。

參數

-AllowRedirection

指出此 Cmdlet 允許將此連線重新導向至替代的統一資源識別項 (URI) 。 根據預設,PowerShell 不會重新導向連線。

此參數會設定建立的暫存連接,以使用ConnectionUri參數執行 Get-PSSession 命令。

此參數是在 Windows PowerShell 3.0 引進。

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

-ApplicationName

指定應用程式的名稱。 此 Cmdlet 只會連線到使用指定應用程式的會話。

輸入連線 URI 的應用程式名稱區段。 例如,在下列連線 URI 中,應用程式名稱為 WSMan: https://localhost:5985/WSMAN 。 工作階段的應用程式名稱儲存在工作階段的 Runspace.ConnectionInfo.AppName 屬性中。

此參數的值可用來選取與篩選工作階段。 它不會變更工作階段使用的應用程式。

Type:String
Position:Named
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Authentication

指定用來驗證執行命令之會話 Get-PSSession 認證的機制。

此參數會設定建立的暫存連線,以使用ComputerNameConnectionUri參數執行 Get-PSSession 命令。

此參數可接受的值為:

  • 預設
  • 基本
  • Credssp
  • Digest
  • Kerberos
  • 交涉
  • NegotiateWithImplicitCredential。

預設值為 Default。

如需此參數值的詳細資訊,請參閱 AuthenticationMechanism 列舉

注意:使用者認證會傳遞至要驗證之遠端電腦的「認證安全性支援提供者 (CredSSP)」驗證,是設計用於需要在一個以上資源進行驗證的命令,例如存取遠端網路共用。 此機制會使得遠端作業的安全性風險變高。 若遠端電腦遭到入侵,傳遞給它的認證便可用來控制網路工作階段。

此參數是在 Windows PowerShell 3.0 引進。

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) ,該使用者帳戶具有建立命令執行所在 Get-PSSession 會話的許可權。 請輸入憑證的憑證指紋。

此參數會設定建立的暫存連接,以使用ComputerNameConnectionUri參數執行 Get-PSSession 命令。

憑證將用於用戶端憑證式驗證。 這些憑證只能對應至本機使用者帳戶,無法用於網域帳戶。

若要取得憑證指紋,請使用 PowerShell 憑證: 磁片磁碟機中的Get-Item或Get-ChildItem命令。

此參數是在 Windows PowerShell 3.0 引進。

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

-ComputerName

指定電腦名稱的陣列。 取得連線到指定之電腦的工作階段。 不允許使用萬用字元。 沒有任何預設值。

從 Windows PowerShell 3.0 開始,PSSession物件會儲存在每個連線的遠端電腦上。 若要取得指定電腦上的會話,PowerShell 會建立與每部電腦的暫時連線,並執行 Get-PSSession 命令。

輸入一或多部電腦的 NetBIOS 名稱、IP 位址或完整網域名稱。 若要指定本機電腦,請輸入電腦名稱、localhost 或句點 (.)。

注意:此參數只會從執行 Windows PowerShell 3.0 或更新版本的 PowerShell 的電腦取得會話。 舊版不會儲存工作階段。

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

-ConfigurationName

指定組態的名稱。 此 Cmdlet 只會取得使用指定會話組態的會話。

輸入工作階段設定的設定名稱或完整資源 URI。 如果您只指定組態名稱,則會在前面加上下列架構 URI: https://schemas.microsoft.com/powershell 。 工作階段的設定名稱儲存在工作階段的 ConfigurationName 屬性中。

此參數的值可用來選取與篩選工作階段。 它不會變更工作階段使用的工作階段設定。

如需會話設定的詳細資訊,請參閱 about_Session_Configurations

Type:String
Position:Named
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-ConnectionUri

指定 URI,定義命令執行所在暫存會話的連接 Get-PSSession 端點。 此 URI 必須是完整的 URI。

此參數會設定建立的暫存連接,以使用ConnectionUri參數執行 Get-PSSession 命令。

此字串的格式為:

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

預設值為: https://localhost:5985/WSMAN

如果您未指定 ConnectionUri,您可以使用 UseSSLComputerNamePortApplicationName 參數來指定 ConnectionURI 值。 URI 的 Transport 區段有效值為 HTTP 與 HTTPS。 若指定含傳輸區段的連線 URI,但未指定連接埠,將會以標準連接埠 80 (適用於 HTTP) 和 443 (適用於 HTTPS) 建立工作階段。 若要使用 PowerShell 遠端的預設埠,請針對 HTTP 指定埠 5985,或針對 HTTPS 指定埠 5986。

如果目的地電腦將連線重新導向至不同的 URI,除非您在命令中使用 AllowRedirection 參數,否則 PowerShell 會防止重新導向。

此參數是在 Windows PowerShell 3.0 引進。

此參數只會從執行 Windows PowerShell 3.0 或更新版本的 Windows PowerShell 的電腦取得會話。 舊版不會儲存工作階段。

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

-ContainerId

指定容器識別碼的陣列。 此 Cmdlet 會啟動具有每個指定容器的互動式會話。 docker ps使用 命令來取得容器識別碼的清單。 如需詳細資訊,請參閱 docker ps 命令的說明。

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

-Credential

指定使用者認證。 此 Cmdlet 會以指定使用者的許可權來執行 命令。 指定有權連線到遠端電腦的使用者帳戶,並執行 Get-PSSession 命令。 預設為目前使用者。

輸入使用者名稱,例如User01Domain01\User01,或輸入 Cmdlet 所產生的 Get-CredentialPSCredential物件。 如果您輸入使用者名稱,系統會提示您輸入密碼。

認證會儲存在 PSCredential 物件中,密碼會儲存為 SecureString

注意

如需 SecureString 資料保護的詳細資訊,請參閱 SecureString 有多安全?

此參數會設定為建立的暫存連接,以使用ComputerNameConnectionUri參數執行 Get-PSSession 命令。

此參數是在 Windows PowerShell 3.0 引進。

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

-Id

指定會話識別碼的陣列。 此 Cmdlet 只會取得具有指定識別碼的會話。 輸入一或多個識別碼 (以逗號分隔),或使用範圍運算子 (..) 來指定某個範圍的識別碼。 您無法搭配 ComputerName 參數使用 ID 參數。

識別碼是一個整數,可唯一識別目前會話中的使用者管理會話。 記住和輸入比 InstanceId更容易,但只有在目前的會話內才是唯一的。 工作階段的識別碼儲存在工作階段的 ID 屬性中。

Type:Int32[]
Position:0
Default value:All sessions
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

指定會話實例識別碼的陣列。 此 Cmdlet 只會取得具有指定實例識別碼的會話。

執行個體識別碼是 GUID,可唯一識別本機或遠端電腦上的某個階段作業。 InstanceID是唯一的,即使您在 PowerShell 中執行多個會話亦然。

工作階段的執行個體識別碼儲存在工作階段的 InstanceID 屬性中。

Type:Guid[]
Position:Named
Default value:All sessions
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

指定會話名稱的陣列。 此 Cmdlet 只會取得具有指定易記名稱的會話。 允許使用萬用字元。

工作階段的好記名稱儲存在工作階段的 Name 屬性中。

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

-Port

指定用於命令執行之暫存連線的 Get-PSSession 指定網路埠。 若要連線到遠端電腦,遠端電腦必須接聽連線使用的連接埠。 預設埠為 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\>

此參數會設定為建立的暫存連接,以使用ComputerNameConnectionUri參數執行 Get-PSSession 命令。

除非必要,否則請勿使用 Port 參數。 命令中設定的 會套用至命令執行所在的所有電腦或會話。 替代的連接埠設定可能使得命令無法在全部電腦上執行。

此參數是在 Windows PowerShell 3.0 引進。

Type:Int32
Position:Named
Default value:5985, 5986
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionOption

指定會話的進階選項。 輸入 SessionOption 物件 (例如您使用 New-PSSessionOption Cmdlet 建立的物件) 或者雜湊表,其中索引鍵為工作階段選項名稱,而值為工作階段選項值。

選項的預設值是由 $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

-State

指定會話狀態。 此 Cmdlet 只會取得處於指定狀態的會話。 此參數可接受的值為:All、Opened、Disconnected、Closed 和 Broken。 預設值為 All。

工作階段狀態值是相對於目前的工作階段。 不是在目前的工作階段中建立,也未連線到目前之工作階段的工作階段,即使它們已連線到不同的工作階段,其狀態也會是 Disconnected。

工作階段的狀態儲存在工作階段的 State 屬性中。

此參數是在 Windows PowerShell 3.0 引進。

Type:SessionFilterState
Accepted values:All, Opened, Disconnected, Closed, Broken
Position:Named
Default value:All
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ThrottleLimit

指定可建立以執行 Get-PSSession 命令的並行連線數目上限。 若省略此參數,或輸入值為 0 (零),則會使用預設值 32。 節流限制僅適用於目前命令,不適用於工作階段或電腦。

此參數是在 Windows PowerShell 3.0 引進。

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

-UseSSL

指出此 Cmdlet 會使用安全通訊端層 (SSL) 通訊協定來建立命令執行 Get-PSSession 所在的連線。 預設不會使用 SSL。 若您使用此參數,但是命令所用的連接埠上無法使用 SSL,則命令會失敗。

此參數會設定建立的暫存連線,以使用ComputerName參數執行 Get-PSSession 命令。

此參數是在 Windows PowerShell 3.0 引進。

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

-VMId

指定虛擬機器識別碼的陣列。 此 Cmdlet 會啟動互動式會話,其中包含每個指定的虛擬機器。 若要查看可用的虛擬機器,請使用下列命令:

Get-VM | Select-Object -Property Name, ID

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

-VMName

指定虛擬機器名稱的陣列。 此 Cmdlet 會啟動互動式會話,其中包含每個指定的虛擬機器。 若要查看可用的虛擬機器,請使用 Get-VM Cmdlet。

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

輸入

None

您無法使用管線傳送輸入至此 Cmdlet。

輸出

PSSession

備註

  • 此 Cmdlet 會取得使用者管理的會話 PSSession 物件,例如使用 New-PSSession 和 Enter-PSSession Invoke-Command Cmdlet 所建立的會話。 它不會取得啟動 PowerShell 時所建立的系統管理會話。
  • 從 Windows PowerShell 3.0 開始,PSSession物件會儲存在位於伺服器端或接收連線結尾的電腦上。 若要取得儲存在本機電腦或遠端電腦上的會話,PowerShell 會對指定的電腦建立暫存會話,並在會話中執行查詢命令。
  • 若要取得連線到遠端電腦的工作階段,請使用 ComputerNameConnectionUri 參數來指定遠端電腦。 若要篩選取得的會話 Get-PSSession ,請使用 NameIDInstanceIDState 參數。 使用其餘參數來設定使用的暫存會話 Get-PSSession
  • 當您使用ComputerNameConnectionUri參數時, Get-PSSession 只會從執行 Windows PowerShell 3.0 和更新版本的 PowerShell 的電腦取得會話。
  • PSSessionState屬性值相對於目前的會話。 因此, [已中斷連線 ] 的值表示 PSSession 未連線到目前的會話。 不過,這並不表示 PSSession 已中斷與所有會話的連線。 它可能連線不同的工作階段。 若要判斷您是否可以從目前的會話連線或重新連線至 PSSession ,請使用 Availability 屬性。

Availability 值為 None 表示您可以連線工作階段。 [忙碌]的值表示您無法連線到PSSession,因為它已連線到另一個會話。

如需會話之 State 屬性值的詳細資訊,請參閱 RunspaceState 列舉

如需會話 可用性 屬性值的詳細資訊,請參閱 RunspaceAvailability 列舉