#Set the variables
$siteCollectionUrl = "https://TENANT.sharepoint.com/sites/SITE_COLECTION"
$folderPath = "D:\Terms\Export\"
$termGroupName = "GROUP_NAME"
# Check if you have the Online SharePoint Powershell and
# SharePoint PnP PowerShell Online modules installed or not
Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version
Get-Module -Name SharePointPnPPowerShellOnline -ListAvailable | Select Name,Version
# Uncomment these lines if not installed already
#Install-Module -Name Microsoft.Online.SharePoint.PowerShell
#Install-Module SharePointPnPPowerShellOnline
# Connect to your site (I am using the WebLogin for the two-factor authentication):
Connect-PnPOnline -Url $siteCollectionUrl -UseWebLogin
# Get the group you want to export its term sets
$termGroup = Get-PnPTermGroup -GroupName $termGroupName -Includes TermSets
# Loop over the Term Sets
foreach ($termSetItem in $termgroup.TermSets)
{
write-host "Working on Term Set:"$termSetItem.Name "[" $termSetItem.Id "]"
# The Collection that will hold the Terms in this Term Set
$collection = @()
# Load the Term Set
$termSet = Get-PnPTermSet -TermGroup $termGroup -Identity $termSetItem.Id -Includes Terms
# Create the object and add it to the collection
$termData = new-object PSObject
$termData | Add-member -membertype NoteProperty -name "Term Set Name" -Value $termSet.Name
$termData | Add-member -membertype NoteProperty -name "Term Set Description" -Value $termSet.Description
$termData | Add-member -membertype NoteProperty -name "LCID" -Value ""
$termData | Add-member -membertype NoteProperty -name "Available for Tagging" -Value "TRUE"
$termData | Add-member -membertype NoteProperty -name "Level 1 Term" -Value ""
$termData | Add-member -membertype NoteProperty -name "Level 2 Term" -Value ""
$termData | Add-member -membertype NoteProperty -name "Level 3 Term" -Value ""
$collection += $TermData
# Loop over the Terms Level 1
foreach ($termItem1 in $termSet.Terms)
{
# Load the Level 1 Term
$term1 = Get-PnPTerm -TermGroup $termGroup -TermSet $termSetItem.Id -Identity $termItem1.Id -Includes Terms
# Create the object and add it to the collection
$term1Data = new-object PSObject
$term1Data | Add-member -membertype NoteProperty -name "Term Set Name" -Value ""
$term1Data | Add-member -membertype NoteProperty -name "Term Set Description" -Value ""
$term1Data | Add-member -membertype NoteProperty -name "LCID" -Value ""
$term1Data | Add-member -membertype NoteProperty -name "Available for Tagging" -Value "TRUE"
$term1Data | Add-member -membertype NoteProperty -name "Level 1 Term" -Value $term1.Name
$term1Data | Add-member -membertype NoteProperty -name "Level 2 Term" -Value ""
$term1Data | Add-member -membertype NoteProperty -name "Level 3 Term" -Value ""
$collection += $term1Data
# Loop over the Terms Level 2
foreach ($termItem2 in $term1.Terms)
{
# Load the Level 2 Term
$term2 = Get-PnPTerm -TermGroup $termGroup -TermSet $termSetItem.Id -Identity $termItem2.Id -Includes Terms
# Create the object and add it to the collection
$term2Data = new-object PSObject
$term2Data | Add-member -membertype NoteProperty -name "Term Set Name" -Value ""
$term2Data | Add-member -membertype NoteProperty -name "Term Set Description" -Value ""
$term2Data | Add-member -membertype NoteProperty -name "LCID" -Value ""
$term2Data | Add-member -membertype NoteProperty -name "Available for Tagging" -Value "TRUE"
$term2Data | Add-member -membertype NoteProperty -name "Level 1 Term" -Value $term1.Name
$term2Data | Add-member -membertype NoteProperty -name "Level 2 Term" -Value ""
$term2Data | Add-member -membertype NoteProperty -name "Level 3 Term" -Value ""
$collection += $term2Data
# Loop over the Terms Level 3
foreach ($termItem3 in $term2.Terms)
{
# Load the Level 3 Term
$term3 = Get-PnPTerm -TermGroup $termGroup -TermSet $termSetItem.Id -Identity $termItem3.Id -Includes Terms
# Create the object and add it to the collection
$term3Data = new-object PSObject
$term3Data | Add-member -membertype NoteProperty -name "Term Set Name" -Value ""
$term3Data | Add-member -membertype NoteProperty -name "Term Set Description" -Value ""
$term3Data | Add-member -membertype NoteProperty -name "LCID" -Value ""
$term3Data | Add-member -membertype NoteProperty -name "Available for Tagging" -Value "TRUE"
$term3Data | Add-member -membertype NoteProperty -name "Level 1 Term" -Value $term1.Name
$term3Data | Add-member -membertype NoteProperty -name "Level 2 Term" -Value $term2.Name
$term3Data | Add-member -membertype NoteProperty -name "Level 3 Term" -Value $term3.Name
$collection += $term3Data
}
}
}
# Build the file path, I am using the Term Set name as the filename
$filePath = $folderPath + $termSet.Name + ".csv"
# Write to the file
$collection | Export-csv $filePath -notypeinformation
}