Get-Service 获取的对象属于System.ServiceProcess.ServiceController 类,该类中找不到生产商的信息。所以我们尝试通过 WMI 对象中的win32_service类,该类中包含了pathName属性,也就是Service的物理路径。通过路径获取文件的版本信息(VersionInfo),该信息通常可能包含了CompanyName。
但是也有例外,像这款产品“System Center 2012 Configuration Manager”的服务 “smstsmgr”就没有。
补充:最近写的几个脚本中很喜欢用NoteProperty,因为它可以在不改变原对象属性的基础上,来扩展对象,方便其他用户进行二次定制。

Get-WmiObject win32_service |ForEach-Object {
    $path=""
    $company=""
    #match the path that contains double quotes,
    #i.e "C:\Program Files (x86)\Microsoft\BingDesktop\BingDesktopUpdater.exe"
    if($_.pathName -match '"(?<SvcPath>.*)"') {
        $path=$Matches['SvcPath']
    }
    #match the path that not contains quotes,
    #i.e C:\Windows\CCM\RemCtrl\CmRcService.exe
    else  { 
        #split to handle path that contains parameter,
        #i.e C:\Windows\system32\svchost.exe -k LocalSystemNetworkRestricted
        $path=($_.pathName  -split ' ') | select -First 1 
    }
    if(-not [string]::IsNullOrWhiteSpace($path)) {
         $company=(Get-Item $path ).VersionInfo.CompanyName
    }
    $_ | Add-Member -MemberType NoteProperty -Name "Manufacturer" -Value $company
    $_
}  | Select-Object DisplayName, Manufacturer,State,Description |
Out-GridView
本文链接: https://www.pstips.net/retrive-manufacturer-of-service.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
                                      请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!


我有补充,对于不是要看Out-GridView而是要输出format-list的我
会看到有些奇怪的服务因为各种情况出红字,解决方法是
$company=(Get-Item $path ).VersionInfo.CompanyName
加上
$company=(Get-Item $path -ErrorAction Ignore).VersionInfo.CompanyName