Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
As you know, SharePoint taxonomy refers to a catalog of objects in your SharePoint environment or the process of categorizing or classifying objects based on a taxonomic scheme.
The taxonomy is structured like below:
The Termstore -
Groups
Termset
Term ( level 0 )
Term ( level 1)
Term ....
The structure could be deeper as you need, but a very deep structure will not help you to keep real structured information on your tenant. (It is recommended maximum 3-4 level deep for terms.)
If you run it on a machine without SharePoint installed on it, you will need 2 DLLs: Microsoft.SharePoint.Client.dll and Microsoft.SharePoint.Client.Taxonomy.dll (you can copy them from SharePoint server).
The script in PowerShell using CSOM proposed is this one:
$url=Read-host "Introduce your tenant's URL"
$cred = Get-Credential
Add-Type -Path "\\path\Microsoft.SharePoint.Client.dll"
Add-Type -Path "\\path\Microsoft.SharePoint.Client.Taxonomy.dll"
$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($cred.username, $cred.Password)
$clientContext.Credentials = $credentials
############# Get your tenant Taxonomy details ##################
$MMS = [Microsoft.SharePoint.Client.Taxonomy.TaxonomySession]::GetTaxonomySession($clientcontext)
$clientContext.Load($MMS)
$clientContext.ExecuteQuery()
$TermStores = $MMS.TermStores
$clientContext.Load($TermStores)
$clientContext.ExecuteQuery()
#Bind to Term Store
$TermStore = $TermStores[0]
Write-Host "################################# Taxonomy on tenant which contain the Site collection #################################"
Write-Host "################################# $url #################################"
$clientContext.Load($TermStore)
$clientContext.ExecuteQuery()
""
$Groups = $TermStore.Groups
$clientContext.Load($groups)
$clientContext.ExecuteQuery()
for ($i = 0; $i -lt $Groups.Count; $i++)
{
write-host "For the Group: "$groups[$i].Name " / " $groups[$i].id
$groupname =$groups[$i]
$termsets = $groupname.TermSets
$clientContext.Load($termsets)
$clientContext.ExecuteQuery()
foreach ($termset in $termsets ){
write-host " The TermSet:"$termset.Name " / " $termset.id -ForegroundColor DarkYellow
$terms = $termset.Terms
$clientContext.Load($terms)
$clientContext.ExecuteQuery()
foreach ($term in $terms ){
write-host " The Term ( level 0): "$term.Name " / " $term.id -ForegroundColor Gray
$items = $term.Terms
$clientContext.Load($Items)
$clientContext.ExecuteQuery()
foreach ( $term_level1 in $items ){
Write-Host " Level 1:" $term_level1.Name " / "$term_level1.ID -ForegroundColor cyan
#$term_level1.TermsCount
$items2 = $term_level1.Terms
$clientContext.Load($Items2)
$clientContext.ExecuteQuery()
foreach ( $term_level2 in $items2 ){
# $term_level2.TermsCount
Write-Host " Level 2:" $term_level2.Name " / "$term_level2.ID -ForegroundColor green
$items3 = $term_level2.Terms
$clientContext.Load($Items3)
$clientContext.ExecuteQuery()
foreach ( $term_level3 in $items3 ){
#$term_level3.TermsCount
Write-Host " Level 3:" $term_level3.Name " / "$term_level3.ID -ForegroundColor yellow
$items4 = $term_level3.Terms
$clientContext.Load($Items4)
$clientContext.ExecuteQuery()
foreach ( $term_level4 in $items4 ){
#$term_level4.TermsCount
Write-Host " Level 4:" $term_level4.Name " / "$term_level4.ID -ForegroundColor blue
$items5 = $term_level4.Terms
$clientContext.Load($Items5)
$clientContext.ExecuteQuery()
foreach ( $term_level5 in $items5 ){
#$term_level5.TermsCount
Write-Host " Level 5:" $term_level5.Name" / "$term_level5.ID -ForegroundColor red
}
}
}
}
}
}
}
}
The results, deeper up to 6 levels like below. Different colors for each level and it's present in the GUID, which is useful. If you need to populate a managed metadata field in a list/library using PowerShell and CSOM on Sharepoint Online.