PowerShell 是 Windows 服务自动化首选工具,核心在于掌握 Get-Service、Start/Stop/Restart-Service、Set-Service 等 cmdlet 组合逻辑,支持查询筛选、启停重启、启动类型设置及脚本化定时任务。
powershell 是 windows 系统服务启停自动化的首选工具,无需第三方软件,一条命令或一个脚本就能完成查、启、停、设、批量操作。关键不在于学多少命令,而在于掌握几个核心 cmdlet 的组合逻辑和常见使用场景。
快速查看与精准筛选服务状态
用 Get-Service 获取服务快照,配合 Where-Object 实现按需过滤:
- 查所有正在运行的服务:
Get-Service | Where-Object {$_.Status -eq 'Running'} - 查启动类型为“自动”但当前已停止的服务(常用于故障排查):
Get-Service | Where-Object {$_.StartType -eq 'Automatic' -and $_.Status -eq 'Stopped'} - 按显示名称模糊匹配(如找更新相关服务):
Get-Service | Where-Object {$_.DisplayName -like "*更新*"} - 导出完整清单到桌面 CSV 文件,含名称、显示名、状态、启动类型:
Get-Service | Select-Object Name,DisplayName,Status,StartType | Export-Csv "$env:USERPROFILE\Desktop\Services.csv" -Encoding UTF8 -NoTypeInformation
一键启停与强制重启服务
Start-Service、Stop-Service 和 Restart-Service 支持名称、显示名或管道输入,操作直接有效:
- 启动 Windows Update 服务:
Start-Service -Name wuauserv - 停止“打印后台处理程序”(用显示名更直观):
Stop-Service -DisplayName "Print Spooler" - 强制重启 BITS 服务(跳过确认、清理依赖):
Get-Service bits | Restart-Service -Force - 批量停止所有以“wmi”开头且正在运行的服务:
Get-Service wmi* | Where-Object {$_.Status -eq 'Running'} | Stop-Service -Force
设置并同步服务启动类型
用 Set-Service 修改注册表中的启动配置(Auto/Manual/Disabled),注意它不改变当前运行状态:
- 设 Windows Update 开机自动启动:
Set-Service -Name wuauserv -StartupType Automatic - 禁用 SysMain(Superfetch)服务:
Set-Service -Name SysMain -StartupType Disabled - 设多个服务为手动启动(数组+管道):
'wuauserv','bits','appidsvc' | ForEach-Object { Set-Service $_ -StartupType Manual } - 若希望修改后立即生效,需额外加启停命令,例如:
Set-Service -Name wuauserv -StartupType Automatic; Start-Service wuauserv
封装成脚本实现定时或按需自动化
把常用操作写成 .ps1 文件,再通过计划任务或快捷方式触发,真正脱离手动执行:
- 新建
start_updates.ps1,内容为:Set-Service wuauserv -StartupType Automatic; Start-Service wuauserv - 以管理员身份运行 PowerShell,执行:
.\start_updates.ps1 - 注册为每日凌晨2点自动运行的计划任务:
Register-ScheduledTask "AutoUpdateStart" -Action (New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\start_updates.ps1") -Trigger (New-ScheduledTaskTrigger -Daily -At "02:00") - 执行前确保脚本执行策略已设为 RemoteSigned:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

















