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

15

我需要获取一组运行在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个回答

18

即使使用PowerShell 3,我也不知道如何通过Get-Service来获取它。

这个1行代码将会获取到路径名,尽管可能没有所需的"筛选器左侧"行为。

gwmi win32_service|?{$_.name -eq "AxInstSV"}|select pathname

或者,如果你只想得到字符串本身:

(gwmi win32_service|?{$_.name -eq "AxInstSV"}).pathname

那段.NET代码和这段PowerShell代码做的事情完全一样,只不过表达得更冗长。 - alroc

4

尽管@alroc做得非常好,但没有理由过滤所有服务。查询 WMI(Windows 应用程序管理器)就像查询数据库一样,您可以直接要求 WMI 为您进行筛选:

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

要探索该服务提供的所有元数据:

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

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语句。


1
也许少说一点。
wmic service where "name='AxInstSV'" get PathName

这应该在命令提示符上也能工作,而不仅仅是在powershell上。


如果您有进程名称本身,可以执行以下操作:

wmic process where "name='AxInstSV.exe'" get ExecutablePath

要读取进程路径,您需要获得权限,因此我通常更容易通过服务名称获得更好的运气。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接