12

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

任何帮助将非常感激。

4

5 回答 5

17

即使使用 PowerShell 3,我也看不到使用 Get-Service 获取它的方法。

这个 1-liner 将为您提供路径名,尽管会少一些首选的“向左过滤”行为:

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

或者,如果您只想要字符串本身:

(gwmi win32_service|?{$_.name -eq "AxInstSV"}).pathname
于 2012-09-25T17:35:30.567 回答
2

我想做类似的事情,但是基于搜索/匹配服务下运行的进程的路径,所以我使用了经典的 WMI Query 语法,然后通过 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 语句以在分号后继续。

于 2014-12-21T05:36:53.777 回答
1

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

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

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

Get-CimInstance Win32_Service -Filter 'Name = "AxInstSV"' | Select-Object *
于 2020-10-28T14:37:48.380 回答
0

也许少一点冗长,

wmic service where "name='AxInstSV'" get PathName

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


或者,如果您有进程名称本身,您可以这样做:

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

要读取进程路径,您需要许可,所以大多数情况下我对服务名称的运气更好。

于 2017-12-02T12:47:50.763 回答
0

我永远无法通过 Get-Service 命令执行此操作,但如果您的服务作为自己的进程运行,那么您可以通过以下代码使用 Get-Process 命令:

(Get-Process -Name AxInstSV).path

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

于 2018-03-01T12:46:15.623 回答