使用 Windows PowerShell 從遠端管理伺服器
Contoso 的 IT 系統管理人員越來越專注在從他們所管理的物件遠端執行管理工作。 其中一個特別吸引人的地方是能夠利用 Windows PowerShell 來從遠端系統管理 Contoso 的 IT 基礎結構。 您可以使用 Windows PowerShell 遠端處理功能達成這項目標。
遠端處理的要求
遠端處理要求您的本機電腦擁有 Windows PowerShell,以及在您想要連線的任何遠端電腦上啟用 Windows 遠端管理。 您也必須啟用 Windows PowerShell 遠端處理。
注意
在 Windows Server 中會預設啟用 Windows PowerShell 遠端功能,但在 Windows 10 和 Windows 11 上您必須啟用這項功能。
若要啟用 Windows PowerShell 遠端處理,請使用下列其中一個程序。 提升權限的命令提示字元 (或 Windows PowerShell (系統管理員) 提示字元) 中,執行下列命令:
Winrm quickconfig
或者若要啟用遠端功能,您可以使用下列 Windows PowerShell Cmdlet:
Enable-PSremoting -force
重要
Windows 遠端管理透過 HTTP 進行通訊。 根據預設,Windows 遠端管理和 Windows PowerShell 遠端處理會針對傳入的未加密連線使用 TCP 通訊埠 5985,並針對傳入的加密連線使用 TCP 通訊埠 5986。
注意
使用 Windows 遠端管理的應用程式 (例如 Windows PowerShell) 也可以將自己的加密套用至傳遞給 Windows 遠端管理服務的資料。
執行特定命令所需的所有檔案和其他資源都必須位於遠端電腦上,因為遠端命令不會複製任何資源。 不過,您可以執行本機指令碼。 這是因為指令碼的內容會傳送到遠端電腦,而非指令碼檔案本身。
若要執行遠端系統管理,系統管理員必須具備下列權限:
- 連線到遠端電腦
- 執行 Windows PowerShell
- 存取存放在遠端電腦上的資料和登錄
警告
在具有網路介面卡 (NIC) 並已受指派至公用網路位置設定檔的電腦上啟用遠端處理會產生錯誤。 您可以使用 Enable-PSremoting -force
略過此限制,並在具有公用 NIC 的裝置上強制進行遠端處理。
針對遠端電腦執行 Cmdlet
有數個 Cmdlet 具有 ComputerName 參數,可讓您從遠端電腦擷取物件。 由於這些 Cmdlet 不會使用 Windows PowerShell 遠端進行通訊,因此您可以在執行 Windows PowerShell 的任何電腦上使用這些 Cmdlet 中的 ComputerName 參數。 您不必設定電腦進行 Windows PowerShell 遠端處理,或滿足遠端處理的系統需求。
下表提供 ComputerName 參數的詳細資訊。
命令 | 說明 |
---|---|
Get-Command –ParameterName ComputerName |
尋找使用 ComputerName 參數的 Cmdlet。 |
Get-Help <cmdlet-name> -parameter ComputerName |
判斷 ComputerName 參數是否需要 Windows PowerShell 遠端處理。 |
處理遠端命令
當您連線到遠端電腦並向其傳送遠端命令時,此命令會透過網路傳輸至遠端電腦上的 Windows PowerShell 執行個體,然後在該電腦上執行。 命令結果會傳送回本機電腦,並顯示在本機電腦上的 Windows PowerShell 工作階段中。
在傳送至遠端電腦之前,系統會先收集遠端命令的所有本機輸入。 不過,輸出會在產生的同時傳回給本機電腦。 當您連線到遠端電腦時,系統會使用本機電腦上的使用者名稱和密碼認證,向遠端電腦驗證您的身分。
注意
根據預設,Kerberos 第 5 版 (V5) 驗證通訊協定會用於執行授權和驗證。 因此需要 AD DS 網域。
提示
如果遠端電腦不在網域中,或位於不受信任的網域中,您可以將遠端電腦定義為受信任的主機,從而允許用戶端電腦連線。
以下 Cmdlets 支援遠端處理。
Invoke-Command
Enter-PSSession
Exit-PSSession
Disconnect-PSSession
Receive-PSSession
Connect-PSSession
提示
您可以使用 Windows PowerShell ISE 建立遠端索引標籤。 若要執行這項工作,請從 Windows PowerShell ISE 的 [檔案] 功能表中,使用 [新增遠端 PowerShell 索引標籤] 選項。
當您實作遠端處理時,可以使用暫存工作階段連線到遠端電腦,也可以建立持續性工作階段。
建立暫存工作階段
針對暫存工作階段,您可以啟動工作階段、執行命令,然後結束工作階段。 這是一種執行單一命令或數個不相關的命令的高效率方式,即使在大量的遠端電腦上亦然。
注意
當您關閉連線之後,就無法再使用在命令內定義的變數或函數。
若要建立暫時連線,請使用 Invoke-Command
cmdlet with the –ComputerName 參數來指定遠端電腦。 然後,使用 – ScriptBlock 參數來指定命令。 例如,下列命令會在 SEA-DC1 電腦上執行 Get-EventLog
:
Invoke-Command –ComputerName SEA-DC1 –ScriptBlock {Get-EventLog –log system}
建立持續工作階段
若要建立與另一部電腦的持續連線,請使用 New-PSSession
Cmdlet。 例如,下列命令會在遠端電腦上建立工作階段,並將工作階段儲存在 $s 變數中:
$s = New-PSSession –ComputerName SEA-DC1
使用 Enter-PSSession
Cmdlet 來連線並啟動互動式工作階段。 例如,您在 SEA-DC1 上開啟新的工作階段之後,下列命令會啟動與電腦的互動式工作階段:
Enter-PSSession $s
您進入工作階段之後,本機電腦上的 Windows PowerShell 命令提示字元就會變更,以指出該連線。
互動式工作階段會保持開啟,直到您關閉為止。 這可讓您視需要執行任意數量的命令。 若要結束互動式工作階段,請輸入下列命令:
Exit-PSSession
在多部電腦上執行遠端命令
針對暫存工作階段,Invoke-Command
Cmdlet 接受多個電腦名稱。 若為持續連線,Session 參數接受多個 Windows PowerShell 工作階段。 若要在多部電腦上執行遠端命令,請將所有電腦名稱加入含有 Invoke-Command
Cmdlet 的 ComputerName 參數中,並以逗號分隔名稱,如下範例所示:
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2 -ScriptBlock {Get-Culture}
針對持續工作階段,您也可以在多個 Windows PowerShell 工作階段中執行命令。 下列命令會在 SEA-DC1、SEA-SVR1 和 SEA-SVR2 上建立 Windows PowerShell 工作階段,然後在每個 Windows PowerShell 工作階段中執行 Get-Culture
命令:
$s = New-PSSession -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
提示
若要將本機電腦包含在電腦清單中,請輸入本機電腦的名稱,或句點 (.) 或 localhost。
如何在遠端電腦上執行指令碼
若要在遠端電腦上執行指令碼,請使用 FilePath 參數和 Invoke-Command
。 下列命令會在 SEA-DC1 和 SEA-SVR1 電腦上執行 Sample.ps1 指令碼:
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1 –FilePath C:\Test\Sample.ps1
指令碼的結果會傳回到本機電腦。 透過使用 FilePath 參數,您不需要將任何檔案複製到遠端電腦。
示範
下列影片示範如何使用 Windows PowerShell 管理遠端 Windows 伺服器。 此程序的主要步驟如下:
開啟提升權限的 PowerShell 命令提示字元。
執行下列命令來建立 PowerShell 遠端工作階段:
Enter-PSSession -ComputerName SEA-DC1
使用標準 Windows PowerShell Cmdlet 來擷取伺服器的相關資訊,例如名稱和 IP 位址。
檢查 IIS 服務的狀態,然後使用下列命令重新啟動該服務:
Get-Service -Name IISAdmin | Restart-Service