Created
October 5, 2014 01:15
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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