You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell按服务名关键词启动指定服务并停止同类其他服务

改进后的PowerShell服务管理脚本

针对你需要管理同命名规则服务的需求,以下是改进后的脚本,可实现启动指定服务(未运行时)+ 停止其余同类服务 + 启动成功提示的功能:

# 指定要启动的目标服务
$targetServiceName = 'srvx3'

# 获取所有符合"srvx*"命名规则的服务
$allSrvxServices = Get-Service -Name 'srvx*' -ErrorAction SilentlyContinue

if (-not $allSrvxServices) {
    Write-Host "未找到任何符合srvx*命名规则的服务"
    exit
}

# 停止所有非目标的同类服务
foreach ($service in $allSrvxServices) {
    if ($service.Name -ne $targetServiceName) {
        if ($service.Status -eq 'Running') {
            Write-Host "正在停止服务: $($service.Name)"
            Stop-Service -Name $service.Name -Force -ErrorAction SilentlyContinue
            # 等待服务停止完成
            do {
                $service.Refresh()
                Start-Sleep -Seconds 2
            } while ($service.Status -ne 'Stopped')
            Write-Host "服务 $($service.Name) 已停止"
        } else {
            Write-Host "服务 $($service.Name) 已处于停止状态"
        }
    }
}

# 处理目标服务:未运行则启动并等待至运行状态
$targetService = $allSrvxServices | Where-Object { $_.Name -eq $targetServiceName }
if (-not $targetService) {
    Write-Host "未找到目标服务: $targetServiceName"
    exit
}

if ($targetService.Status -ne 'Running') {
    Write-Host "正在启动目标服务: $targetServiceName"
    Start-Service -Name $targetServiceName -ErrorAction Stop
    # 循环检查服务状态,直到运行
    do {
        $targetService.Refresh()
        Start-Sleep -Seconds 5
        Write-Host "服务当前状态: $($targetService.Status)"
    } while ($targetService.Status -ne 'Running')
    Write-Host "✅ 目标服务 $targetServiceName 已成功启动并运行"
} else {
    Write-Host "目标服务 $targetServiceName 已处于运行状态"
}

关键改进说明

  • 批量识别同类服务:通过srvx*通配符一次性获取所有符合命名规则的服务,无需逐个指定
  • 强制停止其余服务:遍历所有同类服务,自动停止非目标的运行中服务,并等待状态更新为停止
  • 健壮性增强:增加服务不存在的判断逻辑,避免无意义执行报错
  • 优化状态等待:缩短状态检查间隔,确保及时捕捉服务状态变化
  • 清晰操作反馈:每一步操作都输出明确提示,便于排查执行情况

内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:50:53