PowerShell & OneNote: ein Tagebuch erstellen

Ich nutze für meine täglichen Notizen ein “OneNote-Tagebuch”, welches als Notizbuch-Name das jeweilige Jahr trägt. Dieses hat 12 Abschnitte – für jeden Monat einen – und jeweils pro (Arbeits-)Tag eine Seite:

OneNote-Tagebuch
OneNote Tagebuch

Da es überhaupt keinen Spaß macht, so ein Tagebuch jedes Jahr manuell anzulegen, habe ich mir folgendes PowerShell-Script dafür gebastelt:

#requires -Version 3.0

$Year = '2017'
$NotebookPath = "https://d.docs.live.net/0123456789abcdef/Dokumente/$($Year)/"

# Notizbuch alternativ lokal speichern
#$NotebookPath = "C:\Temp\$($Year)"

# neues Notizbuch erstellen
$OneNote = New-Object -ComObject OneNote.Application
$Scope = [Microsoft.Office.Interop.OneNote.HierarchyScope]::hsNotebooks
[ref]$xml = ""
$OneNote.OpenHierarchy($NotebookPath, "", $xml, "cftNotebook")

# für jeden Monat einen neuen Abschnitt anlegen
1..12 | % {
    $Month = "{0:00}" -f $_
    $SectionPath = $NotebookPath + $Month + '.one'

    # neuen Abschnitt erstellen
    [ref]$xmlSection = ""
    $OneNote.OpenHierarchy($SectionPath, "", $xmlSection, "cftSection")

    # für jeden Arbeitstag (Montag - Freitag) im jeweiligen Monatsabschnitt eine Seite erstellen
    1..([DateTime]::DaysInMonth($Year, $Month)) | % {
        $Day = Get-Date -Year $Year -Month $Month -Day $PSItem -Hour 0 -Minute 0 -Second 0
        $Tag = $Day.Date.Day.ToString('D2')
        $Jahr = $Year.Substring(2, 2)
        $SiteName = "$($Tag).$($Month).$($Year) "

        Switch ($Day.DayOfWeek) {
            { $_ -eq 'Monday' } { $SiteName += 'Mo' }
            { $_ -eq 'Tuesday' } { $SiteName += 'Di' }
            { $_ -eq 'Wednesday' } { $SiteName += 'Mi' }
            { $_ -eq 'Thursday' } { $SiteName += 'Do' }
            { $_ -eq 'Friday' } { $SiteName += 'Fr' }
            default { $SiteName = '' }
        }

        if ($SiteName) {
            Write-Host $SiteName

            [ref]$newpageID = ''
            $OneNote.CreateNewPage($xmlSection.Value, [ref]$newpageID, [Microsoft.Office.Interop.OneNote.NewPageStyle]::npsBlankPageWithTitle)

            [ref]$NewPageXML = ''
            $OneNote.GetPageContent($newpageID.Value, [ref]$NewPageXML, [Microsoft.Office.Interop.OneNote.PageInfo]::piAll)

            $null = [Reflection.Assembly]::LoadWithPartialName('System.Xml.Linq')
            $xDoc = [System.Xml.Linq.XDocument]::Parse($NewPageXML.Value)

            $title = $xDoc.Descendants() | Where-Object -Property Name -Like -Value '*}T'

            if (-not $title)
                { throw 'Fehler: kann Titel der neuen OneNote Seite nicht auslesen' }

            # Seitentitel anpassen
            $title.Value = "$SiteName"
            Write-Verbose -Message "Seitentitel ändern"
            $onenote.UpdatePageContent($xDoc.ToString())
        }
    }
}

So kann ich auch Jahre später noch nachvollziehen, wann ich was gemacht habe oder an welchem Datum es welches Problem mit einem bestimmten System gab…

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

2 Kommentare

  1. Kurt Schneider

    Hallo Simone,

    genau so eine Möglichkeit zur Erstellung eines Tagebuches habe ich gesucht. Ich hatte schon mal mit einem Tagebuch in OneNote begonnen. Die Erstellung von Hand war auf Dauer dann doch zu kompliziert. Allerdings habe ich keine Erfahrung mit PowerShell. Kann ich dein Skript einfach in die Eingabeaufforderung kopieren?

    Mit herzlichen Grüßen vom Bodensee,

    Kurt

    • Haindl Simone

      Hallo Kurt,
      stimmt, so erging es mir auch 😉
      Prinzipiell ja – zuerst müsstest Du allerdings in einem Texteditor den Notizbuch-Pfad und das gewünschte Jahr anpassen. Anschließend kannst Du die Eingabeaufforderung öffnen (evtl. nochmal “powershell” eintippen, um sicherzugehen, dass sie auch wirklich gestartet ist) und dann das angepasste Script reinkopieren. Zum Schluss noch Enter drücken und dann sollte das Tagebuch am gewünschten Speicherort angelegt werden.

      Viele Grüße an den Bodensee,
      Simone

Schreibe einen Kommentar

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

*