Erhalten Sie eine Liste aller Com von Jaap Brasser am 27. Juni, bekannt gemacht verfügbar Objekte 2013
Hinweis: Diese Spitze erfordert Powershell 2.0 oder höher.
Kürzlich wurde eine Frage auf die PowerShell.com Foren geschrieben: Wie zu erhalten Sie eine vollständige Liste der verfügbaren ComObjects? Dieser Tipp zeigt, wie alle aus der Registrierung abgerufen werden.
Hier ist der Code, dass wir diese Liste zu erzeugen, verwenden können:
Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object {
$_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID")
} | Select-Object -ExpandProperty PSChildName
Das erste Cmdlets liest HKLM aus einer vollständigen Liste der Werte aus: \ Classes \ Software und überprüft dann, ob die folgende zwei Bedingungen sind erfüllt:
- Passt das Objekt der Namenskonvention für ein ComObject?
Hat der Registrierungsschlüssel einen CLSID-Ordner? Jedes registrierte ComObject sollte eine CLSID als eindeutigen Bezeichner haben. Ein Beispiel für der durch diesen Befehl erzeugten Ausgabe ist wie folgt:
AccClientDocMgr.AccClientDocMgr
AccDictionary.AccDictionary
Access.ACCDAExtension
Access.ACCDCFile
Access.ACCDEFile
Access.ACCDTFile
Access. ACCFTFile
Access.ADEFile
Um die Erkennung von ComObject zu vereinfachen, kann die folgende Funktion verwendet werden.
function Get-ComObject {
param(
[Parameter(Mandatory=$true,
ParameterSetName='FilterByName')]
[string]$Filter,
[Parameter(Mandatory=$true,
ParameterSetName='ListAllComObjects')]
[switch]$ListAll
)
$ListofObjects = Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object {
$_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID")
} | Select-Object -ExpandProperty PSChildName
if ($Filter) {
$ListofObjects | Where-Object {$_ -like $Filter}
} else {
$ListofObjects
}
}
Diese Funktion ist in der TechNet Script Galerie verfügbar:
http://gallery.technet.microsoft.com/Get-ComObject-Function-to-50a92047
Es tut mir leid, aber ich kann nicht herausfinden, ob ich es richtig verwende .. Ich habe das Objekt gefunden, das ich brauche, ich klicke auf "Create instance" und es wird ausgewählt (fetter Text) .. Was sollte ich jetzt tun? Es gibt ein paar Schnittstellen zur Verfügung, aber wenn ich auf einen von ihnen doppelklicke, bekomme ich "IDataObject interface viewer unterstützt nur IID_IDataObject" – Joril
Wahrscheinlich fehlt das Paket iliewers.dll, die oleview.exe im selben Verzeichnis benötigt. Siehe: http://www.autoitscript.com/autoit3/docs/intro/ComRef.htm –
Danke für das Einspielen! Wie auch immer, die iviewers.dll ist da, und wenn ich sie woanders hinbewege, beschwert sich OLEviewer, also schätze ich, dass sie es benutzt. Wie auch immer, vielleicht benutze ich es falsch, wie ist das Verfahren, um eine Methode mit OLEviewer aufzurufen? Ich kann es nicht herausfinden:/ – Joril