如何使用Get-Service命令提取Windows服务的物理路径

时间:2012-09-25 12:40:33

标签: windows powershell windows-services powershell-v2.0

我需要在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命令。

非常感谢任何帮助。

5 个答案:

答案 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;

来源: https://blogs.technet.microsoft.com/heyscriptingguy/2014/09/15/powertip-use-powershell-to-find-path-for-processes/

答案 4 :(得分:0)

@alroc很好,但是没有理由过滤所有服务。查询WMI就像查询数据库一样,您可以要求WMI为您进行过滤:

(Get-CimInstance Win32_Service -Filter 'Name = "AxInstSV"').PathName

要探索可用于该服务的所有元数据:

Get-CimInstance Win32_Service -Filter 'Name = "AxInstSV"' | Select-Object *