SharePoint 2013 out of the box has provision for importing metadata terms
from a CSV file but there is no provision to export the terms that have been
created. Exporting the terms can be accomplished by using Get-SPTaxonomySession
powershell cmdlet. Unfortunately this cmdlet is not available for Office 365 online so
cannot be used to export metadata terms from SharePoint Online.
An alternate approach is to connect to SharePoint Online Taxonomy Session
through CSOM and export the terms to a file. Below script uses CSOM and a
recursive function to loop through metadata terms in SharePoint Online and
write them to a file
#Specify admin user and SharePoint site URL
$User = “User Name”
$Site = "SharePoint Online URL"
#Adding references to SharePoint client assemblies
Add-Type -Path “C:\Program Files\Common Files\Microsoft Shared\Web
Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll”
Add-Type -Path “C:\Program Files\Common Files\Microsoft Shared\Web
Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll”
Add-Type -Path “C:\Program Files\Common Files\Microsoft Shared\Web
Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Taxonomy.dll”
$Pwd = Read-Host -Prompt “Enter your password” -AsSecureString
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($Site)
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User,$Pwd)
$Context.Credentials
= $Credentials
$MMS = [Microsoft.SharePoint.Client.Taxonomy.TaxonomySession]::GetTaxonomySession($Context)
$Context.Load($MMS)
$Context.ExecuteQuery()
$TermStores = $MMS.TermStores
$Context.Load($TermStores)
$Context.ExecuteQuery()
$Context.Load($TermStore)
$Context.ExecuteQuery()
#Get Groups
$Groups = $TermStore.Groups
$Context.Load($Groups)
$Context.ExecuteQuery()
#Create the file and add headings
$OutputFile = "Output File
Path"
$file = New-Object System.IO.StreamWriter($OutputFile)
$file.Writeline("Term Set Name,GUID");
Foreach ($Group
in $Groups)
{
$Context.Load($Group)
$Context.ExecuteQuery()
$TermSets
= $Group.TermSets
$Context.Load($TermSets)
$Context.ExecuteQuery()
Foreach
($TermSet in
$TermSets)
{
$file.Writeline($TermSet.Name + "," +
$TermSet.Id);
$Terms
= $TermSet.Terms
$Context.Load($Terms)
$Context.ExecuteQuery()
Foreach
($Term in
$Terms)
{
$file.Writeline($Term.Name + "," +
$Term.Id);
GetTerms($Term);
}
}
$file.Flush();
$file.Close();
}
#Recursive function to get terms
function GetTerms([Microsoft.SharePoint.Client.Taxonomy.Term] $term)
{
$SubTerms
= $term.Terms;
$Context.Load($SubTerms)
$Context.ExecuteQuery();
Foreach
($SubTerm in
$SubTerms)
{
$file.Writeline($SubTerm.Name + "," +
$SubTerm.Id);
GetTerms($SubTerm);
}
}
Note: Update the User, Site and OutputFile
variables to values matching your environment.
Thank you. I needed this to complete auto-provisioning of Content Organizer Rules with conditions
ReplyDelete