OneNote mit Powershell bearbeiten


Mal wieder so ein Ding wo Powershell mit seinen Möglichkeiten strahlt. Wer OneNote kennt wird irgendwann auch mal den Wunsch haben, mit Powershell darauf zuzugreifen.

Nun gibt es schon seit einiger Zeit einen Powershell-Provider für OneNote. http://bdewey.com/2007/07/18/onenote-powershell-provider/. Weitere Infos gibts es hier http://powershell.com/cs/blogs/tobias/archive/2008/10/10/extending-powershell-with-snapins-and-microsoft-onenote.aspx. Aber es muss ja nicht immer gleich ein externes Snapin sein, wenn man nur mal schnell etwas probieren möchte.

In diesen Beispielen wird Onenote 2010 mit Powershell 2.0 benutzt.

Also gehts wie immer ganz einfach los:

$onenote = New-Object Microsoft.Office.Interop.Onenote.ApplicationClass

Damit enthält $oneNote ein COM-Objekt. Die in Frage kommenden Objekte deren Methoden und Properties werden hier beschrieben: http://msdn.microsoft.com/en-us/library/gg649853.aspx.

Nun kann man mittels GetHierarchy() verschiedene Dinge in Erfahrung bringen, vorher wird aber noch eine $xml-Variable mit $nil zugewiesen damit die Variable existiert, da sie per [ref] an GetHierarchy übergeben werden muss:

[xml]$xml = $null

$one.GetHierarchy($null, [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsNotebooks, [ref] $xml)

Der Enumeration-Typ [Microsoft.Office.InterOp.OneNote.HierarchyScope] wird hier erklärt: http://msdn.microsoft.com/en-us/library/ff966473.aspx und erlaubt auch den Zugriff auf Seiten und Sektionen also Register.

Durch die vorhergehende Initialisierung von $xml mittels dem [xml]-Typ, ist nun $xml direkt über die üblichen Powershell-Möglichkeiten mit XML-Objekten ansprechbar:

$xml.Notebooks.Notebook

listet alle Notizbücher auf, welche bekannt sind. Wenn man es detaillierter haben möchte, kann man auch hsPages benutzen:

$one.GetHierarchy($null, [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref] $xml)

Damit ist ein kompletter Durchgriff mittels

$page=$xml.Notebooks.Notebook[0].section[0].Page[0]

bis auf die Seite möglich.

Also wieder eine Variable als XML-Typ initialisieren:

[xml]$pagexml = $null

und direkt den Seiteninhalt holen:

$one.GetPageContent($page.ID, [ref] $pagexml)

und

$pagexml.Page

fördert dann die Seite zutage. Ja und hier bekommt man dann die interessanten Sachen zu Gesicht, wie InkDrawing oder Image.OCRData.OCRText, nicht zu vergessen die Möglichkeiten mittels Audio-Aufzeichnungen Transkriptionen zu bekommen! Aber das sind Spielereien für einen späteren Blogeintrag…

Was sehr hilfreich werden kann, bei tiefergehenden Geschichten: http://htmlagilitypack.codeplex.com/

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: