如何找到wscript.shell的componentid?

降压

我尝试了以下方法:

$obj = new-object -ComObject Wscript.Shell
$obj | gm

输出:

   TypeName: System.__ComObject#{41904400-be18-11d3-a28b-00104bd35090}

Name                     MemberType            Definition
----                     ----------            ----------
AppActivate              Method                bool AppActivate (Variant, Variant)
CreateShortcut           Method                IDispatch CreateShortcut (string)
Exec                     Method                IWshExec Exec (string)
ExpandEnvironmentStrings Method                string ExpandEnvironmentStrings (string)
LogEvent                 Method                bool LogEvent (Variant, string, string)
Popup                    Method                int Popup (string, Variant, Variant, Variant)
RegDelete                Method                void RegDelete (string)
RegRead                  Method                Variant RegRead (string)
RegWrite                 Method                void RegWrite (string, Variant, Variant)
Run                      Method                int Run (string, Variant, Variant)
SendKeys                 Method                void SendKeys (string, Variant)
Environment              ParameterizedProperty IWshEnvironment Environment (Variant) {get}
CurrentDirectory         Property              string CurrentDirectory () {get} {set}
SpecialFolders           Property              IWshCollection SpecialFolders () {get}

如果是这种情况,那么您应该得到以下结果:

get-wmiobject Win32_ComClass | Where {$_.ComponentId -eq "{41904400-be18-11d3-a28b-00104bd35090}" }

但是,我不知道!我在找正确的地方吗?

理查德

在这种情况下,我不会使用WMI。只需Wscript.Shell直接在注册表中查找ProgId():

HKCR\ProgId

如果该键具有子键CLSID1,则其默认值为您要查找的值。

在很多情况下,需要做更多的工作。例如。:版本无关的ProgId,没有“ CLSID”子项,但带有“ CurVer”子项,并带有另一个要查找的ProgId。

在某些情况下,HKCU的子项(也称为HKEY_CLASSES_ROOT)不代表可以直接实例化的COM类,这些子项将没有“ CLSID”子项。

像这样的事情应该起作用(请记住,这HKCR:是的别名HKLM:\SOFTWARE\Classes

function getClsid {
  param(
    [string]$progId
  )

  if (Test-Path "HKLM:\SOFTWARE\Classes\$progId\CLSID") {
    (Get-ItemProperty "HKLM:\SOFTWARE\Classes\$progId\CLSID").{(default)}
  } elseif (Test-Path "HKLM:\SOFTWARE\Classes\$progId\CurVer") {
    $pp = (Get-ItemProperty "HKLM:\SOFTWARE\Classes\$progId\CurVer").{(default)}
    getClsid -progId $pp
  } else {
    throw "Are you sure that's a ProgId?"
  }
}

getClsid -progId 'WScript.Shell'

1 “ Component Id”不是通常的COM术语,但是CLSID(用于“ Class Id”)是;我想这就是你的意思。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用WScript.Shell对象运行更多命令?

如何在Wscript.Shell + cmd.exe中使用变量?

WScript.Shell使Excel崩溃

如果找到找到的某些文件,如何执行内置的shell

Powershell中的ASCII(wscript.shell)

Wscript.shell.run和Wscript.shell.exec不会显示相同的输出

如何停止失控的 wscript 命令?

如何在shell中找到字符串的长度

如何使用Linux命令找到我的Shell版本?

Python:如何在Shell中找到当前的工作目录?

如何从 erlang shell 中找到“wx”模块版本?

如何在shell中找到2指数的值?

如何在Ubuntu / bin上找到Dash shell的版本?

如何找到特定的键并替换shell脚本中的值?

使用VBA WScript.Shell使用参数调用.com文件

为什么在VBS中可以默默忽略WScript.Shell?

WScript.Shell RegWrite在Windows 8.1上失败

WScript.Shell.Exec-从标准输出读取输出

无法使WSCript.Shell对象的Run方法正常工作

如何在目录中找到最新的日期文件夹,然后在Shell脚本中构造命令?

在tcsh shell中,如何在命令提示符下找到特定的单词?

如何使用bash或shell脚本在linux机器上找到更高的Java版本

为什么我有/如何解决此错误:“ shell_session_update:未找到命令”

如何在 GNOME Shell 中有效地找到我的终端窗口?

Shell脚本在目录中找到文件,如何传递到python脚本

如何从 ip(例如 192.168.1.3)Linux Shell 或 python3 在本地找到设备主机名

为什么WScript.Shell.ExpandEnvironmentStrings无法与%CD%一起使用?

使用'WScript.Shell'对象的'Run'方法时出现运行时错误

在 HTA 应用程序内的 WScript.Shell 中发送输入值