about_PSSession_Details

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主題

about_PSSession_Details

簡短描述

提供 Windows PowerShell 工作階段及其在遠端命令中所扮演之角色的詳細資訊。

詳細描述

工作階段是 Windows PowerShell 執行所在的環境。每當您啟動 Windows PowerShell 時,就會為您建立一個工作階段。您可以在自己的電腦或其他電腦上建立額外的工作階段,這些工作階段稱為「Windows PowerShell 工作階段」或 "PSSession"。

不同於 Windows PowerShell 為您建立的工作階段,您可以控制和管理自己建立的 PSSession。

PSSession 在遠端運算中扮演重要的角色。當您建立連線到遠端電腦的 PSSession 時,Windows PowerShell 會建立遠端電腦的持續連線,以便支援 PSSession。您可以使用 PSSession 來執行一系列共用資料的命令、函式和指令碼。

本主題提供 Windows PowerShell 中的工作階段和 PSSession 的詳細資訊。如需您可以透過工作階段執行之工作的基本資訊,請參閱 about_PSSessions。

關於工作階段

從技術層面來看,工作階段是 Windows PowerShell 執行所在的執行環境。每個工作階段都包含一個 System.Management.Automation 引擎執行個體,以及一個 Windows PowerShell 執行所在的主機程式。主機可以是熟悉的 Windows PowerShell 主控台或執行命令的其他程式 (例如 Cmd.exe),也可以是裝載 Windows PowerShell 的內建程式 (例如 Windows PowerShell 整合式指令碼環境 (ISE))。從 Windows 的觀點來看,工作階段是目標電腦上的 Windows 處理序。

每個工作階段會分開設定。這些工作階段有自己的屬性、自己的執行原則及自己的設定檔。即使您變更電腦上的環境,建立工作階段時存在的環境也會一直保留到其存留時間結束為止。所有工作階段都會在全域範圍中建立,甚至是您在指令碼中建立的工作階段。

您一次只能在一個工作階段中執行一個命令 (或命令管線)。以同步方式 (一次一個) 執行的第二個命令會等候多達四分鐘,讓第一個命令完成。以非同步方式 (同時) 執行的第二個命令則會失敗。

關於 PSSESSION

每次您啟動 Windows PowerShell,都會建立一個工作階段。此外,Windows PowerShell 會建立暫時工作階段來執行個別命令。不過,您也可以建立由自己控制和管理的工作階段 (稱為「Windows PowerShell 工作階段」或 "PSSession")。

PSSession 對遠端命令很重要。如果您使用 Invoke-Command 或 Enter-PSSession Cmdlet 的 ComputerName 參數,Windows PowerShell 會建立暫時工作階段來執行命令,然後在命令或互動式工作階段完成後立即關閉工作階段。

不過,如果您使用 New-PSSession Cmdlet 來建立 PSSession,Windows PowerShell 會在您可以執行多個命令或互動式工作階段的遠端電腦上建立持續工作階段。您所建立的 PSSession 會保持開啟並可供使用,直到您加以刪除或關閉其建立所在的工作階段為止。

當您在遠端電腦上建立 PSSession 時,系統會在遠端電腦上建立 PowerShell 處理序,並建立從本機電腦到遠端電腦上之處理序的連線。當您在本機電腦上建立 PSSession 時,系統會在本機電腦上建立新的處理序和連線。

何時需要 PSSESSION?

Invoke-Command 和 Enter-PSSession Cmdlet 具有 ComputerName 和 Session 參數。您可以使用任何一個參數來執行遠端命令。

使用 ComputerName 參數可在一或多部電腦上執行單一命令或一系列不相關的命令。

若要執行共用資料的命令,您需要遠端電腦的持續連線。在這種情況下,請建立 PSSession,然後再使用 Session 參數來執行 PSSession 中的命令。

從遠端電腦取得資料的許多其他 Cmdlet (例如 Get-Process、Get-Service、Get-EventLog 和 Get-WmiObject) 只有 ComputerName 參數。這些 Cmdlet 使用非 Windows PowerShell 遠端的技術從遠端收集資料。這些 Cmdlet 不需要 Session 參數,但您可以使用 Invoke-Command Cmdlet 在 PSSession 中執行這些命令。

如何建立 PSSESSION?

若要建立 PSSession,請使用 New-PSSession Cmdlet。您可以在本機或遠端電腦上,使用 New-PSSession 來建立 PSSession。

我可以在任何電腦上建立 PSSESSION 嗎?

若要建立連線到遠端電腦的 PSSession,您必須設定電腦以使用 Windows PowerShell 遠端功能。目前的使用者必須是遠端電腦上的 Administrators 群組成員,或必須能夠提供 Administrators 群組成員的認證。如需詳細資訊,請參閱 about_Remote_Requirements。

我可以在其他工作階段中看到自己的 PSSESSION 嗎?

從 Windows PowerShell 3.0 開始,Get-PSSession Cmdlet 的 ComputerName 參數會取得您在指定的遠端端電腦上所建立的 PSSession。

使用中的 PSSession 會保留在遠端電腦上 (連線的「伺服器端」),而且您可以從任何電腦上的任何工作階段取得這些工作階段。

例如,如果您建立從 Server01 電腦連線到 Server02 電腦的 PSSession,然後切換到 Server03 電腦,您可以使用類似下列其中一個命令來取得工作階段。

      Get-PSSession -ComputerName Server02

即使您中斷工作階段的連線,在您刪除工作階段或工作階段逾時之前,該工作階段都會保留在遠端電腦上。

在 Windows PowerShell 2.0 中,您只能取得在目前工作階段中建立的 PSSession,但無法取得在其他工作階段中建立的 PSSession。

如需詳細資訊,請參閱 Get-PSSession。

我可以看到其他人在我的電腦上建立的 PSSESSION 嗎?

只有在您可以提供建立 PSSession 之使用者的認證,或 PSSession 使用的工作階段組態包含 RunAs 認證時,您才能取得和管理其他人所建立的 PSSession。否則,您只能取得、連線到、使用及管理自己建立的 PSSession。

我可以從不同的電腦連線到 PSSESSION 嗎?

從 Windows PowerShell 3.0 開始,PSSession 與建立所在的工作階段無關。使用中的 PSSession 會保留在遠端電腦上或連線的「伺服器端」。

您可以使用 Disconnect-PSSession Cmdlet 來中斷 PSSession 的連線。PSSession 會與本機工作階段中斷連線,但會保留在遠端電腦上。命令會繼續在中斷連線的 PSSession 中執行。您可以關閉 Windows PowerShell 並關閉原始電腦,而不會中斷 PSSession。

然後,即使在幾小時之後,您仍可以使用 Get-PSSession Cmdlet 取得 PSSession,並使用 Connect-PSSession Cmdlet 從不同電腦的新工作階段連線到 PSSession。

如需詳細資訊,請參閱 about_Remote_Disconnected_Sessions (https://go.microsoft.com/fwlink/?LinkID=252847)。

如果我的電腦停止,會對我的 PSSESSION 有何影響?

中斷連線的 PSSession 與建立所在的工作階段無關。如果您中斷 PSSession 的連線,然後再關閉原始電腦,PSSession 會保留在遠端電腦上。

此外,Windows PowerShell 會嘗試復原由於電腦重新開機、暫時電源中斷或網路中斷等情況,而不小心中斷連線的使用中 PSSession。如果原始工作階段仍可使用,Windows PowerShell 會嘗試保留 PSSession 或將其復原至開啟狀態;如果無法使用,則會移至中斷連線狀態。

「使用中」的 PSSession 是執行命令的工作階段。如果 PSSession 處於連線狀態 (而不是中斷連線狀態),且關閉連線的工作階段時,PSSession 中正在執行命令,則 Windows PowerShell 會嘗試在遠端電腦上保留 PSSession。不過,如果 PSSession 中沒有執行中的命令,當關閉連線的工作階段時,Windows PowerShell 會關閉 PSSession。

如需詳細資訊,請參閱 about_Remote_Disconnected_Sessions (https://go.microsoft.com/fwlink/?LinkID=252847)。

我可以在 PSSESSION 中執行背景工作嗎?

可以。背景工作是不需與目前工作階段互動,即可在背景中以非同步方式執行的命令。當您送出命令來啟動工作時,該命令會傳回工作物件,但在背景繼續執行工作,直到完成為止。

若要在本機電腦上啟動背景工作,請使用 Start-Job 命令。您可以在暫時連線 (透過 ComputerName 參數) 或 PSSession (透過 Session 參數) 中執行背景工作。

若要在遠端電腦上啟動背景工作,請搭配使用 Invoke-Command Cmdlet 及其 AsJob 參數,或使用 Invoke-Command Cmdlet 在遠端電腦上執行 Start-Job 命令。使用 AsJob 參數時,您可以使用 ComputerName 或 Session 參數。

使用 Invoke-Command 執行 Start-Job 命令時,則必須在 PSSession 中執行命令。如果您使用 ComputerName 參數,Windows PowerShell 會在工作物件傳回之後結束連線,而不會中斷工作。

如需詳細資訊,請參閱 about_Jobs。

我可以執行互動式工作階段嗎?

可以。若要啟動遠端電腦的互動式工作階段,請使用 Enter-PSSession Cmdlet。在互動式工作階段中,您輸入的命令會在遠端電腦上執行,就如同您直接在遠端電腦上輸入一樣。

您可以在暫時工作階段 (透過 ComputerName 參數) 或 PSSession (透過 Session 參數) 中執行互動式工作階段。如果您使用 PSSession,PSSession 會保留先前命令中的資料,並保留在互動式工作階段期間所產生的任何資料,以供後續命令使用。

當您結束互動式工作階段時,PSSession 會保持開啟並可供使用。

如需詳細資訊,請參閱 Enter-PSSession 和 Exit-PSSession。

我必須刪除 PSSESSION 嗎?

是的。PSSession 是一種處理序,即使不在使用中,也會是佔用記憶體和其他資源的獨立環境。當您完成 PSSession 時,請加以刪除。如果您建立多個 PSSession,請關閉未在使用中的工作階段,只保留目前使用中的工作階段。

若要刪除 PSSession,請使用 Remove-PSSession Cmdlet。它會刪除 PSSession 並釋放正在使用的所有資源。

您也可以使用 New-PSSessionOption 的 IdleTimeOut 參數,在指定的間隔之後關閉閒置的 PSSession。如需詳細資訊,請參閱 New-PSSessionOption。

如果您將 PSSession 物件儲存在變數中,然後刪除 PSSession 或讓它逾時,該變數仍會包含 PSSession 物件,但 PSSession 未在使用狀態,且無法提供使用或修復。

所有工作階段是否與 PSSESSION 相同?

否。開發人員可以建立只包含所選取之提供者和 Cmdlet 的自訂工作階段。如果某個命令可用於一個工作階段,但不可用於另一個工作階段,可能是因為該工作階段受到限制。

另請參閱

about_Jobs

about_PSSessions

about_Remote

about_Remote_Disconnected_Sessions

about_Remote_Requirements

Invoke-Command

New-PSSession

Get-PSSession

Remove-PSSession

Enter-PSSession

Exit-PSSession