我需要在Win 2k8上运行的一组服务器上提取所有Windows服务的物理执行路径。因为,这个操作系统附带的powershell版本是2.0,我想使用Get-service命令而不是Get-WmiObject。 我知道我可以使用下面给出的命令拉出物理路径
$QueryApp = "Select * from Win32_Service Where Name='AxInstSV'"
$Path = (Get-WmiObject -ComputerName MyServer -Query $QueryApp).PathName
我不希望此命令拉出物理路径,但希望使用PS 2.0版附带的Get-Service命令。
非常感谢任何帮助。
答案 0 :(得分:12)
即使使用PowerShell 3,我也看不到使用Get-Service获取它的方法。
这个1-liner会为你提供路径名,虽然只有少一点首选的“过滤器左”行为:
gwmi win32_service|?{$_.name -eq "AxInstSV"}|select pathname
或者,如果你只想要字符串本身:
(gwmi win32_service|?{$_.name -eq "AxInstSV"}).pathname
答案 1 :(得分:2)
我想做类似的事情,但基于搜索/匹配服务下运行的进程的路径,所以我使用了经典的WMI查询语法,然后通过format-table传递结果:
$pathWildSearch = "orton";
gwmi -Query "select * from win32_service where pathname like '%$pathWildSearch%' and state='Running'" | Format-Table -Property Name, State, PathName -AutoSize -Wrap
欢迎您通过跳过定义和传递$ pathWildSearch将其转换为单行,或者您可以在分号后将gwmi语句提升为继续。
答案 2 :(得分:0)
也许少了一点,
wmic service where "name='AxInstSV'" get PathName
这也适用于命令提示符,而不仅仅是PowerShell。
否则,如果你有进程名称,你可以这样做:
wmic process where "name='AxInstSV.exe'" get ExecutablePath
要阅读流程路径,您需要获得许可,因此我的服务名称大多好运。
答案 3 :(得分:0)
我无法通过Get-Service命令执行此操作,但如果您的服务以其自己的进程运行,那么您可以通过以下代码使用Get-Process命令:
SELECT FROM_UNIXTIME(us.created), us.name
FROM users us;
答案 4 :(得分:0)
@alroc很好,但是没有理由过滤所有服务。查询WMI就像查询数据库一样,您可以要求WMI为您进行过滤:
(Get-CimInstance Win32_Service -Filter 'Name = "AxInstSV"').PathName
要探索可用于该服务的所有元数据:
Get-CimInstance Win32_Service -Filter 'Name = "AxInstSV"' | Select-Object *