【问题标题】:Where can I find all of the COM objects that can be created in Powershell?我在哪里可以找到可以在 Powershell 中创建的所有 COM 对象?
【发布时间】:2010-10-14 04:53:55
【问题描述】:

在 Powershell 中,我可以创建可用于控制 Microsoft Office 应用程序的 COM 对象:

$excel = New-Object -com "Excel.Application"
$excel.visible = $true

如何列出可以在 Powershell 中创建的所有可用 COM 对象?

【问题讨论】:

    标签: com powershell


    【解决方案1】:

    我发现这个 powershell 单行脚本应该列出所有 COM 对象。

    gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and
    (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName
    

    让我们知道它是否有效!

    【讨论】:

    • 我可以确认它确实列出了所有已注册的 COM 对象。他们是否正确实现 COM 接口是一个完全不同的问题。 :)
    • 我的两分钱:HKLM\Software\Classes其实对应HKCR
    • 还有我的两分钱:而不是管道到ft PSChildName,而是管道到select -ExpandProperty PSChildName。这会将结果作为数组返回,可以使用 -matchSelect-String 进行过滤。
    • 上面的这个脚本对我不起作用,而是这个脚本起作用:powershellmagazine.com/2013/06/27/…
    • wben 你做Format-Text,你不会得到strings,而是一些格式相关的类
    【解决方案2】:

    使用 Microsoft 的 OleView.exe。我认为它可能随 Visual Studio 一起提供。如果没有,您可以在Windows SDK 中找到它。下载量很大;您可以下载整个内容,也可以尝试使用 setup.exe 安装程序分段下载。

    在 OleView 中,查看“类型库”。例如 Excel 出现在“Microsoft Exel”下。

    【讨论】:

      【解决方案3】:

      另一个需要注意的选项是通过 WMI:

      Get-WMIObject Win32_ClassicCOMClassSetting
      

      【讨论】:

      • 运行这个会产生一个无限循环
      • 既然不是循环,就不可能是无限循环。运行时间会很长,因为有很多 COM 组件。
      • 这没有列出我正在寻找的 ActiveX 控件。这是gist.github.com/810398
      • ActiveX 控件并不总是有一个 progid,或者更准确地说,一个程序标识符(这是上面的脚本在 HKCR 中发现的。但它们总是有一个 CLSID。如果你只是想确定是否安装了 ActiveX 控件以便您可以卸载它,在 HKCR/CLSID 中搜索其 CLSID。
      猜你喜欢
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 2012-05-30
      • 2013-07-13
      相关资源
      最近更新 更多