简体   繁体   English

如何修改多种服务?

[英]How to modify for multiple services?

I have been playing with a script I found here...and it is a very elegant one. 我一直在玩我在这里找到的脚本...这是一个非常优雅的脚本。 However, I am breaking it every time I try to modify it to perform the stop/start on multiple services. 但是,每次尝试修改它以对多个服务执行停止/启动时,我都会破坏它。 Short of individual listing each one. 缺少个人列出的每个。 Any ideas? 有任何想法吗? Here is the script for starting/stopping a service. 这是用于启动/停止服务的脚本。

$SvcName needs to read these services: ftSysPolicy , ftSysInventory , ftSysAlarm , ftSysSSN , ftSysRpcProv , ftSysEService , ftSysRAS , ftSysMad $SvcName需要读取以下服务: ftSysPolicyftSysInventoryftSysAlarmftSysSSNftSysRpcProvftSysEServiceftSysRASftSysMad

#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)"
}

Create an array of the service names and loop over the logic that restarts them: 创建一个由服务名称组成的数组,并遍历重新启动它们的逻辑:

$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)"
  }

}

Or, even better, put the logic into a function and call that. 或者,甚至更好的是,将逻辑放入函数中并进行调用。

Also, check out the get-service , stop-service and start-service cmdlets 另外,请检查get-servicestop-servicestart-service cmdlet

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM