header image

OneNote and XML–finding sections

Posted by: | September 9, 2014 Comments Off on OneNote and XML–finding sections |

I recently showed how to find the names of your OneNote notebooks.  The next level down is the section.  You can find these sections in a notebook like this:


$onenote = New-Object -ComObject OneNote.Application
$scope = [Microsoft.Office.Interop.OneNote.HierarchyScope]::hsPages
[ref]$xml = ”


$onenote.GetHierarchy($null, $scope, $xml)


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


$xpath = "//one:Notebook/one:Section"
Select-Xml -Xml ([xml]$xml.Value) -Namespace $schema -XPath $xpath |
foreach {
$node = $psitem.Node

$npath = Split-Path -Path $node.Path -Parent
$props = [ordered]@{
   Workbook =  Split-Path -Path $npath -Leaf
   Section = $node.Name
New-Object -TypeName PSObject -Property $props


The first part of the script where the application object is created, the scope set and you get the hierarchy is the same as before.  The two scripts diverge when you get to the Xpath you’re going to use.  To find the notebooks you used:


$xpath = "//one:Notebook"


which means get me any Nodes called one:Notebook


To find the section you use:


$xpath = "//one:Notebook/one:Section"


which means any nodes called one;Section that are children of a one:Notebook node.


Remember XML is case sensitive.


Once you have the section nodes – which look like this:


name             : Quick Notes
ID               : {9EFAE9AC-0388-424A-8211-02E8FFE50666}{1}{B0}
path             : https://d.docs.live.net/43cfa46a74cf3e96/Documents/Personal (Web)/Quick Notes.one
lastModifiedTime : 2014-09-04T17:48:07.000Z
color            : #B7C997
Page             : {OneNote: one place for all of your notes, OneNote Basics}


You can extract the data you want. The path property can be used to extract the name of the note book with a little bit of Split-Path magic.


Next time you’ll see how to get down to the individual pages

under: Office 2013, PowerShell

Comments are closed.