<#====================================================================
Copyright © 2015, September. Michael Pomfret
Creates the Work Management Service Application which provides task aggregation across work management systems, including Microsoft SharePoint Products, Microsoft Exchange Server, and Microsoft Project Server.
Check for existing service application and proxy
Check if application pool already exist, if not create it
Creates Service Application Proxy
====================================================================#>
#Allows to use SharePoint cmdlets from inside the Windows PowerShell command window
If ((Get-PsSnapin |?{$_.Name -eq “Microsoft.SharePoint.PowerShell”})-eq $null)
{
Add-PsSnapin Microsoft.SharePoint.PowerShell | Out-Null
}
<#====================================================================
Get SharePoint variables
====================================================================#>
Add-Module(“C:\Temp\SharePoint2013\GetVariables.ps1”)
function Add-Module($strFileName){
Write-Host “Attempting to run ” $strFileName
If (Test-Path $strFileName){
&($strFileName)
}Else{
Write-Host “Cannot locate” $strFileName
}
}
#Get default SQL server
$DefaultDatabaseServer = (Get-SPDatabase | ? { $_.Type -eq “Configuration Database” }).NormalizedDataSource
#Get SQL server instance for the User Profile Application, Social,
$DatabaseServer = $WorkServerInstance
$ServiceApplicationName = “Work Management Service Application”
$ServiceName = “Work Management Service”
$spAppPoolAcc = $AppPoolAcc
$spAppPoolName = “Work Management Service Application Pool”
$MachinesToActivate = $WorkMachinesToActivate.Split(“,”).trim()
Write-Host “”
Write-Host “========================================================”
Write-Host “SharePoint 2013 – Module ‘$ServiceApplicationName’…”
Write-Host “To SharePoint Servers” $MachinesToActivate
Write-Host “Application Pool Name -” $spAppPoolName
Write-Host “Application Pool Account – -” $spAppPoolAcc
Write-Host “Database Server Instance -” $DatabaseServer
Write-Host “Configuration DB -” $ConfigDB
Write-Host “========================================================”
Write-Host “”
Start-SPAssignment -Global | Out-Null
try
{
#Check for existing service application and proxy
$ExistingServiceApp = Get-SPServiceApplication | where-object {$_.Name -eq $ServiceApplicationName}
if ($ExistingServiceApp -eq $null)
{
Write-Host ” – Creating ‘$ServiceApplicationName'”
#Check if managed account already exist, if not exit
$spManagedAccount = Get-SPManagedAccount -Identity $spAppPoolAcc -ErrorAction SilentlyContinue
if ($spManagedAccount -eq $null)
{
Write-Host -f Red “- ” $ServiceName ” Managed Account – Unable to retrieve managed account” $spAppPoolAcc
exit -1
}
#Check if application pool already exist, if not create it
$ApplicationPool = Get-SPServiceApplicationPool -Identity $spAppPoolName -ErrorAction SilentlyContinue
if ($ApplicationPool -eq $null)
{
Write-Host “- Creating $spAppPoolName using managed account to $spManagedAccount”
New-SPServiceApplicationPool -Name $spAppPoolName -Account $spManagedAccount | Out-Null
}
else
{
Write-Host ” – Updating $ServiceApplicationName managed account to $spManagedAccount”
Set-SPServiceApplicationPool $ApplicationPool -Account $spManagedAccount | Out-Null
}
New-SPWorkManagementServiceApplication -Name $ServiceApplicationName -ApplicationPool $spAppPoolName | Out-Null
#Create Service Application Proxy
Write-Host ” – Creating ‘$ServiceApplicationName’ proxy”
New-SPWorkManagementServiceApplicationProxy -Name “$ServiceApplicationName Proxy” -DefaultProxyGroup -ServiceApplication $ServiceApplicationName | Out-Null
#Start service instances
Write-Host “- Starting service instance”
foreach ($machine in $MachinesToActivate)
{
#Gets the service to determine its status
$service = $(Get-SPServiceInstance | where {$_.TypeName -match $ServiceName} | where {$_.Server -match “SPServer Name=”+$machine})
If ($service.Status -eq “Disabled”)
{
Write-Host ” – Starting” $service.ID “on $machine”
If(-eq”Live”)
{
Start-SPServiceInstance -Identity $service.ID | Out-Null
}
}else{
Write-Host -f Green “- “$service.ID “on $machine already started”
}
}
Write-Host “- Completed creating ‘$ServiceApplicationName’.”
}else{
Write-Host -f Red ” – ServiceApplication ‘$ServiceApplicationName’ already exists.”
#Remove Application?
$RemoveApplication=read-host ‘Do you wish to remove Application? (Y/N)’
if ($RemoveApplication-eq”Y”)
{
write-host “- Removing ‘$ServiceApplicationName’…”
Remove-SPServiceApplication $ExistingServiceApp -removedata -Confirm:$false
#Proxy is NOT automatically deleted
$ExistingServiceAppProxy = Get-SPServiceApplicationProxy | where-object {$_.Name -eq “$ServiceApplicationName Proxy”}
if ($ExistingServiceAppProxy -ne $null)
{
write-host “- Removing ‘$ServiceApplicationName proxy’…”
Remove-SPServiceApplicationProxy $ExistingServiceAppProxy -Confirm:$false
}
write-host “- Stopping service instance…”
Get-SPServiceInstance | where-object {$_.TypeName -eq $ServiceName} | Stop-SPServiceInstance -Confirm:$false | Out-Null
}
}
}
catch { write-Output $_ }
Stop-SPAssignment -Global | Out-Null