Tue. May 17th, 2022


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



function Add-Module($strFileName){

Write-Host “Attempting to run ” $strFileName

If (Test-Path $strFileName){



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



#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




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”



Start-SPServiceInstance -Identity $service.ID | Out-Null



Write-Host -f Green “- “$service.ID “on $machine already started”



Write-Host “- Completed creating ‘$ServiceApplicationName’.”


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

This website uses cookies. By continuing to use this site, you accept our use of cookies.