Сценарий/команда PowerShell для экспорта имен страниц OneNote и URL-адресов в JSON

Для всех записных книжек OneNote, которые синхронизируются с моим ПК с Win10, как я могу использовать PowerShell для создания файла .json, содержащего массив объектов, где каждый объект содержит:

  • Имя ноутбука
  • Название раздела
  • Название страницы
  • URL страницы с префиксом onenote:

... для каждой записной книжки/раздела/страницы OneNote в моей текущей учетной записи пользователя Windows?

Вывод будет выглядеть так:

    [
      {
        "notebook_name": "My Notebook name",
        "section_name": "The name of a section",
        "page_name": "The name of a page",
        "page_url": "onenote:https://d.docs.live.net/...etc..."
      },
      { /* ...etc...*/ }
    ]

person LaVache    schedule 19.08.2019    source источник
comment
Что вы пробовали/исследовали, что не работает должным образом? Stack Overflow не является службой написания кода.   -  person    schedule 19.08.2019


Ответы (1)


Мне немного надоело ждать ОП, так что вот:

$oneNote = New-Object -ComObject OneNote.Application
[xml]$hierarchy = ""
$oneNote.GetHierarchy("", [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$hierarchy)

$result = foreach ($notebook in $hierarchy.Notebooks.Notebook ) {
    foreach ($section in $notebook.Section) {
        $sectionUrl = 'onenote:{0}' -f $section.path
        $section.ChildNodes | ForEach-Object { 
            [PsCustomObject]@{
                'notebook_name' = $notebook.name
                'section_name'  = $section.name
                'page_name'     = $_.name
                'page_url'      = '{0}/pages/{1}' -f $sectionUrl, $_.ID
            }
        }
    }
}

# clean up the COM object
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($oneNote) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

$result | ConvertTo-Json
person Theo    schedule 24.08.2019