编写PowerShell脚本:实现服务超时重启及停止状态启动
搞定你的PowerShell服务管理脚本需求
嗨,我来帮你把这个脚本补全,完美实现你要的三个功能!先理清楚核心逻辑:先检查服务状态,停止的就启动;运行中的话看运行时长,超1小时就重启,否则不动。
完整脚本代码
# 定义要监控的服务名称,后续换服务直接改这里就行 $serviceName = "Print Spooler" # 获取服务对象并存入变量,避免重复查询系统 $service = Get-Service -Name $serviceName # 先处理服务停止的情况:直接启动 if ($service.Status -eq "Stopped") { Write-Host "服务 $serviceName 处于停止状态,正在启动..." Start-Service -InputObject $service } # 再处理服务运行的情况:判断运行时长 elseif ($service.Status -eq "Running") { # 计算1小时前的时间节点 $oneHourAgo = (Get-Date).AddHours(-1) # 对比服务启动时间是否早于1小时前 if ($service.StartTime -lt $oneHourAgo) { Write-Host "服务 $serviceName 已运行超过1小时,正在重启..." Restart-Service -InputObject $service -Force } else { Write-Host "服务 $serviceName 运行时长不足1小时,无需操作" } }
关键逻辑拆解
- 变量化配置:用
$serviceName存储服务名,后续换其他服务只需修改这一行,不用到处找代码位置。 - 缓存服务对象:把服务信息存入
$service变量,避免多次调用Get-Service查询系统,既提升效率又方便重复引用属性。 - 清晰的分支判断:先处理停止状态的启动需求,再处理运行状态的时长判断,逻辑分层明确,不容易出错。
- 用原生重启命令:
Restart-Service自带停止+启动的完整流程,比手动先Stop再Start更可靠,-Force参数还能应对服务无法正常停止的场景。 - 可视化输出:添加
Write-Host提示,运行脚本时能清楚看到每一步操作,调试和验证结果更直观。
你之前的脚本只实现了筛选并停止超1小时的服务,现在这个版本把三个需求都覆盖到了,而且维护起来也更省心~
内容的提问来源于stack exchange,提问作者Madison




