我正在嘗試編寫更強大的Stop-Service cmdlet(PSv3)。基本上有一個調用Stop-Service的函數,然後測試服務狀態,看看服務是否真的停止,並最終升級到服務的進程終止。服務處理測試的無響應服務
我試圖寫或找到一個服務不會優雅地停止,但往往會在收到停止通知後徘徊。
我的「壞」的服務只是利用這個:
protected override void OnStop()
{
TheEventLog.WriteEntry("StrongBad in OnStop");
Thread.Sleep(300000);
}
但服務不中任何超時停止-服務允許停止。
PS C:\WINDOWS\system32> Stop-Service -Name StrongBad
WARNING: Waiting for service 'Trogdor (StrongBad)' to stop...
WARNING: Waiting for service 'Trogdor (StrongBad)' to stop...
WARNING: Waiting for service 'Trogdor (StrongBad)' to stop...
WARNING: Waiting for service 'Trogdor (StrongBad)' to stop...
PS C:\WINDOWS\system32> Get-Service StrongBad
Status Name DisplayName
------ ---- -----------
Stopped StrongBad Trogdor
真料(在這種情況下要)的停止服務cmdlet可以返回一個消息,說該服務沒有停止在規定的時間。
我似乎看到類似預期的行爲時,服務有依存關係:
PS C:\src\Enterprise\Enterprise\Systems\Scripts\Powershell\Includes> Stop-Service -Name nsi -Force
Stop-Service : Service 'Network Store Interface Service (nsi)' cannot be stopped due to the following error: Cannot stop LanmanWorkstation service on computer '.'.
At line:1 char:1
+ Stop-Service -Name nsi -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (System.ServiceProcess.ServiceController:ServiceController) [Stop-Service], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand
Stop-Service : Collection was modified; enumeration operation may not execute.
At line:1 char:1
+ Stop-Service -Name nsi -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Stop-Service], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.StopServiceCommand
這裏有一個相關的答案:http://stackoverflow.com/questions/12534170/stop-service-cmdlet-timeout-possible – Arluin 2014-09-03 21:14:31
我得到了它,因此沒有按服務不要停下來,正如上面評論中的答案所表明的那樣,停止服務不會發生真正超時,它會繼續寫:警告:等待服務'Trogdor(StrongBad)'停止... – Arluin 2014-09-03 22:43:28