从 PID 获取服务名称(powershell)

从 PID 获取服务名称(powershell)

我在解决一个小问题时遇到了麻烦。因此,对于进程,我可以使用以下行从其 $PID 存储其名称:

$process_name=get-Process -id $PID |select -expand name

但是,我想将该过程作为服务我想要完成同样的操作,也就是:将服务的名称例如[service_name].exe存储到变量$service_name中。

这样做的原因是,我只想拥有一个 .ps1 文件,然后我可以将其转换为使用其自己的 .exe.config 文件的多个服务。这样,一个 .ps1 文件就可以多次编译成服务,例如

[服务1.exe,服务2.exe,服务3.exe,...]

每个服务都使用其对应的 .exe.config 文件,例如

[服务1.exe.配置,服务2.exe.配置,服务3.exe.配置,...]

有没有办法用 powershell 来做到这一点?

答案1

您可以从 Processid 获取服务信息

(Get-WmiObject Win32_Service -Filter "ProcessId='$PID'")

答案2

使用 Get-WmiObject 您可以收集可执行文件:

(Get-WmiObject win32_service | Where-Object -Property Name -Like *wallet*).PathName

此示例将显示可执行文件名称以及任何开关。如果您想将其捕获到变量中,请尝试:

$proc_name = (Get-WmiObject win32_service | Where-Object -Property Name -Like *wallet*).PathName

如果您需要任何扩展的属性信息,请尝试:

Get-WmiObject win32_service | ?{$_.Name -like '*wallet*'} | Select-Object -Property *

答案3

这是另一种方法——上述方法可能更可靠?

$id = 5556
# (debugging) Nice little table to make sure you've got the right thing...
Get-Process | Where-Object Id -EQ $id | Select ProcessName,Id | Format-Table    
 
# Finally just hand me back the name proper
Get-Process | Where-Object Id -EQ $id | Select -Expand ProcessName 
# Depending on what you're doing with it...
# Stop-Process -Id $id

相关内容