2016-10-01 2 views
2

Когда я запускаю следующую команду:Set-Service: Не удается остановить службу, потому что это зависит от других услуг

Set-Service -ComputerName appserver -Name MyService -Status Stopped 

Я получаю сообщение об ошибке:

Set-Service : Cannot stop service 'My Service (MyService)' because it is 
dependent on other services. 
At line:1 char:12 
+ Set-Service <<<< -ComputerName appserver -Name MyService -Status Stopped 
    + CategoryInfo   : InvalidOperation: (System.ServiceProcess.ServiceController:ServiceController) [Set-Service], ServiceCommandException 
    + FullyQualifiedErrorId : ServiceIsDependentOnNoForce,Microsoft.PowerShell.Commands.SetServiceCommand

Я могу остановить службу от services.msc GUI, и я могу начать услугу с Set-Service, но я не могу остановить ее снова.

Это правда, что услуга зависит от некоторых других услуг, но я не понимаю, почему это помешало бы мне не останавливая его — ничего еще зависит от его.

+0

И если вы остановите службу в зависимости первый? – Kage

+0

Работает ли 'sc stop MyService'? –

+0

@ Kage: «MyService» не имеет никаких услуг. Это зависит от 'AnotherService', но это невозможно остановить, потому что от него зависит« MyService ». – Wolfgang

ответ

0

В конце концов я решил эту проблему с помощью следующего кода, который вызывает sc, чтобы остановить службу, а затем ждет его завершения остановки. Это достигает того же результата, что и ожидалось от Set-Service -Status Stopped; то есть, когда он возвращается, служба была остановлена. (sc на своих собственных начинает, чтобы остановить службу, но не ждать, пока он не закончит остановки.)

Start-Process "$env:WINDIR\system32\sc.exe" \\APPSERVER,stop,MyService -NoNewWindow -Wait 
while ((Get-Service -ComputerName APPSERVER -Name MyService | 
Select -ExpandProperty Status) -ne 'Stopped') { 
    Write-Host "Waiting for service to stop..." 
    Start-Sleep -Seconds 10 
} 
6

Командлет Set-Service предназначен для изменения конфигурации службы. То, что вы можете использовать его, чтобы остановить службу, изменив ее статус, просто совпадение. Используйте командлет Stop-Service для остановки обслуживания. Это позволяет также останавливать зависимые службы через параметр -Force. Сначала вам нужно получить служебный объект с Get-Service, поскольку Stop-Service не имеет параметра -ComputerName.

Get-Service -Computer appserver -Name MyService | Stop-Service -Force 
+0

[Документация] (https://technet.microsoft.com/en-us/library/hh849849.aspx) конкретно указывает, что Set-Service может останавливать и запускать службы, поэтому я все еще считаю, что это ошибка. Но хорошо знать, что есть простой способ обхода проблемы. –

+0

Я не сказал, что это невозможно. Но только сама услуга. Если это невозможно из-за зависимых сервисов, оно не позволяет передавать им сигнал останова, как это делает «Stop-Service». Это было специально сделано для прекращения обслуживания. Поэтому я не считаю это ошибкой в ​​«Set-Service». –

+0

Но в этом случае нет зависимых сервисов. Служба, которую пытается остановить OP, зависит от других служб, а не наоборот. –

Смежные вопросы