跳轉至

建立 2026-09-19 更新 2026-09-19

遠端管理

PowerShell 最強大的地方之一,是能在不登入的情況下,對一台甚至上百台遠端電腦執行同樣的指令。這一頁介紹遠端管理(remoting)的基本觀念與兩個最常用的 cmdlet。

兩種連線方式

方式 適用 說明
WinRM(WS-Management) Windows 到 Windows Windows PowerShell 與 PowerShell 7 都支援
SSH Windows、macOS、Linux 互連 PowerShell 7 支援,是跨平台遠端管理的做法

啟用(Windows)

在要被管理的電腦上,以系統管理員身分開啟 PowerShell,執行:

Enable-PSRemoting -Force

這會啟動 WinRM 服務並設定防火牆例外。網域環境中通常已由群組原則處理。

只在信任的網路上啟用

啟用遠端管理等於開了一個管理入口。請確認網路環境與帳號權限的設定,不要在不受管理的網路上任意開啟。

互動式連線:Enter-PSSession

像 SSH 一樣進入遠端電腦的命令列:

Enter-PSSession -ComputerName server01
# 提示字元會變成 [server01]: PS C:\>,之後輸入的指令都在遠端執行
Exit-PSSession    # 離開

透過 SSH 連線(PowerShell 7):

Enter-PSSession -HostName server01 -UserName victor

批次執行:Invoke-Command

Invoke-Command 把一段指令送到一台或多台電腦同時執行,並把結果收回來:

$servers = 'web01', 'web02', 'db01'

Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-Service -Name Spooler | Select-Object Name, Status
}

-ScriptBlock 的大括號內是在遠端執行的內容。結果會多一個 PSComputerName 屬性,告訴你資料來自哪台電腦,方便後續用 Sort-ObjectWhere-Object 處理。

把本機變數傳到遠端

大括號內的程式碼在遠端執行,看不到你本機的變數。用 $using: 前綴把它帶過去:

$serviceName = 'Spooler'

Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-Service -Name $using:serviceName
}

重複使用連線:New-PSSession

需要對同一台電腦連續下多次指令時,先建立工作階段(session)再重複使用,比每次重新連線更有效率:

$session = New-PSSession -ComputerName server01
Invoke-Command -Session $session -ScriptBlock { Get-Date }
Invoke-Command -Session $session -ScriptBlock { Get-Process | Select-Object -First 3 }
Remove-PSSession $session

遠端回傳的是「快照」物件

從遠端傳回來的物件,經過序列化再重建,只保留屬性的值沒有方法了,也不會隨遠端狀態改變。例如遠端傳回的 Service 物件沒有 .Stop() 方法可用。要對遠端做動作,就把動作寫在 -ScriptBlock 內,讓它在遠端執行。

認證

需要不同帳號時,用 Get-Credential 提示輸入,再透過 -Credential 參數傳入:

$cred = Get-Credential
Invoke-Command -ComputerName server01 -Credential $cred -ScriptBlock { whoami }

Get-Credential 會把密碼以安全字串保存,不要把帳號密碼直接寫進腳本。

推薦影音

PowerShell 遠端管理

簡述:John Savill 的 PowerShell Master Class 遠端單元(約 76 分鐘),完整說明如何用 PowerShell 同時管理多台系統,包含跨平台的連線,對應本頁全部內容。錄於 2019 年,SSH 遠端等跨平台部分是 PowerShell 6 之後的重要功能,PowerShell 7 沿用。

相關資料