需要一种最佳方式来通过其可执行路径来获取进程

时间:2018-08-10 06:58:36

标签: c# powershell curly-braces

我正在尝试通过流程的执行路径获取流程ID。为此,我正在执行下面的Powershell命令,该命令可以在Powershell的控制台中完美运行:

(Get-Process |  Where-Object {$_.Path -eq 'C:\WINDOWS\system32\winlogon.exe'}).Id

但是通过C#执行相同操作不会产生任何结果。以下是我关注的代码段:

string cmd = "(Get-Process |  Where-Object {{$_.Path -eq '{0}'}}).Id";
string path = @"C:\WINDOWS\system32\winlogon.exe";
string finalCmd = string.Format(cmd, System.IO.Path.GetFullPath(path));

powershell.Runspace = runspace;
powershell.AddScript(finalCmd);
var result = powershell.Invoke();

我正在使用双括号大括号来表示转义序列。但是powershell.Invoke()仍然只返回null。还有其他方法来获取带有其可执行路径的进程ID吗?

我的最终目标是我应该能够通过Active Directory(与x86 / x64无关)将应用程序(MSI安装程序)推送到网络中的所有PC,并且应该获得给定可执行路径的进程ID。感谢您的建议,但就我而言,我需要一个通用的解决方案,该解决方案对于x86和x64都可以无缝使用。

1 个答案:

答案 0 :(得分:0)

您似乎不需要在这里使用Powershell。 .NET代码可以直接查询进程。

类似的东西:

Process.GetProcesses().Where(p=>p.MainModule.FileName==path)

应该为您返回所有匹配进程的枚举,您可以从中轻松检索其ID。并确定如果发现不止一个怎么办!