PowerShell 的檔案操作可以把搜尋結果直接交給下一個步驟,但也因此容易一次命中很多檔案。先列出、計數與抽樣,再做 Move、Rename 或 Remove。
動手前:遞迴移動、覆蓋與刪除前使用 -WhatIf(若該 cmdlet 支援),並把目標縮到明確資料夾。雜湊只能驗完整性,不能證明來源可信。
列出、搜尋與統計
列出目前資料夾PowerShell
Get-ChildItem預設不顯示隱藏項目。
包含隱藏項目PowerShell
Get-ChildItem -Force仍受 ACL 權限限制。
遞迴找副檔名PowerShell
Get-ChildItem C:\Logs -Recurse -File -Filter *.log-Filter 通常比先列全部再 Where-Object 快。
找 7 天內修改檔案PowerShell
Get-ChildItem C:\Data -Recurse -File | Where-Object LastWriteTime -ge (Get-Date).AddDays(-7)大量目錄可能較慢,先縮小路徑。
依大小排序PowerShell
Get-ChildItem C:\Data -Recurse -File | Sort-Object Length -Descending | Select-Object -First 20 FullName, LengthLength 是 bytes,可再轉 MB。
統計資料夾總大小PowerShell
Get-ChildItem C:\Data -Recurse -File | Measure-Object Length -Sum權限拒絕或 junction 可能影響結果。
搜尋檔案內容PowerShell
Select-String -Path C:\Logs\*.log -Pattern 'timeout|refused' -CaseSensitive:$falsePattern 預設是 regex。
遞迴搜尋文字PowerShell
Get-ChildItem C:\Logs -Recurse -File -Filter *.log | Select-String -Pattern 'ERROR'先限制檔案類型,避免掃到二進位檔。
複製、移動與重新命名
複製單一檔案PowerShell
Copy-Item C:\Data\report.csv D:\Backup\report.csv目的已存在時確認覆蓋行為。
複製整個資料夾PowerShell
Copy-Item C:\Data D:\Backup -Recurse大量或可續傳需求優先用 Robocopy。
移動前預演PowerShell
Move-Item C:\Inbox\*.csv C:\Archive -WhatIf確認命中清單後再移除 -WhatIf。
批次重新命名前預演PowerShell
Get-ChildItem C:\Photos -File | Rename-Item -NewName { $_.Name -replace ' ', '_' } -WhatIf先處理重名與特殊字元。
建立資料夾PowerShell
New-Item -ItemType Directory -Path C:\Data\Archive -Force-Force 在已存在時不報錯,但不會清空內容。
建立文字檔PowerShell
Set-Content -Path C:\Temp\note.txt -Value '維護完成' -Encoding utf8Set-Content 會覆寫;追加要用 Add-Content。
追加一行紀錄PowerShell
Add-Content -Path C:\Logs\ops.log -Value "$(Get-Date -Format s) maintenance completed"log 需要輪替與權限保護。
CSV、ZIP 與雜湊
讀取 CSVPowerShell
Import-Csv .\devices.csv | Select-Object Name, IP, ModelCSV 欄名需與 Select-Object 一致。
匯出 UTF-8 CSVPowerShell
Get-Process | Select-Object Name, Id, CPU | Export-Csv .\processes.csv -NoTypeInformation -Encoding utf8不同 PowerShell 版本的預設 encoding 不同,明確指定較穩。
建立 ZIPPowerShell
Compress-Archive -Path C:\Data\Reports\* -DestinationPath C:\Backup\reports.zip既有 zip 的更新與覆蓋行為要先查說明。
解開 ZIPPowerShell
Expand-Archive -Path C:\Downloads\package.zip -DestinationPath C:\Temp\package先在隔離資料夾解壓,檢查內容與路徑。
計算 SHA-256PowerShell
Get-FileHash C:\Downloads\installer.exe -Algorithm SHA256與廠商 HTTPS 官網或簽章提供的值比對。
批次計算 SHA-256PowerShell
Get-ChildItem C:\Downloads -File | Get-FileHash -Algorithm SHA256 | Export-Csv C:\Downloads\sha256.csv -NoTypeInformation清單可用於後續完整性稽核。
比較兩個雜湊PowerShell
(Get-FileHash C:\A\file.iso).Hash -eq (Get-FileHash D:\B\file.iso).HashTrue 代表內容一致,不代表檔案安全。
怎麼確認有做對
- 操作前先輸出命中數量與前幾筆路徑。
- 複製後比對筆數、大小與抽樣 SHA-256。
- 壓縮檔在臨時資料夾試解,再交付或部署。
常見錯誤
- 大量操作沒有 -WhatIf 或清單審核。
- Set-Content 覆蓋掉原檔。
- 把 ZIP 當成真正備份而沒有異地與版本。
- 只比檔名或大小,不驗內容。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。