如何使用PowerShell提取所有服务的"可执行路径"

Abi*_*h A 39 powershell service powershell-2.0 powershell-3.0

Get-Service *sql* | sort DisplayName | out-file c:/servicelist.txt
Run Code Online (Sandbox Code Playgroud)

我有一个单行PowerShell脚本来提取我本地机器上运行的所有服务的列表,现在,除了显示"Status","Name"和"DisplayName"之外,我还想显示"可执行文件的路径"

Dav*_*tin 53

我想你需要求助于WMI:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, State, PathName
Run Code Online (Sandbox Code Playgroud)

更新 如果要对所选数据执行某些操作,可以使用此处所述的计算属性.

例如,如果您只想在路径名的引号内使用文本,则可以拆分双引号并获取数组项1:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, @{Name="Path"; Expression={$_.PathName.split('"')[1]}} | Format-List
Run Code Online (Sandbox Code Playgroud)

  • 看起来您的评论中遗漏了一些内容,我猜您已将其显示到屏幕上并且路径正在被截断。尝试通过 Format-List 进行管道传输以查看完整路径。 (2认同)

Mat*_*ger 14

由于Get-WmiObject已在 PowerShell Core 中弃用,您可以使用

Get-CimInstance -ClassName win32_service | ?{$_.Name -match '^sql'} | Select Name, DisplayName, State, PathName >> C:\temp\sqlservices.txt
Run Code Online (Sandbox Code Playgroud)

反而。

如果您不需要检查正则表达式,您也可以使用该-Filter参数:

Get-CimInstance -ClassName win32_service -Filter "Name like 'sql%'" | Select Name, DisplayName, State, PathName >> C:\temp\sqlservices.txt
Run Code Online (Sandbox Code Playgroud)


小智 6

WMI 查询的变体可能更快(我只需要为 SCCM 客户端执行此操作)

$SQLService=(get-wmiobject -Query 'Select * from win32_service where Name like "*SQL*"') | Select-object Name, DisplayName, State, Pathname
Run Code Online (Sandbox Code Playgroud)

另一个技巧是如果您想要没有双引号的路径名(以便您可以对它们进行操作),则捕获多个 SQL 结果

$SQLService | Select-Object Name, DisplayName, State, @{Name='PathName';Expression=$_.Pathname.replace('"','')}
Run Code Online (Sandbox Code Playgroud)

-queryget-wmiobject(or get-ciminstance) 中使用的最大优势是处理速度。较旧的示例获取完整列表,然后进行过滤,而后者获取非常直接的列表。

只需增加两美分:)

干杯!充满活力的技术肖恩