Остановить службы, запустить пакетные файлы, затем запустить службы

#windows #powershell #batch-file

#Windows #powershell #пакетный файл

Вопрос:

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

 #Define Services
$service1 = 'StiSvc'
$service2 = 'AdobeARMservice'
$services = @(
  $service1,
  $service2
)

#Stop Services
Get-Service | 
  Where { $services -contains $_.Name } |
  Foreach {
    $_ | Stop-Service
  }

#Verify Services
Get-Service | 
  Where { $services -contains $_.Name } |
  Foreach {
    if ((Get-Service $_.Name).Status -eq "stopped") {
      Write-Host 'Service Stop Pass (0)'
    } else {
      Write-Host 'Service Stop Failed (1000)';
      exit '1000'
    }
  }

#Start batch
if ($services.Status -eq "Stopped") {
  Start-Process "cmd.exe" "/c C:downloadhello.bat"
} else {
  Start-Sleep -s 10
} 
  

Комментарии:

1. И в чем собственно вопрос?

2. Итак, в чем ваш вопрос? Что работает не так, как ожидалось? Вы «не смогли пойти дальше»… как?

3. Это работает не так, как ожидалось. Службы останавливаются, но пакетный файл не запускается.

4. Попробуйте использовать оператор вызова для запуска пакетных файлов: amp; "C:downloadhello.bat" (просто так, без Start-Process или) cmd /c

5. Я пробовал это, но пока без радости.

Ответ №1:

Должно работать следующее:

 $services = 'StiSvc', 'AdobeARMservice'

Stop-Service $services -ErrorAction Stop

amp; 'C:downloadhello.bat'
amp; 'C:pathtoother.cmd'
#...

Start-Service $services
  

Если этого не произойдет, вам необходимо предоставить дополнительную информацию о том, что именно выходит из строя и как. Включите все сообщения об ошибках и состоянии.

Ответ №2:

Спасибо всем, я изменил сценарий следующим образом. Скрипт останавливает 2 службы, когда 2 службы остановлены, он запускает пакетный файл.

 #Stop Services

Get-Service StiSvc, AdobeARMservice | Stop-Service

#Verify Services

if (((Get-Service StiSvc).Status -eq "stopped") -and 
((Get-Service AdobeARMservice).Status -eq "stopped"))

# Start batch

{Start-Process  "cmd.exe"  "/c C:downloadhello.bat"} 
  

Я работаю над улучшением сценария. Я вернусь к вам как можно скорее.
С уважением