Zum Hauptinhalt springen

Com-Objekte

Das COM (Component Objects Model) ist eine ziemlich alte Programmierschnittstelle, die Microsoft bereits in den 90er-Jahren eingeführt hat. COM sollte vom .NET-Framework abgelöst werden, ist aber so tief in Windows verwurzelt, dass es immer noch in vielen Anwendungen wie z.B. Microsoft Office steckt. Inzwischen hat es ein Revival erlebt, denn eine modernisierte Variante von COM steckt im neuen App-Konzept, das Microsoft mit Windows 8 eingeführt hat.

COM stellt unter Visual Basic Script die Objekte bereit, die wir in Powershell normalerweise vom .NET-Framework bekommen. Da Powershell aber universell einsetzbar ist, kann man auch von hier aus auf COM-Objekte und deren Eigenschaften und Methoden zugreifen. Dafür muss man nichts weiter tun, als New-Object mit Hilfe des Parameters -ComObject zu sagen, dass man ein COM-Objekt haben möchte.

$update = New-object –comobject "Microsoft.Update.Autoupdate"
$Update.results
$update.DetectNow()

Danach kann man mit den COM-Objekten genauso arbeiten, wie man es in Powershell von Objekten gewohnt ist. Mit Get-Member können Sie die COM-Objekte auch untersuchen.

$update = New-object -comobject "Microsoft.Update.Autoupdate"
$update | get-member

Tatsächlich braucht man COM kaum noch. Das obige Beispiel können Sie verwenden, um den Windows-Updatedienst zu steuern. Allerdings gibt es in der Powershell-Gallery das sehr gute Modul PSWindowsUpdate, dass die ganze Funktionalität bereits in Powershell-Cmdlets verpackt hat. Im Hintergrund ruft das Modul genau die besagte COM-Schnittstelle auf, aber Sie müssen sich damit nicht mehr herumärgern. Ein anderer Anwendungszweck ist Microsoft Office, dass sich nach wie vor über COM verscripten lässt. Allerdings gibt es auch hier einfachere Möglichkeiten, wie z.B. die Module ImportExcel, das entgegen dem Namen nicht nur Excel-Dateien importieren sondern auch echte Worksheets exportieren kann, oder das Modul PSWriteWord zum Erstellen von Word-Dateien. Vorteil beider Varianten ist, dass man kein installiertes Office auf dem Rechner braucht, was für COM Pflicht ist. Falls Sie aber doch ein Word-Dokument mit Powershell erstellen möchten, hier ein sehr kurzer Beispielcode.

$Word = New-Object -ComObject Word.Application 
$Word.Visible = $True # Word in den Vordergrund holen
$Document = $Word.Documents.Add() # Ein neues Dokument erstellen
$Selection = $Word.Selection # Aktuelles Fenster selektieren
$Selection.TypeText("Hello") # Den Text "Hello" einfügen
$Selection.TypeParagraph() # Einen neuen Absatz einfügen 
$Document.SaveAs("$env:TEMP\demo.docx")  # Das Dokument speichern