As you know, Project Server 2016 is actually a service application on SharePoint Server 2016.
Which means if you want Project Server 2016, you must have SharePoint 2016 first.
But if you have SharePoint 2016 farm, it’s much easier to get Project 2016. Moreover, once you build robust, scalable and high-available SharePoint, you get the same to you Project “for free”.
NB: Project is licensed separately.
Look at some PowerShell commands, which can help you provision Project 2016 Service Application on SharePoint 2016:
# Enable Project Server License
Enable-ProjectServerLicense -Key Y2WC2-K7NFX-KWCVC-T4Q8P-4RG9W
# Get Service Accounts
Add-WindowsFeature rsat-ad-powershell
Import-Module ActiveDirectory
Get-ADUser -Filter ‘Name -like “*project*”‘
Get-ADUser -Filter ‘SamAccountName -like “SP-Project*”‘ | ft DistinguishedName, SamAccountName
#Add managed accounts
Get-SPManagedAccount
$account = “ecm\SP-Project-Svc”
New-SPmanagedaccount -credential (Get-Credential -UserName $account -Message “type password”)
$SvcAppPlAccnt = Get-SPManagedAccount -Identity $account ; $SvcAppPlAccnt
# Service Application pool
Get-SPServiceApplicationPool
$applPoolName = “Project Service Application Pool”
New-SPServiceApplicationPool -Name $applPoolName -Account $SvcAppPlAccnt
$ap = Get-SPServiceApplicationPool | ?{$_.Name -eq $applPoolName}
$ap.Status
# Service Application
Get-SPServiceApplication | Sort-Object DisplayName | ft -AutoSize
$serviceTypeName = “Word Automation Services”
Get-SPServiceApplication | ? {$_.TypeName -eq $serviceTypeName} | ft -AutoSize
$saName = “Project service Application”
New-SPProjectServiceApplication -Name $saName -ApplicationPool $ap
$sa = Get-SPServiceApplication -Name $saName
$sa.Status; $sa.Name
$proxyName = $saName + ” ” + “Proxy”
New-SPProjectServiceApplicationProxy -Name $proxyName -ServiceApplication $sa
# instances
Get-SPServiceInstance | ft -AutoSize
$serviceTypeName = “Project Server Application Service”
Get-SPServiceInstance | ? {$_.TypeName -eq $serviceTypeName }
$serviceInstances = Get-SPServiceInstance | ? {$_.TypeName -eq $serviceTypeName }
$serviceInstance = $serviceInstances | ? {$_.Server.Address -eq $env:COMPUTERNAME}
$serviceInstance.Status
$serviceInstance.Provision()
# database
Get-SPFarm
(Get-SPFarm).Servers
Get-SPWebApplication
New-SPContentDatabase -Name “SP16_SSF2_Project” -DatabaseServer “SP16SQL” -WebApplication “https://ssf2-imc.intranet.ecm.kz”
# site
Get-SPManagedPath -WebApplication “https://ssf2-imc.intranet.ecm.kz”
New-SPSite -ContentDatabase “SP16_SSF2_Project” -URL “https://ssf2-imc.intranet.ecm.kz/proj/pwa” -Template pwa#0 -OwnerAlias “ecm\sp-adm”
Get-SPContentDatabase “SP16_SSF2_Project”
Set-SPContentDatabase “SP16_SSF2_Project” -MaxSiteCount 1 -WarningSiteCount 0
Enable-SPFeature pwasite -URL “https://ssf2-imc.intranet.ecm.kz/proj/pwa”
Get-SPSite