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

如何编写脚本在远程服务器上按序启停带延迟的服务?

PowerShell脚本:远程服务器按序启停指定服务(含状态校验与启动延迟)

针对你提出的服务操作需求,我写了这个PowerShell脚本,完全匹配你的要求:

  • 停止服务时:按指定顺序逐个检查服务状态,仅当服务处于Running状态时才执行停止操作
  • 启动服务时:按停止的相反顺序执行,每启动一个服务后等待固定时长,且启动前会先确认服务当前状态

完整脚本

# 读取远程服务器列表,每行一个服务器名称
$serverlist = Get-Content ".\server.txt"
# 定义需要操作的4个服务名称
$servicename4 = "Orbit Utveckling Consul"
$servicename3 = "Orbit Utveckling Identity"
$servicename2 = "Orbit Utveckling Service"
$servicename1 = "Orbit Utveckling Integration"
# 启停操作之间的延迟时间(单位:秒)
$delay = 60

# -------------------------- 停止服务逻辑 --------------------------
foreach ($server in $serverlist) {
    # 检查并停止第一个服务
    $getservicestatus1 = (Get-Service -Name $servicename1 -ComputerName $server).status
    if ($getservicestatus1 -eq "Running") {
        Set-Service -Name $servicename1 -ComputerName $server -Status stopped
        Write-Host "$server $servicename1 已停止!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后停止下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
    # 检查并停止第二个服务
    $getservicestatus2 = (Get-Service -Name $servicename2 -ComputerName $server).status
    if ($getservicestatus2 -eq "Running") {
        Set-Service -Name $servicename2 -ComputerName $server -Status stopped
        Write-Host "$server $servicename2 已停止!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后停止下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
    # 检查并停止第三个服务
    $getservicestatus3 = (Get-Service -Name $servicename3 -ComputerName $server).status
    if ($getservicestatus3 -eq "Running") {
        Set-Service -Name $servicename3 -ComputerName $server -Status stopped
        Write-Host "$server $servicename3 已停止!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后停止下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
    # 检查并停止第四个服务
    $getservicestatus4 = (Get-Service -Name $servicename4 -ComputerName $server).status
    if ($getservicestatus4 -eq "Running") {
        Set-Service -Name $servicename4 -ComputerName $server -Status stopped
        Write-Host "$server $servicename4 已停止!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后停止下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
}

# -------------------------- 启动服务逻辑 --------------------------
Write-Host "$servicename4, $servicename3, $servicename2, $servicename1 将以 $delay 秒间隔启动。"
foreach ($server in $serverlist) {
    # 检查并启动第四个服务(停止顺序的反向第一个)
    $getservicestatus4 = (Get-Service -Name $servicename4 -ComputerName $server).status
    if ($getservicestatus4 -eq "Stopped") {
        Set-Service -Name $servicename4 -ComputerName $server -Status Running
        Write-Host "$server $servicename4 已启动!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后启动下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
    # 检查并启动第三个服务
    $getservicestatus3 = (Get-Service -Name $servicename3 -ComputerName $server).status
    if ($getservicestatus3 -eq "Stopped") {
        Set-Service -Name $servicename3 -ComputerName $server -Status Running
        Write-Host "$server $servicename3 已启动!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后启动下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
    # 检查并启动第二个服务
    $getservicestatus2 = (Get-Service -Name $servicename2 -ComputerName $server).status
    if ($getservicestatus2 -eq "Stopped") {
        Set-Service -Name $servicename2 -ComputerName $server -Status Running
        Write-Host "$server $servicename2 已启动!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后启动下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
    # 检查并启动第一个服务
    $getservicestatus1 = (Get-Service -Name $servicename1 -ComputerName $server).status
    if ($getservicestatus1 -eq "Stopped") {
        Set-Service -Name $servicename1 -ComputerName $server -Status Running
        Write-Host "$server $servicename1 已启动!" -ForegroundColor Green
        Write-Host "等待 $delay 秒后启动下一个服务..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "下次操作时间:$nexttime"
        Start-Sleep -Seconds $delay
    }
}

Write-Host "." -ForegroundColor DarkBlue
Read-Host "按 ENTER 键退出"

使用说明

  1. 准备server.txt文件,把需要操作的远程服务器名称逐行写入
  2. 根据实际需求修改$servicename1至$servicename4的服务名称
  3. 调整$delay变量设置启停操作之间的等待时长(默认60秒)
  4. 注意:这是测试脚本,正式运行前务必在测试环境验证功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:06:18