服務起不來、排程沒跑或系統檔損壞時,先查狀態與事件,再決定要不要重啟或修復。直接重開服務可能讓證據消失,也可能中斷其他工作階段。
服務與程序
列出正在執行的服務PowerShell
Get-Service | Where-Object Status -eq Running | Sort-Object DisplayName先確認真正的 ServiceName。
查看指定服務PowerShell
Get-Service -Name W32Time可看到 Running、Stopped 與啟動能力。
查看服務完整設定命令提示字元
sc.exe qc W32Time可看到啟動帳號、binary path 與相依性。
查看服務目前狀態命令提示字元
sc.exe queryex W32Timequeryex 會包含 PID 等資訊。
重新啟動指定服務系統管理員 PowerShell
Restart-Service -Name W32Time -WhatIf先用 -WhatIf;確認影響後才正式執行。
查看程序命令提示字元
tasklist可用 /FI 篩選,避免輸出太長。
依映像名稱找程序命令提示字元
tasklist /FI "IMAGENAME eq nginx.exe"同名程序可能有多個 PID。
查看程序命令列PowerShell
Get-CimInstance Win32_Process | Select-Object ProcessId, Name, CommandLine命令列可能含敏感參數,分享前遮蔽。
優雅停止一般程序PowerShell
Stop-Process -Id 1234 -WhatIf先確認 PID 與相依服務;不要直接加 -Force。
事件記錄與時間篩選
查看 System 最新 50 筆PowerShell
Get-WinEvent -LogName System -MaxEvents 50依時間由新到舊。
只看系統錯誤PowerShell
Get-WinEvent -FilterHashtable @{LogName='System'; Level=2; StartTime=(Get-Date).AddHours(-2)}Level 2 是 Error;還要搭配 Warning 與事件上下文。
查指定 ProviderPowerShell
Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='Service Control Manager'; StartTime=(Get-Date).AddDays(-1)}Provider 名稱需與事件實際值一致。
查指定 Event IDPowerShell
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7031; StartTime=(Get-Date).AddDays(-7)}相同 Event ID 在不同 log/provider 的語意可能不同。
列出事件 Log 名稱PowerShell
Get-WinEvent -ListLog * | Where-Object RecordCount -gt 0 | Sort-Object LogName很多 Operational log 預設未啟用。
匯出篩選結果PowerShell
Get-WinEvent -FilterHashtable @{LogName='System'; StartTime=(Get-Date).AddHours(-1)} | Export-Csv .\system-events.csv -NoTypeInformation -Encoding utf8CSV 不一定保留完整訊息格式;原始 EVTX 可另存。
查看單筆事件完整內容PowerShell
Get-WinEvent -LogName System -MaxEvents 1 | Format-List *適合找 Properties 與 XML 細節。
排程與系統修復
列出排程摘要命令提示字元
schtasks /query /fo table以系統管理員執行可看到更多工作。
查看排程詳細資訊命令提示字元
schtasks /query /tn "\Company\Nightly Backup" /v /fo list確認 Last Run Result、執行帳號與下次時間。
手動觸發排程系統管理員 CMD
schtasks /run /tn "\Company\Nightly Backup"會立即執行,先確認不與正式工作重疊。
用 PowerShell 查看失敗排程PowerShell
Get-ScheduledTask | Get-ScheduledTaskInfo | Where-Object LastTaskResult -ne 0部分正常狀態碼不是 0,需查該工作與 API 定義。
檢查系統檔系統管理員 CMD
sfc /scannow可能耗時,完成後看 CBS.log 與結果,不要中途中斷。
檢查 Windows 映像系統管理員 CMD
DISM /Online /Cleanup-Image /ScanHealthScanHealth 只掃描;可能需要一段時間。
修復 Windows 映像系統管理員 CMD
DISM /Online /Cleanup-Image /RestoreHealth可能連 Windows Update 或需要指定來源;安排維護時間。
查看開機時間PowerShell
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime快速判斷是否近期重開。
查看時間服務狀態命令提示字元
w32tm /query /status網域環境還要確認時間階層與來源。
查看時間來源命令提示字元
w32tm /query /source不要未查架構就把 DC 指到任意公用 NTP。
怎麼確認有做對
- 重啟前後記錄服務狀態、PID 與相同時間範圍的事件。
- 排程要看 Last Run Result,也要檢查實際輸出檔或業務結果。
- SFC/DISM 完成後保存結果與 log,再決定是否重開。
常見錯誤
- 一看到服務停止就直接重啟,沒先查事件。
- 用 taskkill /F 結束不熟悉的系統程序。
- 只看排程顯示 Ready 就認定任務成功。
- 把 SFC/DISM 當成所有 Windows 問題的第一步。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。