Остановить и запустить сервис по порядку на удаленном сервере - PullRequest
0 голосов
/ 16 мая 2018

Я хочу написать скрипт для проверки 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"

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете настроить зависимости служб так, чтобы служба запускалась / останавливалась только после того, как ее зависимые службы также запускались / останавливались.

После того, как вы это сделали, вам нужно только остановить service1, и Windows выполнитиметь дело с остановкой зависимостей служб ... в порядке их зависимостей.

Вы можете увидеть другие службы, имеющие зависимости в Службах.Например, Fax услуга зависит от Print Spooler, что само по себе зависит от RPC, которое затем зависит от DCOM

enter image description here

Если вручнуюостановив службу Fax, вы увидите остановку графического интерфейса (по порядку) DCOM, RPC, Spooler, а затем факс.


Настройка зависимостей должна быть выполнена только один раз (для каждого сервера):

sc config "service1" depend= "service2"
sc config "service2" depend= "service3"
sc config "service3" depend= "service4"
etc...

(Нет встроенной команды Powershell для этого, насколько мне известно, я нашел только sc.exe и использование wmi, sc - более простая команда.)

После этогоПри настройке вам потребуется всего лишь небольшой кусочек кода для перезапуска всех служб в следующем порядке:

$serverlist = Get-Content ".\server.txt"
foreach ($server in $serverlist) {
    Get-Service -Name "service1" -ComputerName $server | Restart-Service
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...