Import termsets menu script
#this is only menu script, not really application, we are using SKG.Metadata.exe file to import termsets. Here we only call this function and delete termsets.
#input parameters
cls
#termstore site url
$siteUrl="https://td_sp_ui/sites/test"
#source folder with folders with termsets (all termset files must have name Metadata.xml)
$sourceDir="C:\InstallFolder\Termstore"
$sourceDirSap="C:\InstallFolder\Termstore\Almira"
#avd termsets definition
$avdTermsets=@("Category Cards",
"ContactUs",
"Business Unit",
"HelpDesk",
"HelpdeskCountry",
"FAQ",
"FAQ Type",
"Configuration")
$sapTermsets=@("AAC",
"Currency",
"Error Codes",
"Plant",
"Storage",
"Organization",
"Material"
)
#add pssnapin for sharepoint
#add-pssnapin microsoft.sharepoint.powershell
#option to change current parameters, siteUrl and sourceDir
write-host "Current settings of termset import parameters"
write-host "=============================================="
write-host "Term store site url: " $siteUrl
write-host "Path to the termset files: "$sourceDir
write-host "Path to the SAP (Target system dependent) termset files: "$sourceDirSap
$input=read-host "Do you want to change site url or .xml source path? Y/N"
if($input -eq "y")
{
$siteUrl=read-host "Input term store site url (e. g. https://td_sp_ui:1056):"
#$errorActionPreference="Stop"
while(($site=get-spsite $siteUrl) -eq $null)
{
$siteUrl=read-host "Site url doesn't exist. Check the address and try again: "
}
$sourceDir=read-host "Input path to termset files (e. g. C:\Termstore):"
$sourceDirSap=read-host "Input path to SAP (Target system dependent)termset files (e. g. C:\Termstore):"
}
#Check Termstore access by trying to create /delete group and commit changes
$ErrorActionPreference="Stop" #to make sure, our catch catch the exception
try
{
$site=get-spsite $siteUrl
$taxonomySession=Get-SPTaxonomySession -site $site
$termstore=$taxonomySession.Termstores[0]
$group=$termstore.CreateGroup("TryGroup")
$termstore.Groups["TryGroup"].Delete()
$termstore.CommitAll()
}
catch
{
write-host ""
write-host "Access to termstore denied. Check if you are term store Owner im Cenral Administration."
#exit
}
finally
{
$ErrorActionPreference="Continue"
}
function TermsetExistsDelete
{
param([string]$termsetName,
[object]$termstore
)
#TODO check if terset exists in termstore, if yes, option to delete or try to import, skip
#Group name
$groupName="avd Group"
$group=$termstore.Groups[$groupName]
if($group -ne $null) #if group exists
{
if(($termset=$group.Termsets[$termsetName]) -ne $null) #if termset exists
{
$input=read-host "Termset " $termsetName " already exists in term store. Do you want to delete it?"
if($input -eq "y")
{
#delete termset
$termset.Delete()
$termstore.CommitAll()
return $true
}
else
{
#don't delete, don't call import
return $false
}
}
}
}
function ImportTermsets
{
param([array]$termsetGroup,
[string]$sourceDir,
[object]$termstore)
foreach($avanT in $termsetGroup)
{
$termset=$sourceDir+"\"+$avanT+"\Metadata.xml"
if(!(Test-Path $termset))
{
try
{
TermsetExistsDelete -termsetName $avanT -termstore $termstore
#.\SKG.Internet.exe $siteUrl $termset "Y"
write-host '.\SKG.Internet.exe "'$siteUrl '" "' $termset '" "Y"'
}
catch
{
write-error $_
}
}
else
{
$termsetDir=$sourceDir+"\"+$avanT
write-host "Termset " $avanT " doesn't exist at " $termset
}
}
}
do {
#================ MENU =================
write-host ""
write-host ""
write-host "1. Import all avd termsets"
write-host "2. Import all SAP termsets"
write-host "3. Import all termsets"
write-host "4. Import specific termset"
write-host "Q Quit"
write-host "==========================="
$input=read-host "Type number of your option or type 'Q' to quit. "
switch($input)
{
"1"{
write-host "--------- Importing avd termsets --------------"
ImportTermsets -termsetGroup $avdTermsets -sourceDir $sourceDir -termstore $termstore
}
"2"{
write-host "--------- Importing SAP termsets --------------"
ImportTermsets -termsetGroup $sapTermsets -sourceDir $sourceDirSap -termstore $termstore
}
"3"{
write-host "--------- Importing all termsets --------------"
ImportTermsets -termsetGroup $avdTermsets -sourceDir $sourceDir -termstore $termstore
ImportTermsets -termsetGroup $sapTermsets -sourceDir $sourceDirSap -termstore $termstore
}
"4"{
write-host "--------- Importing specific termsets --------------"
#display all termsets
$tsetCount=$avdTermsets.length+$sapTermsets.length
for($i=0;$i -le $tsetCount-1; $i++)
{
if($i -lt $avdTermsets.length)
{
write-host ($i+1) ". " $avdTermsets[$i]
if($i -eq $avdTermsets.length-1)
{
write-host "-----------------"
}
}
else
{
write-host ($i+1) ". " $sapTermsets[$i - $avdTermsets.length]
}
}
#termset selection
[int]$inputNumber=read-host "Select the number of termset to import."
if($inputNumber -le $avdTermsets.length) #if termset is from avd termsets
{
$index=$inputNumber-1
write-host "You have chosen " $avdTermsets[$index]
ImportTermsets -termsetGroup $avdTermsets[$index] -sourceDir $sourceDir
}
else #if termset is from SAP termsets
{
$index=$inputNumber-$avdTermsets.length-1
write-host "You have chosen " $sapTermsets[$index]
ImportTermsets -termsetGroup $sapTermsets[$index] -sourceDir $sourceDirSap
}
}
}
}while($input -ne "q")
write-host "==========================="
write-host "Enjoy using your terms!"
#$site.Dispose()