about_PSSession_Details

簡短描述

提供有關 PowerShell 會話及其在遠端命令中扮演角色的詳細資訊。

詳細描述

會話是PowerShell執行所在的環境。 每當啟動 PowerShell 時,就會為您建立會話。 您可以在您的電腦或其他電腦上建立稱為「PowerShell 工作階段」或「PSSessions」的其他工作階段。

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

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

本主題提供 PowerShell 中會話和 PSSession 的詳細資訊。 如需您可以使用會話執行之工作的基本資訊,請參閱 about_PSSessions

關於工作階段

就技術上說,會話是PowerShell執行所在的執行環境。 每個會話都包含 System.Management.Automation 引擎的實例,以及 PowerShell 執行所在的主機程式。 主機可以是熟悉的 PowerShell 控制台或執行命令的另一個程式,例如Cmd.exe,或建置來裝載 PowerShell 的程式,例如 Windows PowerShell 整合式腳本環境 (ISE)。 從 Windows 的觀點來看,會話是目標電腦上的 Windows 程式。

每個會話都會獨立設定。 它包含自己的屬性、它自己的執行原則,以及它自己的配置檔。 即使變更計算機上的環境,會話建立的存留期仍會持續存在的環境。 所有工作階段都會建立在全域範圍中,甚至是您在腳本中建立的工作階段。

您一次只能在會話中執行一個命令(或命令管線)。 第二個命令會以同步方式執行(一次一個)等候最多四分鐘,讓第一個命令完成。 第二個命令會以異步方式執行 (同時) 失敗。

關於 PSSessions

每次啟動PowerShell時,都會建立會話。 而且,PowerShell 會建立暫存會話來執行個別命令。 不過,您也可以建立您控制和管理的會話(稱為「PowerShell 會話」或「PSSessions」。

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

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

當您在遠端電腦上建立 PSSession 時,系統會在遠端電腦上建立 PowerShell 程式,並從本機電腦建立連線到遠端電腦上的進程。 當您在本機計算機上建立 PSSession 時,新的進程和連線都會在本機電腦上建立。

何時需要 PSSession?

Invoke-CommandEnter-PSSession Cmdlet 同時具有 ComputerNameSession 參數。 您可以使用任一項來執行遠端命令。

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

若要執行共享數據的命令,您需要與遠端電腦的持續連線。 在此情況下,請建立 PSSession,然後使用 Session 參數在 PSSession 中執行命令。

許多其他 Cmdlet 會從遠端電腦取得數據,例如 Get-ProcessGet-ServiceGet-EventLogGet-WmiObject 只有 ComputerName 參數。 它們會使用PowerShell遠端處理以外的技術,從遠端收集數據。 這些 Cmdlet 沒有 Session 參數,但您可以使用 Invoke-Command Cmdlet 在 PSSession 中執行這些命令。

如何建立 PSSession?

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

我可以在任何計算機上建立 PSSession 嗎?

若要建立連線到遠端電腦的 PSSession,計算機必須設定為在 PowerShell 中遠端處理。 目前用戶必須是遠端計算機上 管理員 istrators 群組的成員,或者目前的使用者必須能夠提供 管理員 istrators 群組成員的認證。 如需詳細資訊,請參閱 about_Remote_Requirements

我可以在其他會話中看到我的 PSSession 嗎?

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

作用中的 PSSession 會在遠端電腦上維護(連線的「伺服器端」),您可以從任何電腦上的任何會話取得它們。

例如,如果您從 Server01 計算機建立 PSSession 到 Server02 計算機,然後切換至 Server03 計算機,您可以使用類似下列命令來取得會話。

Get-PSSession -ComputerName Server02

即使您中斷與會話的連線,會話仍會保留在遠端電腦上,直到您刪除或逾時為止。

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

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

我可以看到其他人在計算機上建立的 PSSession 嗎?

只有當您可以提供建立 PSSession 的使用者認證,或 PSSession 所使用的會話設定包含 RunAs 認證時,您才能取得及管理其他人建立的 PSSession。 否則,您可以取得、連線、使用及管理您建立的 PSSession。

我可以從不同的計算機 連線 PSSession 嗎?

從 Windows PowerShell 3.0 開始,Windows 電腦上的 PSSession 與建立的會話無關。 作用中的 PSSession 會在連線的遠端或「伺服器端」計算機上維護。

在 Windows 電腦上,您可以使用 Disconnect-PSSession Cmdlet 與 PSSession 中斷連線。 PSSession 與本機會話中斷連線,但在遠端計算機上維持。 命令會繼續在中斷連線的 PSSession 中執行。 您可以關閉 PowerShell 並關閉原始電腦,而不中斷 PSSession。

然後,即使是數小時后,您也可以使用 Get-PSSession Cmdlet 來取得 PSSession 和 Connect-PSSession Cmdlet,從不同 Windows 計算機上的新會話連線到 PSSession。

如需詳細資訊,請參閱 about_Remote_Disconnected_Sessions

如果我的計算機停止,我的 PSSession 會發生什麼事?

中斷聯機的 PSSession 與建立的會話無關。 如果您中斷 PSSession 的連線,然後關閉原始計算機,則會在遠端電腦上維護 PSSession。

此外,PowerShell 會嘗試復原非預期中斷連線的作用中 PSSession,例如計算機重新啟動、暫時停電或網路中斷。 如果原始會話仍然可用,則 PowerShell 會嘗試維護或復原 PSSession 至已開啟狀態,如果尚未開啟,或處於中斷聯機狀態。

「作用中」PSSession 是執行命令的 PSSession。 如果 PSSession 已連線(未中斷連線),而且當連線的會話關閉時,命令會在 PSSession 中執行,PowerShell 會嘗試在遠端電腦上維護 PSSession。 不過,如果沒有命令在 PSSession 中執行,PowerShell 會在連線的會話關閉時關閉 PSSession。

如需詳細資訊,請參閱 about_Remote_Disconnected_Sessions

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

是。 背景作業是在背景以異步方式執行的命令,而不需要與目前的會話互動。 當您提交命令以啟動作業時,命令會傳回作業物件,但工作會繼續在背景中執行,直到作業完成為止。

若要在本機計算機上啟動背景工作,請使用 Start-Job 命令。 您可以在暫存連接中執行背景工作(使用 ComputerName 參數)或 PSSession(使用 Session 參數)。

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

使用 Invoke-Command 來執行 Start-Job 命令時,您必須在 PSSession 中執行 命令。 如果您使用 ComputerName 參數,PowerShell 會在作業物件傳回時結束連接,且作業中斷。

如需詳細資訊,請參閱 about_Jobs

我可以執行互動式會話嗎?

是。 若要啟動遠端電腦的互動式會話,請使用 Enter-PSSession Cmdlet。 在互動式會話中,您輸入的命令會在遠端電腦上執行,就如同直接在遠端電腦上輸入它們一樣。

您可以在暫存會話(使用 ComputerName 參數)或 PSSession 中執行互動式會話(使用 Session 參數)。 如果您使用 PSSession,PSSession 會保留先前命令中的數據,而 PSSession 會保留互動式會話期間產生的任何數據,以供後續命令使用。

當您結束互動式會話時,PSSession 會保持開啟且可供使用。

如需詳細資訊,請參閱 Enter-PSSessionExit-PSSession

我必須刪除 PSSessions 嗎?

是。 PSSession 是一個程式,這是一個獨立式環境,即使您未使用它,也會使用記憶體和其他資源。 當您完成 PSSession 時,請將其刪除。 如果您建立多個 PSSession,請關閉您不使用的 PSSession,並只維護目前使用中的 PSSession。

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

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

如果您在變數中儲存 PSSession 對象,然後刪除 PSSession 或讓它逾時,變數仍然包含 PSSession 物件,但 PSSession 不是使用中,而且無法使用或修復。

所有工作階段和 PSSession 都一樣嗎?

否。 開發人員可以建立僅包含所選提供者和 Cmdlet 的自定義會話。 如果命令在一個會話中運作,但不在另一個會話中運作,可能是因為會話受到限制。

另請參閱