You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

编写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

火山引擎 最新活动