使用PowerShell获取启动类型的Windows服务

kub*_*usz 46 powershell windows-services

如何使用PowerShell获取Windows服务启动类型而不使用WMI

我查看了Get-Service命令,它没有提供显示"启动类型"的东西.

rav*_*nth 36

WMI是实现此目的的方法.

Get-WmiObject -Query "Select StartMode From Win32_Service Where Name='winmgmt'"
Run Code Online (Sandbox Code Playgroud)

要么

Get-WmiObject -Class Win32_Service -Property StartMode -Filter "Name='Winmgmt'"
Run Code Online (Sandbox Code Playgroud)

  • 当然.`$ svc = Get-WmiObject -Class Win32_Service -Filter"Name ='Winmgmt'"; $ svc.StartMode = '手册'; $ svc.psbase.put() (6认同)
  • 我怎么看是否为服务设置了延迟启动? (2认同)

小智 24

使用PowerShell版本4:

您可以运行如下命令:

   Get-Service | select -property name,starttype
Run Code Online (Sandbox Code Playgroud)

  • 这似乎只适用于 v5 - 在 v4 和 v2 上测试,并且 StartType 字段不会填充 (3认同)
  • 该属性已添加到 .NET 4.6.1 中的基础类中 - PowerShell 的版本无关 https://docs.microsoft.com/en-us/dotnet/api/system.serviceprocess.servicecontroller.starttype (2认同)

小智 14

在PowerShell中,您可以使用命令Set-Service:

Set-Service -Name Winmgmt -StartupType Manual
Run Code Online (Sandbox Code Playgroud)

我没有找到PowerShell命令来查看启动类型.可以假设Get-Service命令会提供,但似乎没有.


Rom*_*min 9

据我所知,没有"原生"PowerShell获取此信息的方式.也许它比.NET Shell限制了.

以下是将此功能添加到下一版本的建议:

https://connect.microsoft.com/PowerShell/feedback/details/424948/i-would-like-to-see-the-property-starttype-added-to-get-services

WMI解决方法也在那里,以防万一.我使用这个WMI解决方案来完成我的任务,它可以工作.


Mar*_*nus 6

你也可以使用:

(Get-Service 'winmgmt').StartType
Run Code Online (Sandbox Code Playgroud)

它只返回启动类型,例如,禁用.

  • 这似乎只适用于 PS v5。我在 v2 和 v4 上进行了测试,但没有返回任何结果。 (2认同)

小智 5

一旦你已经升级到PowerShell的5.0版本,你可以得到的启动类型。

要检查您正在运行的PowerShell版本,请使用 $PSVersionTable

以下示例适用于Windows防火墙服务:

对于本地系统

Get-Service | Select-Object -Property Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
Run Code Online (Sandbox Code Playgroud)

对于一个远程系统

Get-Service -ComputerName HOSTNAME_OF_SYSTEM | Select-Object -Property MachineName,Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
Run Code Online (Sandbox Code Playgroud)

对于多个系统(必须创建systems.txt)

Get-Service -ComputerName (Get-content c:\systems.txt) | Select-Object -Property MachineName,Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
Run Code Online (Sandbox Code Playgroud)