如何在 windows 服务器 2012 中使用 Powershell 5 检查 windows 服务的启动类型是 "auto" 或 "auto-delayed"

How to check the start type of a windows service is "auto" or "auto-delayed" using Powershell 5 in windows server 2012

在维护期间,在停止 Windows 服务之前,我需要将其启动类型设置为手动。稍后我需要将它切换回原来的启动类型。所以我需要在停止服务之前知道启动类型。

在Windows10中,我知道有一个叫做"DelayedAutoStart"的属性,但是在WindowsServer 2012中好像没有。请问如何开始Powershell 中的服务类型?

我在 Windows Server 2012 上使用 Powershell 5.1。

Here 是一个很好的 post,有一些方法可以处理 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 中包装 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"