![从 PID 获取服务名称(powershell)](https://linux22.com/image/1596193/%E4%BB%8E%20PID%20%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1%E5%90%8D%E7%A7%B0%EF%BC%88powershell%EF%BC%89.png)
我在解决一个小问题时遇到了麻烦。因此,对于进程,我可以使用以下行从其 $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