
标题: [问题求助] PowerShell怎样使用指定的guid的com组件? [打印本页]
作者: 小白龙 时间: 2025-3-22 11:25 标题: PowerShell怎样使用指定的guid的com组件?
我想使用下面这个guid的com组件, 应该怎样写代码?
{944DE083-8FB8-45CF-BCB7-C477ACB2F897}
下面的代码能获取到某个组件的guid, 我的问题, 正好反过来了, 我只知道guid但是不知道哪个组件- $Objshell = New-Object -COMObject "Shell.Application"
- ($objshell | Get-Member).TypeName
复制代码
作者: jyswjjgdwtdtj 时间: 2025-3-22 14:52
本帖最后由 jyswjjgdwtdtj 于 2025-3-22 15:25 编辑
回复 1# 小白龙 - [void][Reflection.Assembly]::LoadWithPartialName("microsoft.visualbasic")
- $Objshell=[system.activator]::Createinstance([system.type]::GetTypeFromClsid("{944DE083-8FB8-45CF-BCB7-C477ACB2F897}"))
- write-host [microsoft.visualbasic.information]::typename($objshell)
复制代码
然而只能获取到类名 而非progid
作者: 小白龙 时间: 2025-3-22 15:17
回复 2# jyswjjgdwtdtj
使用“1”个参数调用“CreateInstance”时发生异常:“检索 COM 类工厂中 CLSID 为 {944DE083-8FB8-45CF-BCB7-C477ACB2F897} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x800
40154 (REGDB_E_CLASSNOTREG))。”
所在位置 行:4 字符: 1
+ $Objshell=[system.activator]::Createinstance([system.type]::GetTypeFr ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (
[], MethodInvocationException
+ FullyQualifiedErrorId : COMException
[microsoft.visualbasic.information]::typename System.__ComObject
作者: jyswjjgdwtdtj 时间: 2025-3-22 15:29
本帖最后由 jyswjjgdwtdtj 于 2025-3-22 15:49 编辑
回复 3# 小白龙
powershell获取的clsid不是com组件真的clsid
比如wshshell的clsid是72C24DD5-D70A-438B-8A42-98424B88AFB8 但powershell给出了41904400-be18-11d3-a28b-00104bd35090
更正一下 这样才能获取到progid- $s=@'
- using System;
- using System.Runtime.InteropServices;
-
- namespace ns
- {
- public class com
- {
- [DllImport("ole32.dll")]
- static extern int ProgIDFromCLSID([In] ref Guid clsid, [MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);
- public static string Getprogid(string clsid)
- {
- string progId = "";
- Guid guid = new Guid(clsid);
- ProgIDFromCLSID(ref guid, out progId);
- return progId;
- }
- }
- }
- '@
- add-type -typedefinition $s
- [ns.com]::Getprogid("{72C24DD5-D70A-438B-8A42-98424B88AFB8}")
复制代码
作者: 小白龙 时间: 2025-3-22 15:58
回复 4# jyswjjgdwtdtj
add-type : 无法添加类型。类型名称“Microsoft.CodeAnalysis.EmbeddedAttribute”已存在。
所在位置 行:22 字符: 1
+ add-type -typedefinition $s
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Microsoft.CodeAnalysis.EmbeddedAttribute:String) [Add-Type],Exception
+ FullyQualifiedErrorId : TYPE_ALREADY_EXISTS,Microsoft.PowerShell.Commands.AddTypeCommand
WScript.Shell.1
作者: jyswjjgdwtdtj 时间: 2025-3-22 17:09
回复 5# 小白龙
虽然不知道为什么报错了还是能输出结果 但确实能用不是吗
作者: Five66 时间: 2025-3-22 21:57
直接查询注册表- gi 'hklm:\software\classes\clsid\{72C24DD5-D70A-438B-8A42-98424B88AFB8}\progid'
复制代码
- cmd /c reg query 'hkcr\clsid\{72C24DD5-D70A-438B-8A42-98424B88AFB8}\progid'
复制代码
作者: 小白龙 时间: 2025-3-22 23:59
回复 7# Five66
显示下面这个, 这个guid好像是和uiautomation相关的
Name Property
---- --------
progid (default) : WScript.Shell.1
作者: Five66 时间: 2025-3-23 01:17
回复 8# 小白龙
那是自动化对象 ,New-Object -COMObject 创建出来的都是自动化对象 ,基于com的 ,但并不是所有com都是自动化对象 ,例如一般的com或可连接对象 ,com信息都在注册表里

作者: Five66 时间: 2025-3-23 01:21
再发一图 ,出自《COM原理与应用》

欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |