System-Administration mit Microsofts PowerShell Teil 8 Verwendung des Component Object Models (COM)
In dieser achten Ausgabe der PowerShell-Artikelserie zeigt IP-Insider, wie die PowerShell auf COM-Objekte zugreifen kann. Über COM-Schnittstellen können Anwendungen ferngesteuert und Funktionsbibliotheken, wie die des WSHs, genutzt werden.
Anbieter zum Thema
Die PowerShell basiert zwar auf dem .NET-Framework und ist deshalb sehr gut für die Nutzung der .NET-Klassenbibliothek ausgelegt, wie bereits im sechsten Teil gezeigt wurde. In der Praxis ist es manchmal jedoch einfacher, auf bekannte Funktionsbibliotheken zuzugreifen, die mit einer COM-Schnittstelle versehen früher entwickelt oder angeschafft wurden. Dazu gehören etwa die Klassen des Windows Script Hosts (WSH). Gerade für Umsteiger ist es wünschenswert, diese weiter zu nutzen.
Nicht nur Funktionsbibliotheken sind mit einer COM-Schnittstelle versehen, sondern auch ganze Applikationen. Dazu gehören etwa die Microsoft Office-Anwendungen und der Internet Explorer aber auch Microsoft-fremde Programme, wie Lotus Notes. Über diese Schnittstellen lassen sich die Anwendungen steuern, und das ohne Tastatureingaben oder Mausklicks zu simulieren. Ein Beispiel: Von der PowerShell aus wird Excel gestartet, um damit eine XLS-Datei zu öffnen und Zellenwerte auszulesen. Mit diesen sollen dann Benutzerkonten im Active Directory angelegt werden.
Die Steuerung der Applikationen kann dabei sogar versteckt erfolgen, indem das Benutzerinterface, also das Anwendungsfenster, nicht dargestellt wird.
Voraussetzungen zum Einsatz von COM-Objekten
Jede COM-Klasse verfügt über eine eindeutige Bezeichnung, die sprechend sein kann, wie „Excel.Application“, oder nur aus einer GUID bestehen. Dieser Name muss bekannt sein, um ein entsprechendes Objekt anzulegen. Am besten ist es, eine ausführliche Dokumentation der COM-Klassen zu verwenden, doch nicht immer ist diese verfügbar. Die Klassen, die von Microsoft zur Verfügung gestellt werden, sind in einer Library dokumentiert. Der Link zur Library ist am Ende des Artikels angegeben.
Gibt es keine Dokumentation, kann der „OLE/COM Object Viewer“ zu Rate gezogen werden. Dieses kostenlose Tool von Microsoft (Link am Ende), lädt die nötigen Angaben aus der Systemregistrierung (siehe Abbildung 1). Für PowerShell-Anwender wichtige Informationen sind unter Object Classes/AllObjects zu finden. Dort sind sämtliche Klassen ersichtlich. Ist die gewünschte Klasse gefunden und markiert, erscheinen im rechten Teil des Fensters Informationen, wobei die „VersionIndependentProgID“ für den gesuchten Bezeichner der Klasse steht.
Eigenschaften und Methoden
Neben dem Bezeichner ist es aber auch noch notwendig, die von den Klassen bereitgestellten Eigenschaften und Methoden zu kennen. Es gibt hier zwar auch ein Tool, um diese von einem beliebigen Objekt zu ermitteln, doch ist das oft nicht ausreichend, denn eine Beschreibung der Befehle und der zugehörigen Parameterauswirkungen fehlt meist. Das Tool nennt sich Object Browser bzw. Objekt-Katalog und ist in den Entwicklungsumgebungen von Microsoft integriert, etwa im Visual Studio oder auch der VBA-Entwicklungsumgebung der Office-Anwendungen (siehe Abbildung 2).
COM-Objekte erstellen mit new-object
Mit dem Cmdlet new-object werden COM-Objekte angelegt. Die Klassenbezeichnung wird dabei mit dem Parameter -comobject übergeben. Folgender Befehl lädt etwa Microsoft Word:
$w = new-object -comobject „Word.Application“
Über die Variable $w kann nun Word ferngesteuert werden. Da das Benutzerinterface noch nicht sichtbar ist, kann dies mittels der Eigenschaft Visible eingeschaltet werden:
$w.Visible = $true
Diese Eigenschaft ist meinst bei den Anwendungen vorhanden. Mit den beiden folgenden Befehlen wird ein neues Dokument angelegt und ein Text eingefügt:
$w.Documents.Add()$w.Selection.TypeText(„IP-Insider zeigt PowerShell“)
Wie schon erwähnt können auch die Klassen des WSHs eingesetzt werden. Dieser stellt etwa die Klasse WScript.Network mit der Methode MapNetworkDrive bereit, um Netzwerklaufwerke anzulegen. Mit der PowerShell könnte der Aufruf wie folgt aussehen:
$n = new-object -comobject „WScript.Network“$n.MapNetworkDrive(„X:“, „\\server\share“)
Im nächsten Teil der PowerShell-Artikelserie zeigt IP-Insider, wie mit der PowerShell auf das Active Directory zugegriffen werden kann, um beispielsweise Benutzerkonten und Organisationseinheiten zu verwalten.
Artikelfiles und Artikellinks
Datei: Beispiel-Scripte.zip
Link: System-Administration mit Microsofts PowerShell Teil 7
Link: System-Administration mit Microsofts PowerShell Teil 9
Link: Microsoft PowerShell-Dokumentation
Link: PowerShell-Produktseite
Link: PowerShell-Installationspakete
Link: Dokumentation .NET-Klassenbibliothek
Link: Verfügbare WMI-Klassen
Link: Verfügbare Library
Link: OLE/COM Object Viewer
(ID:2004058)