Powershell 在远程服务器上按顺序停止和启动服务

Powershell 在远程服务器上按顺序停止和启动服务,powershell,service,Powershell,Service,我想写一个脚本来检查服务器上的4个服务,当我们按顺序停止它们并延迟启动它们时,它们是否处于运行状态 第一个服务必须检查它是否正在运行,然后启动其他服务,因此我们使用延迟 $serverlist = Get-Content “.\server.txt” $servicename4 = "Orbit Utveckling Consul" $servicename3 = "Orbit Utveckling Identity" $servicename2 = "Orbit Utveckling Serv

我想写一个脚本来检查服务器上的4个服务,当我们按顺序停止它们并延迟启动它们时,它们是否处于运行状态

第一个服务必须检查它是否正在运行,然后启动其他服务,因此我们使用延迟

$serverlist = Get-Content “.\server.txt”
$servicename4 = "Orbit Utveckling Consul"
$servicename3 = "Orbit Utveckling Identity"
$servicename2 = "Orbit Utveckling Service"
$servicename1 = "Orbit Utveckling Integration"
$delay = 60 # Ange i sekunder.

foreach ($server in $serverlist) {
    $getservicestatus1 = Get-Service -Name $servicename1 -ComputerName $server
    if ($getservicestatus1 -eq "Running") {
        Set-Service -Name $servicename1 -ComputerName $server -Status stopped
        Write-Host "$server $servicename1 Stoppat!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan $servicename2 stoppar..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $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 Stoppat!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan nästa server stoppar..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $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 Stoppat!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan nästa server stoppar..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $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 Stoppat!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan nästa server stoppar..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $nexttime"
        Start-Sleep -Seconds $delay
    }
}

# Filen startar tjänsten Drift_Cosmic på varje IX3a i txt-filen.
# Det görs med en delay på ett antal sekunder mellan varje start.
# Detta är en testfil tills dess att en riktig testkörning
# har gjorts i Drift.
Write-Host "$servicename4, $servicename3, $servicename2, $servicename1 startas med $delay sekunders mellanrum."

foreach ($server in $serverlist) {
    #   Skriv ut status på tjänsten i passande färg.
    $getservicestatus4 = (Get-Service -Name $servicename4 -ComputerName $server).status
    if ($getservicestatus4 -eq "Stopped") {
        Set-Service -Name $servicename4 -ComputerName $server -Status Running
        Write-Host "$server $servicename4 Startad!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan nästa server startas..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $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 Startad!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan nästa server startas..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $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 Startad!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan nästa server startas..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $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 Startad!" -ForegroundColor Green
        Write-Host "Väntar i $delay sekunder innan nästa server startas..."
        $nexttime = (Get-Date).AddSeconds($delay)
        Write-Host "Nästa start sker $nexttime"
        Start-Sleep -Seconds $delay
    }
}

Write-Host "." -ForegroundColor DarkBlue
Read-Host "Tryck ENTER för att avsluta"

您可以配置服务依赖项,以便服务仅在其依赖服务也启动/停止时启动/停止

完成此操作后,只需停止
service1
,Windows将处理停止服务依赖项的问题。。。按其家属的顺序排列

您可以在服务中看到其他具有依赖关系的服务。例如,
Fax
服务依赖于
Print Spooler
,后者本身依赖于
RPC
,而后者依赖于
DCOM

如果手动停止
传真
服务,您将看到GUI按顺序停止DCOM、RPC、后台处理程序,然后停止传真


配置依赖项只需执行一次(每台服务器):

(据我所知,没有本机Powershell命令可以执行此操作,我只发现
sc.exe
和使用wmi,其中
sc
是更简单的命令。)

安装完成后,您只需一小段代码即可重新启动所有服务,以便:

$serverlist = Get-Content ".\server.txt"
foreach ($server in $serverlist) {
    Get-Service -Name "service1" -ComputerName $server | Restart-Service
}

您的问题是什么?et服务:找不到任何服务名称为“Orbit Utveckling Integration”的服务。在E:\stoppstart.ps1:12 char:22+。。。ServiceStatus1=获取服务-名称$servicename1-计算机名称$server+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:ObjectNotFound:(动态UTVECLING集成:字符串)[获取服务],ServiceCommandException+FullyQualifiederId:NoServiceFounderName,Microsoft.PowerShell.Commands.GetServiceCommands该服务是否存在以及名称拼写是否正确?是!服务是可用的,但不知道会是什么样子?
$serverlist = Get-Content ".\server.txt"
foreach ($server in $serverlist) {
    Get-Service -Name "service1" -ComputerName $server | Restart-Service
}