PowerShell – Steuerung von Applikationen über ComObjekte

Sie können Applikationen, dies das entsprechend unterstützen, mit der PowerShell über ComObjekte steuern. Ich stelle dies hier an Beispielen für Excel und Outlook dar. Diese Vorgehensweise lässt sich aber auch für andere Applikation ähnlich nutzen.


Excel

Ich erstelle eine neue Excel Datei mit einer Liste von Städten, deren Bundesland sowie deren Einwohnerzahl.

Zunächst muss ein ComObjekt für Excel erstellt werden. Voraussetzung ist natürlich, dass Excel auch auf der Maschine, auf der ich arbeite, installiert ist.

$Excel = New-Object -ComObject Excel.Application

Die Methoden und Eigenschaften dieses Objektes können Sie sich über die Get-Member Funktion ansehen.

$Excel |gm

Über das Property Visible können Sie z.B. Excel sichtbar machen, bzw. verstecken.

$Excel.Visible = $True

$Excel.Visible = $False

Neue Arbeitsmappe

Als nächstes wird eine neue Arbeitsmappe mit einer Tabelle erstellt.

$Workbook = $Excel.Workbooks.Add()

Zur leichteren Adressierung, lese ich die Tabelle in eine Variable ein.

$Worksheet =$Workbook.Worksheets.Item(1)

Wieder über die Get-Member Funktion können Sie auch hier alle Methoden und Eigenschaften einer Tabelle sehen.

$Worksheet |gm

Nun wird die Tabelle mit Daten gefüllt. Sie können dazu jede einzelne Zelle direkt adressieren und beschreiben.

$worksheet.Cells.Item(1,1).value2=”Stadt”
$worksheet.Cells.Item(1,2).value2=”Bundesland”
$worksheet.Cells.Item(1,3).value2=”Einwohnerzahl”
$worksheet.Cells.Item(2,1).value2=”Frankfurt”
$worksheet.Cells.Item(2,2).value2=”Hessen”
$worksheet.Cells.Item(2,3).value2=”700000″
$worksheet.Cells.Item(3,1).value2=”Dresden”
$worksheet.Cells.Item(3,2).value2=”Sachsen”
$worksheet.Cells.Item(3,3).value2=”550000″
$worksheet.Cells.Item(4,1).value2=”Hannover”
$worksheet.Cells.Item(4,2).value2=”Niedersachsen”
$worksheet.Cells.Item(4,3).value2=”520000″

Wenn die Eingabe beendet ist, natürlich noch abspeichern.

$FilePath = „D:\Town.xlsx“

$workbook.SaveAs($filepath)

So sieht die Datei nun aus, wenn wir sie mit Excel öffnen.

excelol1

Ein farbliches Hinterlegen der Zellen (sowie auch alle anderen Formatierungsoptionen) ist natürlich auch möglich.

$worksheet.Range(“A1:C1”).Interior.colorindex = 6

Und wieder speichern.

$workbook.Save()

Nun mit gelber Kopfzeile

excelol2

So lässt sich natürlich auch alles andere in der Tabelle ändern. Im Prinzip ist damit die komplette Steuerung ohne GUI möglich.


Outlook

Bei Outlook ist das alles ebenso möglich. Es gibt aber einige wenige Besonderheiten. Sie müssen ein Standardprofil auswählen und können dann über MAPI auch nur auf die eingerichtete Mailbox zugreifen. Wenn Sie weitere Mailboxen oder PST Dateien in dem Profil eingebunden haben, können Sie auf diese auch zugreifen.

Auch hier muss zunächst das entsprechende ComObject erstellt werden.

$Outlook = New-Object -ComObject Outlook.Application

Den Namespace des Outlook Profils legen wir zur weiteren Verwendung separat ab

$Namespace = $Outlook.GetNamespace(“MAPI”)

In der definierten Session suche ich nun den gewünschten Ordner oder die gewünschte Mailbox.

$Mailbox = $Namespace.Session.Folders |? {$_.name -match “info@langlitz-it.de”}

Nun suche ich mir z.B. die letzte gesendete Mail aus dem Ordner „Sent Items

$Mailbox.Folders |? {$_.name -match “sent items”} |% {$_.items} |select ReceivedTime,Subject,Body -Last 1 |fl

ReceivedTime : 05.10.2016 12:24:00
Subject             : Das ist eine Testmail
Body                 : Hallo,
Hier steht der Text.
Gruß

Neue Mail

Um eine neue Mail zu erstellen, verwenden wir wieder das ComObject.

$Outlook = New-Object -ComObject Outlook.Application

Und nun das neue Mail Object.

$Mail = $Outlook.CreateItem(0)

Das Object $Mail müssen wir noch mit Leben füllen.

$Mail.Recipients.Add(“Blog@Langlitz-IT.de”)
$Mail.Subject = “Das ist eine Testmail”
$Mail.HTMLBody = “<>Mail als HMTL<>”

Nun können Sie sich die Mail nochmal anzeigen lassen.

$Mail.Display()

excelol4

Alles OK? Dann wird die Mail versendet.

$Mail.Send()

Über die angebotenen Methoden können Sie Ihr Outlook steuern. Sie können Termine, Erinnerungen, Kontakte, etc. bis hin zu Regeln und Abwesenheitsnachrichten darüber konfigurieren.

ComObject

Eine komplette Liste aller registrierten ComObjects können Sie über die Registry auslesen.

$ComObj = Get-ChildItem registry::HKEY_CLASSES_ROOT\ -Include PROGID -Recurse |% {$_.GetValue(“”)}

$ComObj | ? {$_ -match “outlook”}

Oder

$ComObj | ? {$_ -match “Application_Name”}