PowerShell 基本操作教學|Windows 系統管理與常用指令實戰

PowerShell 基本操作教學|Windows 系統管理與常用指令實戰

PowerShell 基本操作是 Windows 系統管理與自動化的重要基礎。 相較於只使用圖形化介面,PowerShell 可以透過指令快速查詢系統資訊、管理檔案、控制服務、檢查程序、測試網路,以及管理 Windows 本機使用者。

PowerShell 不只是 Windows 版的 CMD。它是一套以物件(Object)為核心的 Shell 與自動化工具,因此可以將一個指令的輸出直接交給下一個 Cmdlet 處理,非常適合系統管理與腳本自動化。

本文範例環境:以 Windows PowerShell 與 Windows 10 / Windows 11 常見管理工作為主。部分 Cmdlet 可能需要系統管理員權限,且 Windows PowerShell 5.1 與 PowerShell 7 的可用模組可能不同。

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 維運能力。