1

Я должен сбросить последовательность служб на группе серверов в определенном порядке. sc.exe асинхронный, он вернется, когда служба находится в состоянии START_PENDING или STOP_PENDING. Start-Service/Stop-Service будет ожидать запуска или остановки службы, но она работает только на локальном компьютере, и у меня не включено удаленное взаимодействие в моей среде.

Есть ли альтернативный exe или CmdLet для этого? Похоже, мне придется использовать .NET API.

3 ответа3

4

Командлеты PowerShell Stop-Service и Start-Service будут ожидать, пока службы не будут полностью остановлены и запущены соответственно.

Вы можете использовать параметр -Force для Stop-Service чтобы он также останавливал службы, которые зависят от службы, которую вы пытаетесь остановить.

Также, если вы хотите избавиться от предупреждающего сообщения о том, что командлет ожидает завершения остановки / запуска службы, вы можете добавить ключ -WarningAction SilentlyContinue .

1

На самом деле, на удаленном компьютере можно использовать команды PowerShell Start-Service и Stop-Service (обсуждение этого здесь). Я проверил это и подтвердил, что это работает:

Start-Service -inputobject $(get-service -ComputerName SERVER_NAME -Name SERVICE_NAME)

Кроме того, вы можете попробовать wmic чтобы остановить службу. Похоже, что он ждет остановки службы, прежде чем продолжить, хотя я не проверил это полностью.

wmic /node:"SERVER_NAME" service where name="SERVICE_NAME" call stopservice
0

У них нет аргументов, позволяющих сделать это синхронно.

Вы могли бы вместо того, чтобы создать while цикла , который проверяет, работает ли служба.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .