2016-10-01 100 views
2

當我運行下面的命令:設置服務:因爲它是依賴於其他服務無法停止服務

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圖形用戶界面,我可以開始Set-Service服務,但我不能再阻止它。

這是事實,該服務依賴於一些其他的服務,但我不明白爲什麼會阻止我停止它—沒有別的取決於它。

+0

如果你先停止服務不同? – Kage

+0

'sc停止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 cmdlet用於更改服務的配置。您可以通過更改其狀態來使用它來停止服務,這只是巧合。使用Stop-Service cmdlet停止服務。它允許您通過參數-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試圖停止的服務依賴於其他服務,而不是其他方式。 –