今日も期待通りにはならなかった。
OneNote + PowerShell
この話題をまとめて今日の話題にするはずだったのに、再び機会を逸してしまった。そして、ましても怠慢、加えて些細なところで時間を浪費するのだった。
詰まった点の一つは、PowerShellでの関数定義と呼び出し方だった。ノートの構造を取得し列記する。構造に応じたインデントを挿入するところで、それが期待通りにならず悩んでいた。不具合の原因は関数の呼び出し方だった。
一般的なプログラム的な記述で呼び出しており、PowerShell流の書き方を全く失念してしまっていたものだから、何が悪いのか全く分からなかった。
function printAll($hierarchy){ foreach ($notebook in $hierarchy.Notebooks.Notebook){ printName $notebook 0 $False foreach ($sectiongroup in $notebook.SectionGroup){ printName $sectiongroup 1 $False } foreach ($section in $notebook.Section){ printName $section 1 $False foreach ($page in $section.Page){ #printName $page 2 $True printName $page 2 $False } } } } function printName($items, [int]$indent_level, [bool]$printID){ $indent = "`t" * $indent_level if ($printID){ foreach($item in $items){ Write-Host ($indent + $item.name + "`t" + $item.ID) } } else{ foreach($item in $items){ Write-Host ($indent + $item.name) } } } $OneNote = New-Object -ComObject OneNote.Application #Add-Type -path "C:\Program Files\PowerToys\modules\launcher\Interop.Microsoft.Office.Interop.OneNote.dll" #Add-Type -AssemblyName Microsoft.Office.Interop.OneNote Add-Type -assembly Microsoft.Office.Interop.OneNote [xml]$Hierarchy = "" $OneNote.GetHierarchy( $Hierarchy.Notebooks.Notebook.ID, [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$Hierarchy, [Microsoft.Office.InterOp.OneNote.XMLSchema]::xsCurrent) printAll($Hierarchy) [System.Runtime.InteropServices.Marshal]::ReleaseComObject($OneNote) | Out-Null
ここにたどり着くために、また一日を費やした。ここからやっとスタートラインを一歩踏み出したところ。