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