【发布时间】: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