服务与任务
Windows 服务(Service)和计划任务(Scheduled Task)的管理,涵盖 services.msc / taskschd.msc GUI,以及 sc、net、schtasks、PowerShell。
services.msc(服务 GUI)
services.msc或:计算机管理 → 服务和应用程序 → 服务(compmgmt.msc)。详见 管理工具。
| 操作 | 说明 |
|---|---|
| 启动 / 停止 / 重启 | 右键服务 → 对应项 |
| 启动类型 | 自动、手动、禁用、自动(延迟启动) |
| 登录 | 服务运行账户(本地系统 / 网络服务 / 自定义) |
| 恢复 | 失败时重启服务或运行程序 |
| 依赖关系 | 「依存关系」选项卡,查看必须先启动的服务 |
排查启动失败:记下服务名称(如 wuauserv),用 sc query 看状态,并到 事件与日志 查系统日志。
计划任务(GUI)
taskschd.msc创建任务时可配置触发器、操作、条件、设置;历史记录选项卡可查看最近运行结果(需启用任务历史)。
Windows 服务
概念
| 概念 | 说明 |
|---|---|
| 服务 | 后台运行的进程,由 SCM(服务控制管理器)管理 |
| 启动类型 | 自动、手动、禁用、延迟自动 |
| 服务账户 | LocalSystem、NetworkService、LocalService 或自定义域账户 |
| 依赖关系 | 服务可依赖其他服务,被依赖服务先启动 |
sc 命令
sc query :: 列出所有运行中服务
sc query type= all state= all :: 列出所有服务
sc qc wuauserv :: 查看服务配置
sc start wuauserv :: 启动服务
sc stop wuauserv :: 停止服务
sc config wuauserv start= auto :: 设为自动启动
sc config wuauserv start= demand :: 设为手动启动
sc config wuauserv start= disabled :: 禁用服务
sc delete myservice :: 删除服务(需先停止)
sc failure myservice reset= 86400 actions= restart/5000/restart/10000//net 命令
net start :: 列出已启动服务
net start "Print Spooler" :: 启动服务(显示名)
net stop "Print Spooler" :: 停止服务
net start wuauserv :: 启动服务(服务名)创建自定义服务
sc create MyApp binPath= "C:\apps\myapp.exe" start= auto DisplayName= "My Application"
sc description MyApp "My custom application service"
sc start MyApp用 NSSM 包装任意程序:
nssm install MyApp C:\apps\myapp.exe
nssm set MyApp AppDirectory C:\apps
nssm set MyApp AppStdout C:\logs\myapp.log
nssm set MyApp AppStderr C:\logs\myapp-err.log
nssm start MyAppPowerShell 管理服务
Get-Service # 列出所有服务
Get-Service -Name "wuauserv" # 查看指定服务
Get-Service | Where-Object Status -eq "Running" # 筛选运行中
Start-Service -Name "wuauserv" # 启动
Stop-Service -Name "wuauserv" -Force # 强制停止
Restart-Service -Name "Spooler" # 重启
Set-Service -Name "wuauserv" -StartupType Automatic # 自动启动
Set-Service -Name "wuauserv" -StartupType Disabled # 禁用
New-Service -Name "MyApp" -BinaryPathName "C:\apps\myapp.exe" -StartupType Automatic
Remove-Service -Name "MyApp" # 删除(PowerShell 6+)计划任务
schtasks 命令
:: 查询
schtasks /query /fo table :: 表格列出所有任务
schtasks /query /tn "MyBackup" /fo list /v :: 详细查看指定任务
:: 创建
schtasks /create /tn "MyBackup" /tr "C:\scripts\backup.bat" /sc daily /st 02:00 /ru SYSTEM
:: 触发方式
:: /sc minute /mo 30 每 30 分钟
:: /sc hourly 每小时
:: /sc daily /st 08:00 每天 08:00
:: /sc weekly /d MON /st 09:00 每周一 09:00
:: /sc monthly /d 1 /st 00:00 每月 1 日
:: /sc onstart 系统启动时
:: /sc onlogon 用户登录时
:: 管理
schtasks /run /tn "MyBackup" :: 立即运行
schtasks /end /tn "MyBackup" :: 终止运行中任务
schtasks /delete /tn "MyBackup" /f :: 删除(不提示)
schtasks /change /tn "MyBackup" /disable :: 禁用
schtasks /change /tn "MyBackup" /enable :: 启用PowerShell 计划任务
# 查看
Get-ScheduledTask # 列出所有
Get-ScheduledTask -TaskName "MyBackup" # 指定任务
Get-ScheduledTask | Where-Object State -eq "Ready"
# 创建(触发器 + 操作 + 注册)
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NonInteractive -File C:\scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00AM"
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1)
Register-ScheduledTask -TaskName "MyBackup" `
-Action $action -Trigger $trigger -Settings $settings `
-RunLevel Highest -User "SYSTEM"
# 管理
Start-ScheduledTask -TaskName "MyBackup"
Stop-ScheduledTask -TaskName "MyBackup"
Enable-ScheduledTask -TaskName "MyBackup"
Disable-ScheduledTask -TaskName "MyBackup"
Unregister-ScheduledTask -TaskName "MyBackup" -Confirm:$false
# 查看上次运行结果(0 = 成功)
(Get-ScheduledTaskInfo -TaskName "MyBackup").LastTaskResult
(Get-ScheduledTaskInfo -TaskName "MyBackup").LastRunTime相关文档
- 管理工具 — services.msc、taskschd、compmgmt
- 事件与日志 — 服务/任务失败时查日志
- 进程与线程 — 进程管理
- 用户与权限 — 服务账户与权限
- PowerShell — PowerShell 自动化