如何用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
相关产品推荐
相关产品推荐

