【问题标题】:powershell get PID for specific app running for calling userpowershell 获取为调用用户运行的特定应用程序的 PID
【发布时间】:2015-02-10 20:14:05
【问题描述】:

我们有一个具有限制许可的 ERP 应用程序,我们通过 RemoteApp 访问它。我们只需要每个用户允许一个实例。所以,我一直在尝试使用 PowerShell 来尝试做到这一点。

脚本要做的是检查“pxxi.exe”是否正在为调用用户运行。

我的第一次尝试使用了 WMI。它有效,但事实证明 WMI 非常非常慢。

(gwmi win32_process -Filter "name='pxxi.exe'" | ? {$_.getowner().user -eq $env:username}).pid

我的第二次尝试使用了 Get-Process。这很好用,但不幸的是需要提升权限。

获取进程 pxxi -IncludeUserName | ? {$_.username -match $env:username}).id

我的第三次尝试专注于 win32 命令行程序 Tasklist。

$result = 调用命令 { c:\windows\system32\tasklist.exe /fi "用户名 eq $env:username" /fi "图像名 eq pxxi.exe"}

这行得通!多亏了 EBGreen 的代码,我可以只提取 PID。

($result[3] -split '\s+')[1]

虽然作为管理员运行速度非常快,但对于普通用户而言,Tasklist 的运行速度与 WMI 一样慢...

所以,这让我回到了原点。

有没有人知道一些代码可以快速检查并查看用户 XYZ 是否正在运行名为 ABC.EXE 的进程?这需要对普通用户有效(但普通用户不需要查看其他用户的进程),并且运行时间不需要超过 30 秒。

我没有嫁给 powershell。 VBScript 会很好。或互联网上可用的任何小工具。

谢谢!

【问题讨论】:

    标签: powershell string-formatting


    【解决方案1】:

    对于您的示例:

    ($result[3] -split '\s+')[1]
    

    请注意,这仅适用于返回一个结果。如果您期望多个实例,那么您应该编写一个循环,从数组中的第 4 项开始迭代,然后拆分每个项以获得该进程的 PID。

    【讨论】:

      【解决方案2】:

      我放弃了尝试在 Powershell 中找到一种方法。方法太慢,或者需要管理员。

      所以我用 C# 写了一些东西: c# - check if program is running for current user

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 2021-02-02
        • 2014-11-11
        • 2012-07-02
        • 1970-01-01
        • 2018-03-21
        • 2021-11-15
        • 2011-06-13
        • 1970-01-01
        相关资源
        最近更新 更多