如何使用Powershell 5在Windows Server 2012中检查Windows服务的启动类型是“自动”还是“自动延迟”

ffdz8vbo  于 2023-01-26  发布在  Shell
关注(0)|答案(2)|浏览(276)

在维护过程中,在停止Windows服务之前,我需要将其启动类型设置为“手动”。之后,我需要将其切换回其原始启动类型。因此,在停止服务之前,我需要知道启动类型。
在Windows 10中,我知道有一个名为“DelayedAutoStart”的属性,但似乎在Windows Server 2012中不可用,如何在Powershell中获取某个服务的启动类型?
我在Windows Server 2012上使用Powershell 5.1。

vuktfyat

vuktfyat1#

Here是一篇很好的文章,介绍了一些处理Windows服务的DelayedAutoStart属性的方法。
对于您的PowerShell版本,最好使用sc.exe

查询服务启动类型

您可以使用sc.exe查询服务启动类型,但信息是以文本形式返回的,而不是PowerShell对象,因此您必须进行一些文本操作。我编写了一个简单的一行程序,可以获取给定名称的服务的启动类型。

sc.exe qc "SERVICE_NAME" | Select-String "START_TYPE" | ForEach-Object { ($_ -replace '\s+', ' ').trim().Split(" ") | Select-Object -Last 1 }

下面是一个示例,我将它与一个循环结合使用来获取机器上每个服务的状态。

foreach($Service in (Get-Service)) {
    Write-Host "$($Service.ServiceName)"
    sc.exe qc "$($Service.ServiceName)" | Select-String "START_TYPE" | ForEach-Object { ($_ -replace '\s+', ' ').trim().Split(" ") | Select-Object -Last 1 } 
}

设置服务启动类型

您可以执行类似以下操作来设置服务的启动类型...

sc.exe config NameOfTheService start= delayed-auto

或者在PowerShell中 Package sc.exe ...

$myArgs = 'config "{0}" start=delayed-auto' -f 'TheServiceName'
Start-Process -FilePath sc.exe -ArgumentList $myArgs

从PowerShell 6.0开始,他们增加了对AutomaticDelayedStart的支持,但是由于您使用的是PowerShell 5.1,这并不适用(但可能适用于其他读者)。

Set-Service -Name "Testservice" –StartupType "AutomaticDelayedStart"
pnwntuvh

pnwntuvh2#

"Clean Powershell 5.1"方法是查询注册表路径。微软在创建Get-Service cmdlet时忽略了这个微小的细节。这将查询所有服务,检查延迟的Autostart并输出列表(本例仅限于一个服务)。

$Services = Get-Service | Select-Object *,DelayedAutoStart
    for ($i = 0 ; $i -lt $Services.Count ; $i++ ) {
        $Services[$i].DelayedAutoStart = (Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\$($Services[$i].Name)").DelayedAutoStart
    }
    $Services.Where({$_.Name -eq "DispBrokerDesktopSvc"}) | ft Name,StartType,DelayedAutoStart
    
    Name                 StartType DelayedAutoStart
    ----                 --------- ----------------
    DispBrokerDesktopSvc Automatic                1

说明:如果DelayedAutoStart设置为1,则会延迟。如果设置为0,则如果不存在,则不会延迟。如果使用Set-Service将启动类型更改为禁用,则不会更改"延迟启动"标志!

Set-Service -Name DispBrokerDesktopSvc -StartupType Disabled

按F5 services. msc,它就被禁用了。

Set-Service -Name DispBrokerDesktopSvc -StartupType Automatic

在services.msc中按F5,它将再次启用,延迟启动类型与以前相同。如果更改"DelayedAutoStart"注册表项,则更改将不会反映出来,直到services.exe进程重新启动。这意味着直到计算机重新启动。如果您希望它立即反映出来,您必须返回到SC.EXE。如果您将"DelayedAutoStart"注册表添加到一个还没有该值的服务,请不要"不要指望它工作,服务本身必须支持该配置,否则它将被忽略。

相关问题