How To Add the Schools of the World as a Metadata Termset   Leave a comment

This took quite some time to gather and place into a Microsoft Excel worksheet but I persevered through the tedious effort to build a TermSet of what I call the “Schools of the World”.  This PowerShell script will populate a “Schools” termset with all of the known (as of today) Colleges and Universities on planet Earth.

To run, execute PowerShell as an Administrator or the SharePoint Setup Account. Navigate to the folder where the Script and .CSV file reside and type

.\SP-ImportTermSet.ps1 http://mysites.portal.contoso.com SchoolsTermSet.csv

This will add a “Schools” termset under the “People” Term Group.

Note: if “Schools” has not already been provisioned, your will need to run the script twice.  First to provision the termset, and second to populate it with the terms.

Download the SchoolsTermSet and rename it to SchoolsTermSet.csv, then copy the PowerShell Termset Installer below as SP-ImportTermSet.ps1.

PowerShell Script: SP-ImportTermSet.ps1

#*******************************************************************************
#*        Author: Paul D. Fox
#*          Date: 05/08/2014
#*   Description: PowerShell Script to Import TermSets into the Managed Metadata
#*                Term Store from a .CSV of specified terms.
#*
#* Modifications: MM/DD/YYYY – Description
#*
#*     Execution: Modify the parameters below to coincide with your Farm
#*                Credentials, Managed Metadata Service Name, and Term Group
#*      Description. To run this script create open the SharePoint
#*                Management Shell and Execute the following from the directory
#*                where the .csv resides.
#*
#* To Execute, type the following:
#* .\SP-ImportTermSet.ps1 “http://mysites.portal.contoso.com” “SchoolsTermSet.csv”
#*
#*******************************************************************************
param(
[string]$siteUrl,
[string]$inputFile)

[string]$termStoreName = “Managed Metadata Service Proxy”
[string]$termGroupName = “People”
[string]$termGroupDescription = “Term Store used to Extend User Profile Information”
[string]$termGroupMgr = “CONTOSO\SPFarmAdmin”
[string]$termGroupContributor = “CONTOSO\SPFarmAdmin”
[string]$termSetDescription = “Schools”
[string]$termSetOwner = “CONTOSO\SPFarmAdmin”
[string]$termSetStakeholder = “CONTOSO\SPFarmAdmin”

#Add the SharePoint PowerShell Snap-In
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#*******************************************************************************
#* Check if both params are passed, else show Syntax.
#*******************************************************************************

if ($siteUrl -eq “”)
{
“Syntax: S2-ImportTermSet , ”
exit;
}
if  (-not($siteurl.ToLower().StartsWith(“http`://”)))
{
“Invalid Web Application Url”
“Syntax: Build-CbMySites ”
exit;
}
if ($siteurl.EndsWith(“/”))
{
$siteurl = $siteurl.Substring(0,$baseUrl.Length -1)
}
#*******************************************************************************
# [string]$siteUrl = $(Read-Host -prompt “Site Collection URL”),
# [string]$termStoreName = $(Read-Host -prompt “Term Store Name”),
# [string]$termGroupName = $(Read-Host -prompt “Term Group Name”),
# [string]$termSetName = $(Read-Host -prompt “Term Set Name”),
# [string]$inputFile = $(Read-Host -prompt “Input File (including full path)”))
#*******************************************************************************

[Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint.Taxonomy”) > $null

function Get-SpTermGroup
{
$termGroup = $termStore.Groups[$termGroupName];
if ($termGroup -ne $null)
{
return $termGroup
}
else
{
$termGroup = $termStore.CreateGroup($termGroupName)
$termGroup.Description = $termGroupDescription
$termStore.CommitAll()
$termGroup.AddGroupManager($termGroupMgr)
$termGroup.AddContributor($termGroupContributor)
$termStore.CommitAll()
return $termGroup
}
}

function Get-SpTermSet([string]$termSetName)
{
$termSet = $termGroup.TermSets[$termSetName];
if ($termSet -ne $null)
{
return $termSet
}
else
{
$termSet = $termGroup.CreateTermSet($termSetName)
$termSet.Description = $termSetDescription
$termSet.Owner = $termSetOwner
$termStore.CommitAll()
$termSet.AddStakeholder = $termSetStakeholder
$termStore.CommitAll()
return $termSet
}
}

function Add-SpTerm([string]$termName, $parentTerm)
{
try
{
if ($parentTerm -eq $null)
{
$term = $termSet.CreateTerm($termName, 1033);
}
else
{
$term = $parentTerm.CreateTerm($termName, 1033);
}
if ($term -eq $null)
{
Write-Host “Term $termName could not be created” -ForegroundColor Red
}
else
{
$term.IsAvailableForTagging = $available ;
write-host “Term $termName has been created”
if ($synonyms.Count -gt 0)
{
foreach ($synonym in $synonyms)
{

$term.CreateLabel($synonym,1033, $false);
write-host ”    Synonym $synonym has been created”
}
}
$termSet.TermStore.CommitAll();
}
}
catch { }
return $term
}

function Get-SpTerm([string]$termName, $parentTerm)
{
if ($parentTerm -ne $null)
{
$term = $parentTerm.Terms[$termName];
}
else
{
$term = $termSet.Terms[$termName];
}
if ($term -eq $null)
{
$term = Add-SpTerm $termName $parentTerm
}
return $term
}

function Import-SPTermStoreGroupTerms
{
$isValid = $true;
$message = “”;
if ($siteUrl.Length -eq 0)
{
$message = “`nPlease provide a site URL”;
$isValid = $false;
}
if ($termStoreName.Length -eq 0)
{
$message += “`nPlease provide a Term Store Name”;
$isValid = $false;
}
if ($termGroupName.Length -eq 0)
{
$message += “`nPlease provide a Term Store Group Name”;
$isValid = $false;
}
if ($inputFile.Length -eq 0)
{
$message += “`nPlease provide an input file”;
$isValid = $false;
}
else
{
$csv = Import-csv -path $inputFile
if ($csv -ne $null)
{
[string]$termSetName =  $csv[0].”Term Set Name”;
if ([string]::IsNullOrEmpty($termSetName))
{
$message += “`nPlease provide a Term Set Name”;
$isValid = $false;
}
}
else
{
return “Argument supplied for input file was invalid.”;
}
}
if ($isValid -eq $false)
{
write-host “`n`nERROR OCCURRED`n`t$message`n`n”
write-host “NAME`n`tImport-SPTermStoreGroupTerms`n”
write-host “SYNOPSIS`n`tConsumes a CSV file containing a listing of term names and creates them if needed in the specified term set.`n”
write-host “SYNTAX`n`tImport-SPTermStoreGroupTerms siteUrl termStoreName termGroupName termSetName inputFile`n”
write-host “EXAMPLES`n`n Import-SPTermStoreGroupTerms “”http://sp2010″” “”Managed Metadata Service”” “”Enterprise Metadata”” “”Business Units”” “”C:\Users\Me\Desktop\input.csv””`n”
write-host “SAMPLE INPUT FILE`n`tTerm`n`tSample Term 1`n`tSample Term 2`n`tSample Term 3`n”
return;
}
try
{
$ErrorActionPreference = “Stop”;
try
{
$taxSession = Get-SPTaxonomySession -Site $siteUrl;
try
{
$termStore = $taxSession.TermStores[$termStoreName];
if ($termStore -ne $null)
{
try
{
$termGroup = Get-SpTermGroup
if ($termGroup -ne $null)
{
try
{
$termSet = Get-SpTermSet $termSetName
if ($termSet -ne $null)
{

foreach($line in $csv)
{
$available = $false
$synonymList= $null
$synonyms = $null
[string]$termName1 = $line.”Level 1 Term”;
[string]$termName2 = $line.”Level 2 Term”;
[string]$termName3 = $line.”Level 3 Term”;
[string]$termName4 = $line.”Level 4 Term”;
[string]$termName5 = $line.”Level 5 Term”;
[string]$termName6 = $line.”Level 6 Term”;
[string]$termName7 = $line.”Level 7 Term”;
[string]$switch = $line.”Available for Tagging”;
[string]$synonymList = $line.”Synonyms”;
if (-not ([string]::IsNullOrEmpty($synonymList)))
{
$synonyms = $synonymList.Split(“|”);
}
if ($switch.ToLower() -eq “true”)
{
$available = $true
}
#Get Level 1 Term
$term = Get-SpTerm $termName1

if (-not ([string]::IsNullOrEmpty($termName2)))
{
$term = Get-SpTerm $termName2 $term
if (-not ([string]::IsNullOrEmpty($termName3)) )
{
$term = Get-SpTerm $termName3 $term
if (-not ([string]::IsNullOrEmpty($termName4)) )
{
$term = Get-SpTerm $termName4 $term
if (-not (![string]::IsNullOrEmpty($termName5)) )
{
$term = Get-SpTerm $termName5 $term
if (-not (![string]::IsNullOrEmpty($termName6)) )
{
$term = Get-SpTerm $termName6 $term
if (-not (![string]::IsNullOrEmpty($termName7)))
{
$term = Get-SpTerm $termName3 $term
}
else
{
return “Error:  Term Name Left Blank”;
}
}
}
}
}
}
}
}
else
{
return “Termset $termSetName does not exist in the term store group $termGroupName”;
}
}
catch
{
“Unable to acquire the termset $termSetName from the term group $termGroupName”
}
}
else
{
return “Term store group $termGroupName does not exist in the term store $termStoreName”;
}
}
catch
{
“Unable to acquire term store group $termGroupName from $termStoreName”
}
}
else
{
return “Term store $termStoreName does not exist”;
}
}
catch
{
“Unable to acquire term store for $termStoreName”
}
}
catch
{
“Unable to acquire session for the site $siteUrl”
}
}
catch { }
finally
{
$ErrorActionPreference = “Continue”;
}
}
Import-SPTermStoreGroupTerms
Remove-Variable * -Scope Local -ErrorAction SilentlyContinue

Bismarck!

Posted June 24, 2015 by Bismarck in SharePoint 2013

Tagged with

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: