<#====================================================================
Copyright © 2015, September. Michael Pomfret
Creates the Service Applications\App Management Service
Allows you to install apps from the internal App Catalog or the public SharePoint Store.
Read more: http://technet.microsoft.com/en-us/library/fp161236(v=office.15).aspx
====================================================================#>
#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
}
function Add-Module($strFileName){
Write-Host “Attempting to run ” $strFileName
If (Test-Path $strFileName){
&($strFileName)
}Else{
Write-Host “Cannot locate” $strFileName
}
}
<#====================================================================
Get SharePoint variables
====================================================================#>
Add-Module(“C:\Temp\SharePoint2013\GetVariables.ps1”)
$ServiceApplicationName = “App Management Service”
$ServiceName = “App Management Service”
$DatabaseName = “App Management”
$spAppPoolName = “App Management Service Application Pool”
$spAppPoolAcc = $AppManagementAppPoolAcc
$ConfigDB = “SharePoint_Configuration”
$MachinesToActivate = $AppManagementMachinesToActivate.Split(“,”).trim()
#Get default SQL server
$DefaultDatabaseServer = (Get-SPDatabase | ? { $_.Type -eq “Configuration Database” }).NormalizedDataSource
#Get SQL server instance for the User Profile Application, Social,
$DatabaseServer = $AppManagementServerInstance
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 -f White $strTest” – Creating ‘$ServiceApplicationName'”
#Check if application pool already exist, if not create it
$spManagedAccount = Get-SPManagedAccount -Identity $spAppPoolAcc -ErrorAction SilentlyContinue
#Check if managed account already exist, if not exit
$spManagedAccount = Get-SPManagedAccount -Identity $spAppPoolAcc -ErrorAction SilentlyContinue
if ($spManagedAccount -eq $null)
{
Write-Host -f Red $strTest “- ” $ServiceName ” Managed Account – Unable to retrieve managed account” $spAppPoolAcc
exit -1
}
$ApplicationPool = Get-SPServiceApplicationPool -Identity $spAppPoolName -ErrorAction SilentlyContinue
if ($ApplicationPool -eq $null)
{
New-SPServiceApplicationPool -Name $spAppPoolName -Account $spManagedAccount | Out-Null
}
else
{
Set-SPServiceApplicationPool $ApplicationPool -Account $spManagedAccount | Out-Null
}
$SA = New-SPAppManagementServiceApplication -Name $ServiceApplicationName -ApplicationPool $spAppPoolName -DatabaseServer $DatabaseServer -DatabaseName $DatabaseName
#Create Service Application Proxy
Write-Host -f Green $strTest ” – Creating ‘$ServiceApplicationName’ proxy”
New-SPAppManagementServiceApplicationProxy -name “$ServiceApplicationName Proxy” -ServiceApplication $SA | Out-Null
#Start service instances
Write-Host $strTest “- 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 -f Green $strTest “- Starting” $service.ID “on $machine”
Start-SPServiceInstance -Identity $service.ID | Out-Null
}
}
Write-Host -f Green $strTest “- Done creating ‘$ServiceApplicationName’.”
}else{
Write-Host -f Red $strTest “- 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