Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 停止服务cmdlet超时是否可能?_Powershell_Windows Services_Cmdlet - Fatal编程技术网

Powershell 停止服务cmdlet超时是否可能?

Powershell 停止服务cmdlet超时是否可能?,powershell,windows-services,cmdlet,Powershell,Windows Services,Cmdlet,我们正在使用stop-service cmdlet终止机箱上的一些服务。大多数情况下,它工作得很好,但是我们有一两个服务(谁不呢?)有时不太好 在本例中,其中一个有问题的服务将保持在停止状态,cmdlet会反复将其发送到控制台: [08:49:21]WARNING: Waiting for service 'MisbehavingService (MisbehavingService)' to finish [08:49:21]stopping... [08:49:23]WARNING: Wa

我们正在使用stop-service cmdlet终止机箱上的一些服务。大多数情况下,它工作得很好,但是我们有一两个服务(谁不呢?)有时不太好

在本例中,其中一个有问题的服务将保持在停止状态,cmdlet会反复将其发送到控制台:

[08:49:21]WARNING: Waiting for service 'MisbehavingService (MisbehavingService)' to finish 
[08:49:21]stopping...
[08:49:23]WARNING: Waiting for service 'MisbehavingService (MisbehavingService)' to finish 
[08:49:23]stopping... 
[08:49:25]WARNING: Waiting for service 'MisbehavingService (MisbehavingService)' to finish 
[08:49:25]stopping...
最后,我们必须在任务管理器中终止服务,然后我们的脚本继续


有没有办法让stop-service cmdlet在某个时间点后放弃或超时?我想我们可以事后检查,如果服务仍在运行,请使用kill-process cmdlet提供最终切块。

停止服务没有超时选项,但如果存在依赖服务,则可能需要使用-force

服务可以在启动时定义等待提示(指定超时),但超时由服务控制。任何服务控制请求(启动、停止、暂停、恢复)都会通过服务控制管理器(SCM)进行,并且会遵守每个服务的等待提示。如果超出等待提示,操作将失败并返回错误


您可以使用invoke命令将Stop服务作为作业运行,并定期检查它。如果尚未完成,您可以使用Stop Process终止进程并继续。

尽管
停止服务
没有超时参数,但
系统上的
WaitForStatus方法确实有一个重载,该重载采用超时参数(已记录)。幸运的是,这正是
Get Service
命令返回的对象类型

下面是一个简单的函数,它以秒为单位获取服务名称和超时。如果服务在超时之前停止,则返回
$true
;如果调用超时(或服务不存在),则返回
$false


如果您有powershell 5.1,您还可以:

Stop-Service -Name "NameOfService" -NoWait


但是如果您没有5.1版本的powershell,@JamesQMurphy的答案看起来也不错。

谢谢Steven。我认为下面的讨论对这个主题也有一些很好的建议。特别是,页面上的最后一个帖子:没有回答问题,它要求
放弃或在某个时间点后超时。异步终止与等待超时不同。我认为这是一种更简单的方法,可以完成JamesQMurphy建议的停止服务和等待模式。
Stop-Service -Name "NameOfService" -NoWait