PowerShell 基本操作是 Windows 系統管理與自動化的重要基礎。 相較於只使用圖形化介面,PowerShell 可以透過指令快速查詢系統資訊、管理檔案、控制服務、檢查程序、測試網路,以及管理 Windows 本機使用者。
PowerShell 不只是 Windows 版的 CMD。它是一套以物件(Object)為核心的 Shell 與自動化工具,因此可以將一個指令的輸出直接交給下一個 Cmdlet 處理,非常適合系統管理與腳本自動化。
PowerShell 是什麼?
PowerShell 是 Microsoft 提供的命令列 Shell、腳本語言與自動化平台,可以用來管理 Windows,也可以在不同平台上執行 PowerShell 7。
PowerShell 最重要的特點之一是物件導向的輸出。例如 Get-Process 取得的不是只有純文字,而是包含 Process Name、ID、CPU 等屬性的物件,因此可以使用 Where-Object、Select-Object、Sort-Object 等 Cmdlet 進一步篩選與整理。
PowerShell 與 CMD 的差異
| 項目 | CMD | PowerShell |
|---|---|---|
| 主要用途 | 基本命令列操作 | 系統管理與自動化 |
| 輸出形式 | 文字為主 | 物件為主 |
| 腳本能力 | Batch | PowerShell Script |
| 系統管理 | 有限 | 完整 Cmdlet 與管理模組 |
| 自動化 | 適合簡單工作 | 適合複雜管理流程 |
PowerShell 版本與系統資訊
查看 PowerShell 版本
比起 Get-Host,更推薦使用:
$PSVersionTable
如果只想查看版本:
$PSVersionTable.PSVersion
可以看到 Major、Minor、Patch 等版本資訊。
查看電腦基本資訊
Get-ComputerInfo
如果只需要主要資訊,可以搭配 Select-Object:
Get-ComputerInfo |
Select-Object CsName, WindowsProductName, OsVersion, CsProcessors
查看目前日期與時間
Get-Date
指定輸出格式:
Get-Date -Format "yyyy/MM/dd HH:mm:ss"
實務應用
在 IT 維運中,可以利用上述指令建立系統盤點腳本,例如一次收集電腦名稱、Windows 版本、PowerShell 版本、CPU 與其他系統資訊,避免逐台打開圖形化介面查看。
檔案與資料夾管理
PowerShell 可以直接處理 Windows 檔案與資料夾。常用 Cmdlet 包括 Get-ChildItem、Copy-Item、Move-Item 與 Remove-Item。
| Cmdlet | 用途 |
|---|---|
Get-ChildItem |
列出檔案與資料夾 |
Copy-Item |
複製檔案或資料夾 |
Move-Item |
移動或重新命名 |
Remove-Item |
刪除檔案或資料夾 |
Test-Path |
確認路徑是否存在 |
列出目錄
Get-ChildItem C:\Users
遞迴查看子資料夾:
Get-ChildItem C:\Users -Recurse
大型目錄使用 -Recurse 時可能產生大量輸出,因此正式腳本應搭配條件篩選。
複製檔案
Copy-Item C:\Temp\config.xml D:\Backup\config.xml
如果希望覆蓋既有目標:
Copy-Item C:\Temp\config.xml D:\Backup\config.xml -Force
移動檔案
Move-Item C:\Temp\log.txt D:\Archive\log.txt
刪除檔案
Remove-Item C:\Temp\old.log
刪除資料夾
Remove-Item C:\Temp\OldFolder -Recurse
Remove-Item -Recurse 可以刪除整個資料夾與其內容。正式環境執行前應確認路徑,必要時先使用 Get-ChildItem 查看內容。
確認檔案是否存在
Test-Path C:\Temp\config.xml
回傳 True 代表路徑存在,False 則代表不存在。
Windows 服務管理
PowerShell 可以查詢與控制 Windows Service,常用 Cmdlet 包括 Get-Service、Start-Service、Stop-Service 與 Restart-Service。
| 指令 | 用途 |
|---|---|
Get-Service |
查看服務 |
Start-Service |
啟動服務 |
Stop-Service |
停止服務 |
Restart-Service |
重新啟動服務 |
查看 Windows Update
Get-Service wuauserv
查看 Print Spooler
Get-Service Spooler
啟動服務
Start-Service Spooler
重新啟動服務
Restart-Service Spooler
部分服務需要以系統管理員身分執行 PowerShell。停止重要 Windows 服務之前,也應先確認服務用途與相依性,避免影響作業系統或正式環境服務。
如果需要更完整的服務管理,可以延伸閱讀: PowerShell 管理 Windows Service 完整指南
程序管理
PowerShell 可以查看目前執行中的程序,並在必要時終止失去回應的程式。
列出所有程序
Get-Process
查詢指定程序
Get-Process chrome
依 CPU 使用量排序
Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10 Name, Id, CPU
這是非常實用的系統排錯技巧,可以快速找出 CPU 使用量較高的程序。
依記憶體使用量排序
Get-Process |
Sort-Object WorkingSet64 -Descending |
Select-Object -First 10 Name, Id, WorkingSet64
關閉程序
Stop-Process -Name notepad
必要時可以使用:
Stop-Process -Name notepad -Force
-Force 終止系統程序。正式 Server 上應先確認程序名稱與 PID,避免中止重要服務。
網路管理與連線測試
測試網路連線
Test-Connection google.com -Count 4
它的用途類似傳統 ping,可以協助確認 ICMP 連線與延遲。
查看網路介面
Get-NetAdapter
可用來查看網卡名稱、狀態與連線資訊。
查看 IP 位址
Get-NetIPAddress
例如只查看 IPv4:
Get-NetIPAddress -AddressFamily IPv4
測試 TCP Port
這是 IT 維運中非常實用的 PowerShell 指令:
Test-NetConnection 192.168.1.15 -Port 3389
如果看到:
TcpTestSucceeded : True
表示從目前這台電腦到指定主機的 TCP 3389 Port 測試成功。 這個方法比單純 Ping 更適合排查 RDP、Web Server、Database 等 TCP 服務。
查詢 DNS
Resolve-DnsName example.com
可以用來確認名稱解析是否正常。
使用者與群組管理
Windows PowerShell 提供本機帳號與群組管理 Cmdlet,例如 Get-LocalUser、New-LocalUser、Remove-LocalUser 與 Add-LocalGroupMember。
查看本機使用者
Get-LocalUser
查看指定使用者
Get-LocalUser -Name "testuser"
建立使用者
建立帳號時,不建議直接把明文密碼寫進腳本。 可以要求 PowerShell 互動輸入密碼:
$Password = Read-Host "請輸入密碼" -AsSecureString
New-LocalUser `
-Name "testuser" `
-Password $Password `
-FullName "Test User"
將使用者加入 Administrators
Add-LocalGroupMember `
-Group "Administrators" `
-Member "testuser"
是否應該加入 Administrators 必須依實際工作需求決定。遵循最小權限原則時,只有需要系統管理權限的帳號才應加入管理員群組。
刪除使用者
Remove-LocalUser -Name "testuser"
刪除本機帳號前應確認該帳號是否仍被使用,以及相關使用者資料是否需要另外保存。
PowerShell 常用進階技巧
使用 Where-Object 篩選
例如找出正在執行的服務:
Get-Service |
Where-Object {$_.Status -eq "Running"}
使用 Select-Object 選擇欄位
Get-Process |
Select-Object Name, Id, CPU
使用 Sort-Object 排序
Get-Process |
Sort-Object CPU -Descending
將結果輸出成 CSV
Get-Process |
Select-Object Name, Id, CPU |
Export-Csv C:\Temp\process.csv -NoTypeInformation -Encoding UTF8
這種方式很適合建立系統盤點與報表。
取得 Cmdlet 說明
Get-Help Get-Service
查看更詳細的說明:
Get-Help Get-Service -Detailed
如果需要線上更新 Help:
Update-Help
常見錯誤與排錯方法
錯誤一:Access is denied
通常代表目前 PowerShell 權限不足。 可以嘗試用「以系統管理員身分執行」重新開啟 PowerShell。
錯誤二:Command not found
如果出現 Cmdlet 找不到,先確認:
Get-Command Cmdlet名稱
例如:
Get-Command Get-LocalUser
部分 Cmdlet 只存在於特定 Windows 版本或 PowerShell 模組,因此不能看到別人的指令後就假設所有環境都支援。
錯誤三:腳本無法執行
如果執行 .ps1 腳本時被 Execution Policy 阻擋,先查看目前設定:
Get-ExecutionPolicy -List
不要為了方便就直接設定成完全不限制的模式。應依企業環境與安全政策決定適當的 Execution Policy。
錯誤四:修改服務後出現問題
執行 Stop-Service、Set-Service 或其他服務設定前,應先確認服務名稱、啟動方式與相依服務。 正式 Server 建議先在測試環境驗證。
FAQ 常見問題
PowerShell 適合新手嗎?
適合。建議先從 Get-Command、Get-Help、Get-Process、Get-Service、Get-ChildItem 等基本 Cmdlet 開始,再逐步學習 Pipeline 與 Script。
如何查看 PowerShell 版本?
推薦使用 $PSVersionTable 或 $PSVersionTable.PSVersion,比單純使用 Get-Host 更適合確認 PowerShell 版本資訊。
PowerShell 和 CMD 有什麼不同?
CMD 主要是傳統 Windows 命令列工具;PowerShell 則提供物件管線、Cmdlet、腳本與更完整的系統管理能力。
PowerShell 可以管理 Windows Service 嗎?
可以。常用 Cmdlet 包括 Get-Service、Start-Service、Stop-Service 與 Restart-Service。
如何用 PowerShell 測試 RDP Port 3389?
可以使用 Test-NetConnection 目標IP -Port 3389。如果 TcpTestSucceeded 顯示 True,代表 TCP Port 測試成功。
PowerShell 可以建立 Windows 使用者嗎?
可以。Windows 提供 New-LocalUser 等 Cmdlet,但建立帳號時應避免在腳本中直接保存明文密碼,並應依最小權限原則配置群組權限。
Remove-Item -Recurse 危險嗎?
需要小心。它可以遞迴刪除資料夾及其中內容。正式環境執行前應確認完整路徑與目標內容,必要時先使用 Get-ChildItem 檢查。
PowerShell 可以做自動化備份嗎?
可以。Copy-Item、Move-Item、Robocopy 與其他 PowerShell 工具都可以用來建立自動化工作流程。不過正式備份還需要考慮版本保留、權限、完整性驗證與還原測試。
總結: PowerShell 基本操作的核心不是背大量指令,而是理解 Cmdlet、參數、Pipeline 與物件輸出。 先熟悉系統資訊、檔案、服務、程序、網路與使用者管理,再進一步學習 PowerShell Script、排程、Windows Server 管理與自動化,就能逐漸建立完整的 Windows 維運能力。
