我尝试了以下方法:
$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
如果该键具有子键CLSID
1,则其默认值为您要查找的值。
在很多情况下,需要做更多的工作。例如。:版本无关的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] 删除。
我来说两句