【问题标题】:Get startup type of Windows service using PowerShell使用 PowerShell 获取 Windows 服务的启动类型
【发布时间】:2011-05-17 07:56:35
【问题描述】:

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

我查看了Get-Service 命令的内部,它没有提供显示“启动类型”的内容。

【问题讨论】:

    标签: powershell windows-services


    【解决方案1】:

    据我所知,没有“本地”PowerShell 方法可以获取此信息。也许它是 .NET 的限制而不是 PowerShell。

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

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

    WMI 解决方法也在那里,以防万一。我将这个 WMI 解决方案用于我的任务并且它有效。

    【解决方案2】:

    WMI 就是这样做的方法。

    Get-WmiObject -Query "Select StartMode From Win32_Service Where Name='winmgmt'"
    

    或者

    Get-WmiObject -Class Win32_Service -Property StartMode -Filter "Name='Winmgmt'"
    

    【讨论】:

    • 有没有办法通过 PowerShell 更改启动类型?
    • 当然。 `$svc = Get-WmiObject -Class Win32_Service -Filter "Name='Winmgmt'"; $svc.StartMode='手动'; $svc.psbase.put()
    • 如何查看是否为服务设置了延迟启动?
    • 我知道的唯一方法是使用注册表项:blogs.technet.com/b/askperf/archive/2008/02/02/…
    【解决方案3】:

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

    Set-Service -Name Winmgmt -StartupType Manual
    

    不过,我还没有找到用于查看启动类型的 PowerShell 命令。有人会认为 Get-Service 命令会提供这一点,但似乎没有。

    【讨论】:

    【解决方案4】:

    如果您更新到 PowerShell 5,您可以查询机器上的所有服务并显示 Name 和 StartType 并按 StartType 对其进行排序以便于查看:

    Get-Service |Select-Object -Property Name,StartType |Sort-Object -Property StartType
    

    【讨论】:

      【解决方案5】:

      使用 PowerShell 版本 4:

      您可以运行如下命令:

         Get-Service | select -property name,starttype
      

      【讨论】:

      • 这似乎仅适用于 v5 - 在 v4 和 v2 上测试,并且 StartType 字段未填充
      • 这在 Windows Server 2012 R2 上的 v5 中也不起作用。它可以在 Windows 10 上运行,无论是本地还是查询远程 Windows Server 2012 R2。
      • 提醒自己:添加| Select-Object * 将列出Windows 10 上使用PowerShell 的所有 属性PSVersion=5.1.17134.407
      • 该属性已添加到 .NET 4.6.1 中的基础类中 -- PowerShell 的版本无关 ? docs.microsoft.com/en-us/dotnet/api/…
      【解决方案6】:

      upgraded to PowerShell version 5 后,您可以获得启动类型。

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

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

      对于本地系统

      Get-Service | Select-Object -Property Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
      

      对于一个远程系统

      Get-Service -ComputerName HOSTNAME_OF_SYSTEM | Select-Object -Property MachineName,Name,Status,StartType | where-object {$_.Name -eq "MpsSvc"} | Format-Table -auto
      

      对于多个系统(必须创建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
      

      【讨论】:

      • 不用管道也可以做到这一点:(Get-Service -Name MpsSvc).StartType
      【解决方案7】:

      您也可以使用sc工具进行设置。

      您还可以从 PowerShell 中调用它,并在需要时添加其他检查。 这个工具相对于 PowerShell 的优势在于sc 工具还可以将启动类型设置为自动延迟。

      # Get Service status
      $Service = "Wecsvc"
      sc.exe qc $Service
      
      # Set Service status
      $Service = "Wecsvc"
      sc.exe config $Service start= delayed-auto
      

      【讨论】:

        【解决方案8】:

        你也可以使用:

        (Get-Service 'winmgmt').StartType
        

        它只返回启动类型,例如,disabled

        【讨论】:

        • 这似乎只适用于 PS v5。我在 v2 和 v4 上进行了测试,但它什么也没返回。
        【解决方案9】:

        用途:

        Get-Service BITS | Select StartType
        

        或使用:

        (Get-Service -Name BITS).StartType
        

        那么

        Set-Service BITS -StartupType xxx
        

        [PowerShell 5.1]

        【讨论】:

          【解决方案10】:

          PowerShell 4 可以做到。

          Get-Service *spool* | select name,starttype | ft -AutoSize
          

          screenshot

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-25
            • 1970-01-01
            相关资源
            最近更新 更多