Count pages in onenote using Powershell
[필요 사항 ]
쉐어포인트 서버에 있는 원노트에 페이지 수가 몇개인지 알아야 할 경우가 있습니다
[ 해결 방법]
쉐어포인트 서버에 업로드 된 원노트의 내부 구조에 접근할 수 있는 Server side 방법은 존재하지 않습니다.
물론 서버에서 one 파일을 로컬 드라이브로 내려 받아 코드로 접근하여 어찌어찌 하는 방법이 있을 수 있겠지만… 그런 방식은 논외로 하겠습니다.
가장 쉽고 빠르게 구현가능한 방법은 원노트 클라이언트가 설치된 PC 에서 원노트 Application interface 를 활용하는 방법이 유일합니다.
https://msdn.microsoft.com/en-us/library/office/jj680120.aspx
위 링크에 제공하고 있는 API를 활용해 C# 어플리케이션을 개발하는 것이 가능합니다.
위 인터페이스를 활용하여 간단한 파워쉘 스크립트를 작성하였으니 참고 부탁 드립니다.
아래의 파워쉘 스크립트를 통해 현재 PC 에 사용중인 원노트의 페이지 수를 출력할 수 있습니다.
페이지 수를 알고자 하는 원노트 파일을 PC 에 동기화 하신 후 실행하시면 됩니다.
[Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") | Out-Null $onenoteApp = New-Object -ComObject OneNote.Application # init empty Variable for as buffer the [Ref] output action[String]$notebookXml = '' # Get OneNote Pages hierarchy$onenoteApp.GetHierarchy($null, [Microsoft.Office.Interop.OneNote.HierarchyScope]::hsPages, [Ref]$notebookXml) # Create the System.Xml.Linq.XDocument from an XML Text# alternatively you can use the [System.Xml.Linq.XDocument]::Load('C:\temp\myXML.xml') Methode to load from a XML File$doc = [System.Xml.Linq.XDocument]::Parse($notebookXml) # Get OneNote XML namespace$ns = $doc.Root.Name.Namespace$pagecount_notebook = 0$pagecount_section = 0 # enumerate all Notebook Nodes from XML XDocument$doc.Descendants($ns + "Notebook") | ForEach-Object { # output name of current OneNote Notebook "Notebook name: $($_.Attribute("name").Value)" # enumerate all Section Nodes from Notebook Node $_.Descendants($ns + "Section") | ForEach-Object { # output name of current OneNote Section #" Section: $($_.Attribute("name").Value)" # enumerate all Page Nodes from Section Node $_.Descendants($ns + "Page") | ForEach-Object { # output name of current OneNote Page #" Page: $($_.Attribute("name").Value)" $pagecount_notebook = $pagecount_notebook + 1 $pagecount_section = $pagecount_section + 1 } " ## Section: $($_.Attribute("name").Value) ==> " + $pagecount_section + " pages" $pagecount_section = 0 } "##Notebook name: $($_.Attribute("name").Value) ==> " + $pagecount_notebook + " pages" $pagecount_notebook = 0 "---------------------------------------------------"}
|
위 스크립트의 수행결과는 아래와 같이 출력됩니다
Notebook name: Provisioning - Tenant - Site
## Section: Deep Dives ==> 5 pages
## Section: Troubleshooting Guide ==> 26 pages
##Notebook name: Provisioning - Tenant - Site ==> 31 pages
---------------------------------------------------
Notebook name: Yammerkorea101
## Section: Yammer Support 101 ==> 12 pages
## Section: New Section 1 ==> 1 pages
##Notebook name: Yammerkorea101 ==> 13 pages
--------------------------------------------------- |
만약 SharePoint Online 을 사용하신다면, 아래 링크에서 제공하는 Office 365용 onenote api를 사용하여 원하시는 기능을 구현하는 것이 가능합니다.
https://msdn.microsoft.com/ko-kr/office/office365/howto/onenote-tutorial
[ 주의 사항]
본 블로그에 게시된 정보의 내용 (첨부 문서, 링크 등)은 작성일 현재 기준이며 예고없이 변경 될 수 있습니다.
또한, 참고용으로만 제공됨으로 Microsoft에 책임이 없음을 알려 드립니다. 반드시 적용 전 충분한 테스트를 진행하시기 바랍니다.