如何编写脚本在远程服务器上按序启停带延迟的服务?
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 键退出"
使用说明
- 准备
server.txt文件,把需要操作的远程服务器名称逐行写入 - 根据实际需求修改
$servicename1至$servicename4的服务名称 - 调整
$delay变量设置启停操作之间的等待时长(默认60秒) - 注意:这是测试脚本,正式运行前务必在测试环境验证功能
内容的提问来源于stack exchange,提问作者Am Ba
相关产品推荐
相关产品推荐

