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