2017-01-12 3 views
1

Я играл со сценарием, который я нашел здесь ... и он очень изящный. Тем не менее, я нарушаю его каждый раз, когда я пытаюсь изменить его, чтобы выполнить остановку/запуск нескольких служб. За исключением индивидуального перечисления каждого. Есть идеи? Вот скрипт для запуска/остановки службы.Как изменить несколько сервисов?

$SvcName необходимо прочитать следующие услуги: ftSysPolicy, ftSysInventory, ftSysAlarm, ftSysSSN, ftSysRpcProv, ftSysEService, ftSysRAS, ftSysMad

#Change these values to suit your needs: 
$SvcName = 'Spooler' 
$SvrName = 'localhost' 

#Initialize variables: 
[string]$WaitForIt = "" 
[string]$Verb = "" 
[string]$Result = "FAILED" 
$svc = (Get-Service -ComputerName $SvrName -Name $SvcName) 
Write-Host "$SvcName on $SvrName is $($svc.status)" 
switch ($svc.Status) { 
    'Stopped' { 
     Write-Host "Starting $SvcName..." 
     $Verb = "start" 
     $WaitForIt = 'Running' 
     $svc.Start()} 
    'Running' { 
     Write-Host "Stopping $SvcName..." 
     $Verb = "stop" 
     $WaitForIt = 'Stopped' 
     $svc.Stop()} 
    Default { 
     Write-Host "$SvcName is $($svc.Status). Taking no action." 
    } 
} 
if ($WaitForIt -ne "") { 
    try { # For some reason, we cannot use -ErrorAction after the next statement: 
     $svc.WaitForStatus($WaitForIt, '00:02:00') 
    } catch { 
     Write-Host "After waiting for 2 minutes, $SvcName failed to $Verb." 
    } 
    $svc = (Get-Service -ComputerName $SvrName -Name $SvcName) 
    if ($svc.status -eq $WaitForIt) {$Result = 'SUCCESS'} 
    Write-Host "$Result`: $SvcName on $SvrName is $($svc.Status)" 
} 

ответ

2

Создать массив имен службы и цикл по логике, которая перезапускает их:

$svcs = @('ftSysPolicy', 'ftSysInventory', 'ftSysAlarm', 'ftSysSSN', 'ftSysRpcProv', 'ftSysEService', 'ftSysRAS', 'ftSysMad') 

foreach (svcName in $svcs) { 

    [string]$WaitForIt = "" 
    [string]$Verb = "" 
    [string]$Result = "FAILED" 
    $svc = (get-service -computername $SvrName -name $SvcName) 
    Write-host "$SvcName on $SvrName is $($svc.status)" 
    Switch ($svc.status) { 
     'Stopped' { 
      Write-host "Starting $SvcName..." 
      $Verb = "start" 
      $WaitForIt = 'Running' 
      $svc.Start()} 
     'Running' { 
      Write-host "Stopping $SvcName..." 
      $Verb = "stop" 
      $WaitForIt = 'Stopped' 
      $svc.Stop()} 
     Default { 
      Write-host "$SvcName is $($svc.status). Taking no action."} 
    } 
    if ($WaitForIt -ne "") { 
     Try { # For some reason, we cannot use -ErrorAction after the next  statement: 
      $svc.WaitForStatus($WaitForIt,'00:02:00') 
     } Catch { 
     Write-host "After waiting for 2 minutes, $SvcName failed to $Verb." 
     } 
     $svc = (get-service -computername $SvrName -name $SvcName) 
     if ($svc.status -eq $WaitForIt) {$Result = 'SUCCESS'} 
     Write-host "$Result`: $SvcName on $SvrName is $($svc.status)" 
    } 

} 

Или, еще лучше, включить логику в функцию и позвоните.

Кроме того, проверьте get-service, stop-service и start-service командлеты