about_PSSession_Details
主題
about_PSSession_Details
簡短描述
提供有關 Windows PowerShell 工作階段及其在遠端命令中所扮演角色的詳細資訊。
完整描述
工作階段是指 Windows PowerShell 在其中執行的環境。每當您啟動
Windows PowerShell 時,就會建立一個工作階段。您也可以在您的電腦或另一台電腦
建立額外的工作階段,名稱為「Windows PowerShell 工作階段」或 "PSSessions"。
與 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 參數,而且使用
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。
我看得見其他人在我電腦上建立的 PSSESSIONS 嗎?
不行。您只能取得和管理您自己在目前工作階段中建立的 PSSession。您無法查看其
他人建立的 PSSession,即使他們是在本機電腦上執行命令也一樣。
我可以在 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 也會保留互動式工作階段所產生的資料,以供
稍後的命令使用。
結束互動式工作階段時,PSSession 仍會保持開啟且可供使用。
如需詳細資訊,請參閱 Enter-PSSession 和 Exit-PSSession。
應該刪除 PSSESSION 嗎?
是的。PSSession 是一個處理序、一個獨立的 (Self-Contained) 環境,會佔用記
憶體和其他資源,即使不在使用中也會佔用資源。所以當您使用完 PSSession 時,
請將它刪除。如果您建立了多個 PSSession,請關閉未使用的 PSSession,只保留
仍在使用中的即可。
若要刪除 PSSession,請使用 Remove-PSSession Cmdlet,它會刪除 PSSession 並
釋放原先被佔用的所有資源。
您也可以使用 New-PSSession 的 TimeOut 參數,在超過您指定的時間間隔後關閉閒
置的 PSSession。如需詳細資訊,請參閱 New-PSSession。
如果您不刪除 PSSession 或設定逾時,則 PSSession 會一直保持開啟並處於可用狀
態,除非您將它關閉、關閉用來建立它的工作階段或是結束 Windows PowerShell。不
過,如果遠端電腦超過四分鐘沒有回應,遠端電腦上的 PSSession 將會中斷連線
(遠端電腦已設定為每隔三分鐘傳送一次活動訊號)。
如果您將 PSSession 物件儲存在變數中,接著刪除 PSSession 或讓它逾時,則該變
數仍會包含 PSSession 物件,但是 PSSession 已非作用中,無法使用也無法修復。
所有工作階段和 PSSESSION 都一樣嗎?
不。開發人員可以建立自訂工作階段,只包含特定的提供者和 Cmdlet。如果某個命
令可以在某個工作階段中執行,但無法在另一個工作階段中執行,可能是因為該工
作階段受到限制。
請參閱
about_Jobs
about_PSSessions
about_Remote
about_Remote_Requirements
Invoke-Command
New-PSSession
Get-PSSession
Remove-PSSession
Enter-PSSession
Exit-PSSession