2009-03-18 29 views
30

Trong Powershell tôi có thể tạo các đối tượng COM có thể được sử dụng, ví dụ, để kiểm soát các ứng dụng Microsoft Office:Tôi có thể tìm tất cả các đối tượng COM có thể được tạo trong Powershell ở đâu?

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

Làm thế nào tôi có thể liệt kê tất cả các đối tượng COM có sẵn mà có thể được tạo ra trong Powershell?

Trả lời

45

Tôi đã tìm thấy tập lệnh một dòng mạnh mẽ này được cho là liệt kê tất cả các đối tượng COM.

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

cho chúng tôi biết nếu nó hoạt động!

+1

tôi có thể xác nhận rằng nó liệt kê tất cả các đối tượng COM đăng ký. Có hay không họ thực hiện giao diện COM một cách chính xác là một vấn đề hoàn toàn khác nhau. :) – EBGreen

+3

* 2 xu của tôi: * 'HKLM \ Software \ Classes'actually tương ứng với' HKCR' – ZJR

+1

Và hai xu của tôi: chứ không phải đường ống đến 'ft PSChildName', đường dẫn đến' select -ExpandProperty PSChildName'. Điều đó trả về kết quả dưới dạng một mảng có thể được lọc với ** - match ** hoặc ** Select-String **. –

6

Sử dụng OleView.exe từ Microsoft. Tôi nghĩ rằng nó có thể đi kèm với Visual Studio. Nếu không, bạn có thể tìm thấy nó trong Windows SDK. Đó là một tải xuống lớn; bạn có thể tải xuống toàn bộ hoặc bạn có thể thử nghiệm tải xuống nó từng phần bằng cách sử dụng trình cài đặt setup.exe.

Khi ở trong OleView, hãy xem trong "loại thư viện". Ví dụ Excel xuất hiện trong "Microsoft Exel".

3

Một tùy chọn khác cần lưu ý là thông qua WMI:

Get-WMIObject Win32_ClassicCOMClassSetting 
+0

chạy điều này tạo ra một vòng lặp vô hạn – CoderDennis

+3

Vì nó không phải là một vòng lặp, nó có thể không có thể là một vòng lặp vô hạn. Nó sẽ mất một thời gian dài để chạy vì có nhiều thành phần COM. – JasonMArcher

+0

Điều đó không liệt kê điều khiển ActiveX mà tôi đang tìm kiếm. Điều này làm https://gist.github.com/810398 –

Các vấn đề liên quan