檔案與系統管理
管理檔案與系統是 PowerShell 最經典的用途。本頁整理最常用的 cmdlet,並介紹兩個能避免誤刪的安全開關:-WhatIf 與 -Confirm。
瀏覽與操作檔案
PowerShell 把檔案系統當成一種「提供者(provider)」,所以很多熟悉的指令都有別名。在 Windows 上,ls、cp、mv、rm 都是 cmdlet 的別名;在 macOS 與 Linux 上,這幾個名稱會直接執行系統原生指令,不是 cmdlet 別名(cd 則在各平台都是 Set-Location)。所以寫腳本時請用完整的 cmdlet 名稱,行為才會一致。
| 目的 | Cmdlet | 常見別名 |
|---|---|---|
| 列出檔案 | Get-ChildItem |
ls、dir |
| 切換位置 | Set-Location |
cd |
| 複製 | Copy-Item |
cp |
| 移動或改名 | Move-Item、Rename-Item |
mv |
| 刪除 | Remove-Item |
rm |
| 建立檔案或資料夾 | New-Item |
|
| 是否存在 | Test-Path |
# 遞迴找出所有 .log,並依大小排序
Get-ChildItem -Path C:\Logs -Filter *.log -Recurse |
Sort-Object Length -Descending |
Select-Object -First 10 FullName, Length
# 建立資料夾並複製檔案
New-Item -ItemType Directory -Path .\backup -Force | Out-Null
Copy-Item .\report.xlsx -Destination .\backup\
# 找出 30 天以上沒動過的檔案
$cutoff = (Get-Date).AddDays(-30)
Get-ChildItem -Path . -File | Where-Object LastWriteTime -lt $cutoff
在跨平台的腳本裡,請用 Join-Path 組路徑,不要手寫 \ 或 /。
動手前的安全網:-WhatIf 與 -Confirm
會修改系統的 cmdlet(Remove-Item、Stop-Process、Set-Service 等)幾乎都支援兩個安全開關:
# 只顯示「將會」做什麼,實際上不執行
Get-ChildItem *.tmp | Remove-Item -WhatIf
# 每一項都詢問你是否確定
Get-ChildItem *.tmp | Remove-Item -Confirm
先加 -WhatIf 看輸出的清單對不對,確認無誤後再拿掉。 這個習慣能救你很多次。
讀寫文字檔
# 讀取:每一行成為陣列的一個元素
$lines = Get-Content .\app.log
# 一次讀成單一字串
$text = Get-Content .\app.log -Raw
# 寫入(會覆蓋原內容)與附加
'第一行' | Set-Content .\note.txt
'新增一行' | Add-Content .\note.txt
# 用管線篩選:找出含 ERROR 的行
Get-Content .\app.log | Select-String 'ERROR'
Select-String 相當於 grep,支援正規表示式。文字檔的編碼在 PowerShell 7 預設為 UTF-8(不含 BOM),Windows PowerShell 5.1 的預設則因 cmdlet 而異,處理中文檔案時請留意,必要時用 -Encoding 明確指定。
處理程序與服務
# 記憶體用量前五名的處理程序
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 Name, Id
# 停止某個處理程序(先用 -WhatIf 預覽)
Stop-Process -Name notepad -WhatIf
# 服務(Windows)
Get-Service | Where-Object Status -eq 'Running'
Restart-Service -Name Spooler
Get-Service 等服務相關 cmdlet 僅適用於 Windows。在 macOS 與 Linux 上,服務管理請用系統自己的工具(如 systemctl),也可以直接在 PowerShell 中呼叫這些外部程式。
系統資訊
$PSVersionTable # PowerShell 版本與作業系統
$env:COMPUTERNAME # 電腦名稱(Windows)
Get-Date # 現在時間
Get-Location # 目前所在資料夾
相關資料
- Working with files and folders(官方範例集)
- 下一步:資料格式與 API