Skip to content

Instantly share code, notes, and snippets.

@kimcuhoang
Last active November 26, 2021 14:16
Show Gist options
  • Save kimcuhoang/6a3f4534ff4fc2c592a176c53d550b8b to your computer and use it in GitHub Desktop.
Save kimcuhoang/6a3f4534ff4fc2c592a176c53d550b8b to your computer and use it in GitHub Desktop.
A script to install Sitecore Publishing Service
[CmdletBinding()]
param(
[string] $SitecoreInstanceName = "habitathome",
[string] $PublishingServiceZipPackage = ".\Sitecore Publishing Service 3.1.1 rev. 180807-x64.zip",
[string] $WebrootPath = "D:\Inetpub\wwwroot",
[string] $SqlServerName = ".",
[string] $SqlAdminAccount = "sa",
[string] $SqlAdminPassword = 'The-password-for-sa-account',
[switch] $UpdateSchemasOnly
)
$ErrorActionPreference = 'Stop'
$CurrentPath = $PSScriptRoot
$SitecoreInstancePostFix = "dev.local"
$SitecoreHostName = "$($SitecoreInstanceName).$($SitecoreInstancePostFix)"
$PublishingServiceInstanceName = "$($SitecoreInstanceName)_PublishingService"
$PublishingServiceContentPath = "$($WebrootPath)\$($PublishingServiceInstanceName)"
$PublishingServicePort = 5001
$PublishingServiceStatusUrl = "http://$($PublishingServiceInstanceName):$($PublishingServicePort)/api/publishing/operations/status"
$ConnectionStringTemplate = "user id=$($SqlAdminAccount);password=$($SqlAdminPassword);data source=$($SqlServerName);database={0};MultipleActiveResultSets=True;"
Function Extract-PublishingServiceContent {
Write-Host "Extracting Publishing Package....." -ForegroundColor Green
If (!(Test-Path -Path $PublishingServiceZipPackage)) {
throw "The Publishing Service package must be downloaded"
}
If (!(Test-Path -Path $PublishingServiceContentPath)) {
New-Item -Path $PublishingServiceContentPath -ItemType "directory" -Force
}
Expand-Archive -Path $PublishingServiceZipPackage -DestinationPath $PublishingServiceContentPath
}
Function Get-PublishingHostTool {
If (!(Test-Path($PublishingServiceContentPath))) {
throw "Could not find the instance of Publishing Service"
}
Set-Location -Path $PublishingServiceContentPath
return (Get-Command ".\Sitecore.Framework.Publishing.Host.exe")
}
Function Update-ConnectionString ([string] $DatabaseName) {
Write-Host "Updating connectionstring for $($DatabaseName)" -ForegroundColor Green
$ActualDatabaseName = "$($SitecoreInstanceName)_$($DatabaseName)"
$ConnectionStringForDatabase = ($ConnectionStringTemplate -f $ActualDatabaseName)
& $ExeFile configuration setconnectionstring "$($DatabaseName)" "$($ConnectionStringForDatabase)"
}
Function Update-InstanceName {
& $ExeFile configuration set Sitecore:Publishing:InstanceName -v $SitecoreHostName
}
Function Update-Schemas {
& $ExeFile schema upgrade --force
}
Function Create-PublishingServiceSite {
& $ExeFile iis install -s "$($PublishingServiceInstanceName)" -a "$($PublishingServiceInstanceName)" -p $PublishingServicePort --force
}
Function Update-HostsFile {
$HostsFile = "$($env:windir)\system32\Drivers\etc\hosts"
$Content = Get-Content -Path $HostsFile
$HostsFileRecord = "127.0.0.1 $($PublishingServiceInstanceName)"
If (-not ($Content -contains "$HostsFileRecord")) {
$HostsFileRecord | Add-Content -PassThru $HostsFile
}
}
Function Verify-PublishingService {
$PublishingServiceStatusRequest = [System.Net.WebRequest]::Create($PublishingServiceStatusUrl)
$PublishingServiceStatusResponse = $PublishingServiceStatusRequest.GetResponse();
try {
if ($PublishingServiceStatusResponse.StatusCode -ne 200) {
Write-Host "Could not contact Publishing Service on '$($PublishingServiceStatusUrl)'. Response status was '$PublishingServiceStatusResponse.StatusCode'" -ForegroundColor Red
} else {
$reqstream = $PublishingServiceStatusResponse.GetResponseStream()
$sr = new-object System.IO.StreamReader $reqstream
$result = $sr.ReadToEnd()
If ($result -eq '{"status":0}') {
Write-Host "Install $($PublishingServiceInstanceName) successfully" -ForegroundColor Green
}
}
}
finally {
$PublishingServiceStatusResponse.Close()
}
}
If($UpdateSchemasOnly) {
$ExeFile = Get-PublishingHostTool
Update-Schemas
} Else {
Write-Host "*******************************************************" -ForegroundColor Green
Write-Host " Installing Publishing Server for: $($SitecoreHostName)" -ForegroundColor Green
Write-Host " Instance: $($PublishingServiceInstanceName):$($PublishingServicePort)" -ForegroundColor Green
Write-Host "*******************************************************" -ForegroundColor Green
Extract-PublishingServiceContent
$ExeFile = Get-PublishingHostTool
Update-ConnectionString -DatabaseName "core"
Update-ConnectionString -DatabaseName "master"
Update-ConnectionString -DatabaseName "web"
Update-InstanceName
Update-Schemas
Create-PublishingServiceSite
Update-HostsFile
Verify-PublishingService
}
Set-Location $CurrentPath
@rozadendron
Copy link

Thanks ! Your code helped us ! It works

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment