在维护过程中,在停止Windows服务之前,我需要将其启动类型设置为“手动”。之后,我需要将其切换回其原始启动类型。因此,在停止服务之前,我需要知道启动类型。
在Windows 10中,我知道有一个名为“DelayedAutoStart”的属性,但似乎在Windows Server 2012中不可用,如何在Powershell中获取某个服务的启动类型?
我在Windows Server 2012上使用Powershell 5.1。
在维护过程中,在停止Windows服务之前,我需要将其启动类型设置为“手动”。之后,我需要将其切换回其原始启动类型。因此,在停止服务之前,我需要知道启动类型。
在Windows 10中,我知道有一个名为“DelayedAutoStart”的属性,但似乎在Windows Server 2012中不可用,如何在Powershell中获取某个服务的启动类型?
我在Windows Server 2012上使用Powershell 5.1。
2条答案
按热度按时间vuktfyat1#
Here是一篇很好的文章,介绍了一些处理Windows服务的
DelayedAutoStart
属性的方法。对于您的PowerShell版本,最好使用sc.exe。
查询服务启动类型
您可以使用
sc.exe
查询服务启动类型,但信息是以文本形式返回的,而不是PowerShell对象,因此您必须进行一些文本操作。我编写了一个简单的一行程序,可以获取给定名称的服务的启动类型。下面是一个示例,我将它与一个循环结合使用来获取机器上每个服务的状态。
设置服务启动类型
您可以执行类似以下操作来设置服务的启动类型...
或者在PowerShell中 Package
sc.exe
...从PowerShell 6.0开始,他们增加了对
AutomaticDelayedStart
的支持,但是由于您使用的是PowerShell 5.1,这并不适用(但可能适用于其他读者)。pnwntuvh2#
"Clean Powershell 5.1"方法是查询注册表路径。微软在创建Get-Service cmdlet时忽略了这个微小的细节。这将查询所有服务,检查延迟的Autostart并输出列表(本例仅限于一个服务)。
说明:如果DelayedAutoStart设置为1,则会延迟。如果设置为0,则如果不存在,则不会延迟。如果使用Set-Service将启动类型更改为禁用,则不会更改"延迟启动"标志!
按F5 services. msc,它就被禁用了。
在services.msc中按F5,它将再次启用,延迟启动类型与以前相同。如果更改"DelayedAutoStart"注册表项,则更改将不会反映出来,直到services.exe进程重新启动。这意味着直到计算机重新启动。如果您希望它立即反映出来,您必须返回到SC.EXE。如果您将"DelayedAutoStart"注册表添加到一个还没有该值的服务,请不要"不要指望它工作,服务本身必须支持该配置,否则它将被忽略。