After discovering that migrating OneNote notebooks from one SharePoint location to another is difficult to do while maintaining the integrity of the notebooks (http://help.share-gate.com/article/907-onenote-migration), I needed to retrieve an inventory of all OneNote notebooks that reside on a collection of Office365 personal sites.

Once I had a list of OneNote notebooks I could begin the process of migrating them in such a way that their integrity is maintained.

The following script uses the Client Side Object Model to find all OneNote notebooks. It will export a list of OneNote notebooks to a .csv file.

Make sure that the script is run in the same directory as the SharePoint Client dlls.

#Search for all OneNote files in a collection of Office365 sites

 

$global:notebooks = @()

Add-Type -Path "Microsoft.SharePoint.Client.dll"

Add-Type -Path "Microsoft.SharePoint.Client.Runtime.dll"

$cred = Get-Credential -Message "Enter your credentials for SharePoint Online:"

$global:spoCred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($cred.UserName, $cred.Password)

 

Function Get-OneNoteInventory($url){

 $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url)

 $clientContext.Credentials = $spoCred

 $list = $clientContext.Web.Lists.GetByTitle("Documents")

 $query = New-Object Microsoft.SharePoint.Client.CamlQuery

 $query.ViewXml = "


   

       OneNote.Notebook   

      

 "

 $listItems = $list.GetItems($query)

 $clientContext.Load($listItems)

 $clientContext.ExecuteQuery()

 

 $listUrl = $list.Context.Url

 foreach ($listItem in $listItems)

 {

  $fullUrl = $listUrl + $listItem["FileRef"]

  $o = new-object psobject

  $o | Add-Member -MemberType noteproperty -Name Name -value $listItem['Title']

  $o | Add-Member -MemberType noteproperty -Name Path -value $fullUrl

  $global:notebooks += $o

 }

}

$urls = @(

"https://contoso-my.sharepoint.com/personal/user1",

"https://contoso-my.sharepoint.com/personal/user2",

"https://contoso-my.sharepoint.com/personal/user3",

"https://contoso-my.sharepoint.com/personal/user4",

"https://contoso-my.sharepoint.com/personal/user5",

"https://contoso-my.sharepoint.com/personal/user6",

"https://contoso-my.sharepoint.com/personal/user7"

)


foreach($url in $urls){

 Get-OneNoteInventory -Url $url

}



$global:notebooks | export-csv "OneNote_Inventory.csv" -noTypeInformation

 

Written By:

Softlanding

More By This Author