OneNote: vorhandene Notizbücher & Speicherorte per PowerShell auslesen

Seit es OneNote gibt, nutze ich das Programm sowohl geschäftlich als auch privat als mein 2. Gehirn, also um meine Notizen, Protokolle, Planungen, Checklisten und vieles mehr abzulegen und vor allem: wiederzufinden 😉
Und so war es naheliegend, mir mal anzuschauen, was hier mit der PowerShell alles anzustellen ist. Ein guter Einstieg dafür war Richard Siddaway’s Artikel “OneNote and XML-finding notebooks” sowie die MSDN OneNote Developer Reference unter https://msdn.microsoft.com/en-us/library/office/jj680120.aspx.
Zuerst machte es also Sinn, mir mal meine vorhandenen Notebooks inkl. deren Speicherort aufzulisten:
#requires -Version 4.0
function Get-OneNote_Notebook_Path
{
  <#
      .Synopsis
      Pfad zu (allen) OneNote 2013 / 2016 Notizbüchern auflisten
      .DESCRIPTION
      liest den Speicherort aller OneNote Notizbücher aus
      .EXAMPLE
      Get-OneNote_Notebook_Path
      listet die Pfade aller gefundenen Notizbücher auf

      Name                 Path
      ----                 ----
      MeinNotizbuch        https://d.docs.live.net/.../Dokumente/MeinNotizbuch/
      lokalesNotizbuch     C:\Temp\lokalesNotizbuch

      .EXAMPLE
      Get-OneNote_Notebook_Path -Notebook 'MeinNotizbuch'

      Name                 Path
      ----                 ----
      MeinNotizbuch        https://d.docs.live.net/.../Dokumente/MeinNotizbuch/

      .INPUTS
      Notebook
        Name des Notizbuchs, von dem der Speicherort angezeigt werden soll
      .OUTPUTS
      Name
        Name des Notizbuchs
      Path
        Speicherort des Notizbuchs
  #>
  Param([String]$Notebook='*')

  $OneNote = New-Object -ComObject OneNote.Application -ErrorAction SilentlyContinue
  if (-not $OneNote) {
    throw 'Fehler: OneNote Objekt kann nicht erstellt werden (COMobject error)'
  }

  $ScopePages = [Microsoft.Office.Interop.OneNote.HierarchyScope]::hsPages
  [ref]$xml = ''
  $OneNote.GetHierarchy($null, $ScopePages, $xml)

  $schema = @{one = 'http://schemas.microsoft.com/office/onenote/2013/onenote'}

  $xpath = '//one:Notebooks/one:Notebook'
  
  $List =  @() 

  Select-Xml -Xml ([xml]$xml.Value) -Namespace $schema -XPath $xpath | ForEach-Object -Process {
    $List += New-Object psobject -Property @{
      Name = $PSItem.Node.Name
      Path = $PSItem.Node.Path
    }
  }

  $List.Where({$_.Name -like $Notebook})
}
Als Ergebnis erhalte ich folgende Ausgabe:
OneNote Notizbücher & Speicherpfad

OneNote Notizbücher & Speicherpfad

Alternativ auch nur ausgewählte Notizbücher:
Ausgewählte OneNote Notizbücher & Speicherpfad

Ausgewählte OneNote Notizbücher & Speicherpfad

Print Friendly, PDF & Email
Speichere in deinen Favoriten diesen permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*