【问题标题】:Retrieve full path of process in VBScript without WMI在没有 WMI 的情况下在 VBScript 中检索进程的完整路径
【发布时间】:2021-10-14 12:17:17
【问题描述】:

我正在编写一个 VBScript,它需要检索与每个正在运行的进程相对应的可执行文件的完整路径。

tasklist 只提供部分信息,我发现的所有其他解决方案都涉及使用 WMI,我不能假设它在我的目标系统上可用。

因此,我的问题类似于this one,只是我需要明确支持 WMI 不可用(即禁用)的情况。

在普通的 VBScript 中可以做到这一点吗?还是我需要编译一个可以调用 Win32 API 函数的本机可执行文件,然后从我的 VBScript 调用它?

【问题讨论】:

  • 是否可以选择使用默认未安装的单独(已编译)程序?
  • @BrickByBrick 您无法启用 WMI?如果您无法控制计算机,您要完成什么?我猜它被禁用是有原因的。
  • @user692942 这正是我想知道的。 wmi是获取进程exe路径的唯一方法吗?不,无法启用 wmi。
  • @BrickByBrick 我现在手头没有这样的外部程序(需要对其进行一些研究并在没有 WMI 的情况下对其进行测试)但是它需要做什么(如果你将自己编写)将在相关进程上使用Windows API的the QueryFullProcessImageName function(在使用OpenProcess打开它之后)。
  • @CherryDT 有趣...this MSDN thread 建议完全相反。我有点怀疑这两个函数都将调用同一个本机 API,但如果不跟踪执行,我无法确定这一点。以前从来没有遇到过这个问题。在我的耳朵里有强烈的 X-Y 问题。

标签: windows vbscript process


【解决方案1】:

大概是这样的吧?你明白了……

Option Explicit
Dim strPSCommand, strDOSCommand, objShell, objExec, strPSResults, strText

strPSCommand = "Get-Process | where { $_.Path -ne $null -and $_.Path -ne '' } | Select Path  -Unique"
strDOSCommand = "powershell -executionpolicy bypass -command " & strPSCommand & ""
Set objShell = CreateObject("Wscript.Shell")
Set objExec = objShell.Exec(strDOSCommand)

Do While Not objExec.StdOut.AtEndOfStream
    strText = objExec.StdOut.ReadLine()
    Wscript.Echo strText    
Loop

Set objShell = Nothing
Set objExec = Nothing

【讨论】:

  • 请注意,这需要安装 PowerShell。这可能很好(这不是问题中提到的限制),但应该明确指出,因为 PowerShell 不会必然存在,尤其是在 WMI 已经存在的机器上已禁用。
猜你喜欢
  • 2011-01-23
  • 1970-01-01
  • 2012-07-04
  • 2021-09-08
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多