Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save devendrasv/267184892aae9ea6a44d to your computer and use it in GitHub Desktop.
Save devendrasv/267184892aae9ea6a44d to your computer and use it in GitHub Desktop.
Provision Site Collection termsets and terms in office 365 using Powershell and CSOM
#Credentials to connect to office 365 site collection url
$url ="https://velegandla.sharepoint.com/sites/training"
$username="[email protected]"
$password="yourpassword"
$Password = $password |ConvertTo-SecureString -AsPlainText -force
Write-Host "Load CSOM libraries" -foregroundcolor black -backgroundcolor yellow
Set-Location $PSScriptRoot
Add-Type -Path (Resolve-Path "Microsoft.SharePoint.Client.dll")
Add-Type -Path (Resolve-Path "Microsoft.SharePoint.Client.Runtime.dll")
Add-Type -Path (Resolve-Path "Microsoft.Online.SharePoint.Client.Tenant.dll")
Add-Type -Path (Resolve-Path "Microsoft.SharePoint.Client.Taxonomy.dll")
Write-Host "CSOM libraries loaded successfully" -foregroundcolor black -backgroundcolor Green
Write-Host "authenticate to SharePoint Online Tenant site $url and get ClientContext object" -foregroundcolor black -backgroundcolor yellow
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($url)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)
$Context.Credentials = $credentials
$context.RequestTimeOut = 5000 * 60 * 10;
$web = $context.Web
$site = $context.Site
$context.Load($web)
$context.Load($site)
try
{
$context.ExecuteQuery()
Write-Host "authenticateed to SharePoint Online Tenant site $url and get ClientContext object succeefully" -foregroundcolor black -backgroundcolor Green
}
catch
{
Write-Host "Not able to authenticateed to SharePoint Online $_.Exception.Message" -foregroundcolor black -backgroundcolor Red
return
}
function provision-Term($context, $termSet, $label, $lcid)
{
$terms = $termSet.Terms
$context.Load($terms)
$context.ExecuteQuery()
$term = $terms | Where-Object {$_.Name -eq $label}
if($term)
{
Write-Host "Term" $label "already exists." -foregroundcolor black -backgroundcolor Blue
}
else
{
Write-Host "Creating term " $label -foregroundcolor black -backgroundcolor yellow
$term = $termSet.CreateTerm($label, $lcid, [System.Guid]::NewGuid())
try
{
$context.ExecuteQuery()
Write-Host "Term" $label "Created successfully" -foregroundcolor black -backgroundcolor Green
}
catch
{
Write-Host "Error while creating Term" $label $_.Exception.Message -foregroundcolor black -backgroundcolor Red
return
}
}
}
function provision-TermSet($context, $group, $termSetXml, $lcid)
{
$termSets = $group.TermSets
$context.Load($termSets)
$context.ExecuteQuery()
$termSet = $termSets | Where-Object {$_.Name -eq $termSetXml.Name}
if($termSet)
{
Write-Host "Termset" $termSetXml.Name "already exists." -foregroundcolor black -backgroundcolor Blue
$termSet = $group.TermSets.GetByName($termSetXml.Name)
$context.Load($termSet)
$context.ExecuteQuery()
}
else
{
Write-Host "Creating term set" $termSetXml.Name -foregroundcolor black -backgroundcolor yellow
$termSet = $group.CreateTermSet($termSetXml.Name, [System.Guid]::NewGuid(), $lcid)
try
{
$context.ExecuteQuery()
Write-Host "Term set " $termSetXml.Name "Created successfully" -foregroundcolor black -backgroundcolor Green
}
catch
{
Write-Host "Error while creating Term set" $termSetXml.Name $_.Exception.Message -foregroundcolor black -backgroundcolor Red
return
}
}
$termSetXml.Term | ForEach-Object { provision-Term $context $termSet $_.Name $lcid }
}
#Getting Term store Information
function Get-TermStoreInfo
{
Write-Host "Loading taxonomy session" -foregroundcolor black -backgroundcolor yellow
$session = [Microsoft.SharePoint.Client.Taxonomy.TaxonomySession]::GetTaxonomySession($context)
$session.UpdateCache();
$context.Load($session)
$context.ExecuteQuery()
Write-Host "Loading term stores" -foregroundcolor black -backgroundcolor yellow
$termStores = $session.TermStores
$context.Load($termStores)
try
{
$context.ExecuteQuery()
$termStore = $termStores[0]
$context.Load($termStore)
Write-Host "Term store with the following id is loaded:" $termStore.Id -foregroundcolor black -backgroundcolor Green
}
catch
{
Write-Host "Error detail while getting term store id" $_.Exception.Message -foregroundcolor black -backgroundcolor Red
return
}
return $termStore
}
#Provisioning the site collection Terms
function Provision-managedmetadata($context)
{
# Redaing Data from manage metadata.xml file
$xmlFilePath = "$PSScriptRoot\SiteCollectionTermsets.xml"
Write-Host "Load SiteCollectionTermsets.xml file for creating terms" -foregroundcolor Green
[xml]$xmlContent = (Get-Content $xmlFilePath)
if (-not $xmlContent)
{
Write-Host "SiteCollectionTermsets.xml was not loaded successfully." -foregroundcolor Red
return
}
$termStore = Get-TermStoreInfo $context
Write-Host "Create Taxonomy group if it is not available" -foregroundcolor black -backgroundcolor yellow
$sitecollectiontaxonomyGroup = $termStore.GetSiteCollectionGroup($context.Site,$true)
$context.Load($sitecollectiontaxonomyGroup)
try
{
$context.ExecuteQuery()
Write-Host "Site collection $url taxonomy group "$sitecollectiontaxonomyGroup.Name" created or retrived successfully " -foregroundcolor black -backgroundcolor Green
}
catch
{
Write-Host "Error while creating or getting site collection $url taxonomy group" $_.Exception.Message -foregroundcolor black -backgroundcolor Red
return
}
$xmlContent.TermSets.TermSet |
ForEach-Object { provision-TermSet $context $sitecollectiontaxonomyGroup $_ $termStore.DefaultLanguage }
}
#Provision Site collection taxonomy group, termset and terms based on SiteCollectionTermsets.xml configuration file
Write-Host "Provisioning Site collection terms started" -foregroundcolor black -backgroundcolor yellow
Provision-managedmetadata ($context)
Write-Host "Provisioning Site collection terms Completed" -foregroundcolor black -backgroundcolor green
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment