Here’s a post that is way out of my comfort zone, so, please don’t be asking me any questions about it. (I told you I’m lying low today).
It turns out that Microsoft has a scripting environment call Powershell and that people (at lease one person, anyway) use it to write PowerToys or add-ins for OneNote – which is exactly what Brian Dewey has done. He has created a OneNote PowerToy that sends an email when pages in a shared OneNote notebook change.
Here’s how it works:
______________________________________________
There are two pieces of Microsoft technology that I’ve been using recently and I love. The first is OneNote, which is the first program that I think can replace my cherished paper notebooks. Not only is OneNote a great place to write down all of those thoughts I don’t want to forget, it’s also turning into a wonderful tool for collaboration. Starting in OneNote 2007, OneNote has incredible “shared notebook” functionality. With OneNote 2007, you can have a team of people all contributing information to a single notebook. It’s a great way to build a common repository of knowledge.
The second piece of Microsoft technology I love is PowerShell. This is the ultimate geek-chic tool. It’s a powerful command line / scripting environment.
I now use these programs all the time. And like a Reese’s Peanut Butter Cup, I wondered if these two great technologies would be even better if brought together? So I’ve tried to bring them together in the form of a OneNote PowerShell provider. This is a PowerShell extension that lets you create and manipulate OneNote notebooks, sections, and pages from PowerShell. You can use provider to do some interesting automation using OneNote.
Here’s an example: One thing I wanted was a tool that sends email when pages in a shared OneNote notebook change. This turned out to be pretty easy to do in PowerShell. With the OneNote PowerShell provider, the following lines of script get all of the pages that have changed after a particular time — I use this line in the script to find all pages that have changed since the last time I ran the script.
$changedPages = dir $Notebook -recurse |
where-object { ([datetime]$_.lastModifiedTime -gt $targetDate) -and (!$_.PSIsContainer) }
The dir -recurse command gets me a listing of all of the pages, sections, and section groups in the notebook. The where-object clause is then used to whittle the list down to only pages (that’s the !$_.PSIsContainer bit) and only pages that have changed after $targetDate.
Then, I can use the following pipeline to export the changed OneNote pages to MHT format and remember the resulting filenames.
$exportedFileNames = $changedPages |
export-onenote -output $outputDirectory -format mht | get-propertyvalue ExportedFile
Finally, I use the Send-SMTPMail cmdlet from the PowerShell Community Extensions to send the email containing all of the changed pages.
While the core of the script is just those three pipelines, there’s a lot more to the script (217 lines more, to be exact) to do things like parameter validation, formatting, etc. But still, writing and maintaining 220 lines of script was a lot easier than maintaining the couple of thousands of lines of code it would otherwise take to accomplish the same task.
If you want to play with the OneNote PowerShell extension, I’m making it publicly available under the Microsoft Community License. You can find the binary files here: OneNotePowershell.msi. The source files are here: OnPsProvider-1158.zip.
If you install the provider, it will install several sample scripts as well, including the script I’ve been discussing here (Get-OneNoteDigest.ps1).
If you just want to read the documentation that comes with the provider and the scripts, it exists in OneNote format: OneNote PowerShell Documentation.
If you want to use PowerShell with OneNote to build useful tools, let me know. I’ll be curious to see how you use it.
Read Full Post »
You must be logged in to post a comment.