Update install scripts.

This commit is contained in:
Jared Goodwin 2020-02-27 22:20:13 -08:00
parent 6d424436d7
commit 90a7174299
2 changed files with 57 additions and 49 deletions

View File

@ -2,15 +2,24 @@
.SYNOPSIS
Configures IIS and installs the Remotely server.
.COPYRIGHT
Copyright © 2019 Translucency Software. All rights reserved.
Copyright © 2020 Translucency Software. All rights reserved.
#>
param (
[Parameter(Mandatory=$True)]
[string]$AppPoolName,
[Parameter(Mandatory=$True)]
[string]$SiteName,
[Parameter(Mandatory=$True)]
[string]$SitePath,
[Parameter(Mandatory=$True)]
[string]$BindingHostname
)
$ErrorActionPreference = "Stop"
$Host.UI.RawUI.WindowTitle = "Remotely Setup"
Clear-Host
#region Variables
$InstallPath = ""
$Website = $null
$ServerCmdlets = $false
$FirewallSet = $false
$CopyErrors = $false
@ -88,6 +97,13 @@ if ((New-Object Security.Principal.WindowsPrincipal $User).IsInRole([Security.Pr
Read-Host "Press Enter to exit"
return
}
### Check PS version. ###
if ((Get-Host).Version.Major -lt 5) {
Wrap-Host
Wrap-Host "Error: PowerShell 5 is required. Please install it via the Windows Management Framework 5.1 download from Microsoft." -ForegroundColor Red
Read-Host "Press Enter to exit"
return
}
### Check Script Root ###
if (!$PSScriptRoot) {
Wrap-Host
@ -111,6 +127,16 @@ if ((Get-Command -Name "Add-WindowsFeature" -ErrorAction Ignore) -eq $null) {
else {
$ServerCmdlets = $true
}
### Check if PostgreSQL is installed. ###
if ((Get-Package -Name "*PostgreSQL*" -ErrorAction SilentlyContinue) -eq $null){
Wrap-Host
Wrap-Host "ERROR: PostgreSQL was not found. Please install it from https://postgresql.org." -ForegroundColor Red
Wrap-Host
pause
return
}
#endregion
### Hosting Requirements ###
@ -219,19 +245,18 @@ else
}
Clear-Host
$Sites = Get-Website
### Site Selection ###
while ($Website -eq $null) {
Wrap-Host
$Sites
Wrap-Host
Wrap-Host "Enter the ID of the website where Remotely will be installed." -ForegroundColor Green
Wrap-Host
$ID = Read-Host "Website ID"
### Create IIS Site ##
[System.IO.Directory]::CreateDirectory($FilePath)
$Website = Get-Website | Where-Object {$_.ID -like $ID}
if ((Get-IISAppPool -Name $AppPoolName) -eq $null) {
New-WebAppPool -Name $AppPoolName
}
$InstallPath = $Website.physicalPath.Replace("%SystemDrive%", $env:SystemDrive)
if ((Get-Website -Name $SiteName) -eq $null) {
New-Website -Name $SiteName -PhysicalPath $SitePath -HostHeader $BindingHostname
New-WebBinding -Name $SiteName -Protocol "https" -Port 443 -HostHeader $BindingHostname
}
Wrap-Host
Wrap-Host "This will DELETE ALL FILES in the selected website and install Remotely Server. If this is not your intention, close this window now and create a new website where Remotely Server will be installed." -ForegroundColor Red
@ -242,7 +267,7 @@ pause
Clear-Host
Wrap-Host
Wrap-Host "Stopping website..." -ForegroundColor Green
Stop-Website -Name $($Website.name)
Stop-Website -Name $SiteName
### File Cleanup ###
@ -252,7 +277,7 @@ $Success = $false
while ($Success -eq $false) {
try {
Get-ChildItem -Path "$InstallPath" -Recurse | Remove-Item -Force -Recurse
Get-ChildItem -Path "$SitePath" -Recurse | Remove-Item -Force -Recurse
$Success = $true
}
catch {
@ -272,7 +297,7 @@ try {
Invoke-WebRequest -Uri "https://github.com/Jay-Rad/Remotely/releases/latest/download/Remotely_Server_Win-x64.zip" -OutFile "$env:TEMP\Remotely_Server_Win-x64.zip"
Wrap-Host "Extracting server files..."
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
[System.IO.Compression.ZipFile]::ExtractToDirectory("$env:TEMP\Remotely_Server_Win-x64.zip", $InstallPath)
[System.IO.Compression.ZipFile]::ExtractToDirectory("$env:TEMP\Remotely_Server_Win-x64.zip", $SitePath)
}
catch {
Wrap-Host
@ -284,12 +309,12 @@ catch {
### Set ACL on website folders and files ###
Wrap-Host
Wrap-Host "Setting ACLs..." -ForegroundColor Green
$Acl = Get-Acl -Path $InstallPath
$Acl = Get-Acl -Path $SitePath
$Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\IIS_IUSRS", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
$Acl.AddAccessRule($Rule)
$Acl.SetOwner((New-Object System.Security.Principal.NTAccount("Administrators")))
Set-Acl -Path $InstallPath -AclObject $Acl
Get-ChildItem -Path $InstallPath -Recurse | ForEach-Object {
Set-Acl -Path $SitePath -AclObject $Acl
Get-ChildItem -Path $SitePath -Recurse | ForEach-Object {
Set-Acl -Path $_.FullName -AclObject $Acl
}
@ -315,7 +340,7 @@ catch
}
# Start website.
Start-Website -Name $($Website.name)
Start-Website -Name $SiteName
Wrap-Host
Wrap-Host

View File

@ -11,6 +11,17 @@
Or run "powershell -f Publish.ps1 -rid win10-x64 -outdir path\to\dir -hostname https://mysite.mydomain.com
#>
param (
[string]$OutDir = "",
# RIDs are described here: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
[string]$RID = "",
[string]$Hostname = "",
[string]$CertificatePath = "",
[string]$CertificatePassword = ""
)
$ErrorActionPreference = "Stop"
$Year = (Get-Date).Year.ToString()
$Month = (Get-Date).Month.ToString().PadLeft(2, "0")
@ -18,19 +29,12 @@ $Day = (Get-Date).Day.ToString().PadLeft(2, "0")
$Hour = (Get-Date).Hour.ToString().PadLeft(2, "0")
$Minute = (Get-Date).Minute.ToString().PadLeft(2, "0")
$CurrentVersion = "$Year.$Month.$Day.$Hour$Minute"
$OutDir = ""
# RIDs are described here: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
$RID = ""
$Hostname = ""
$MSBuildPath = (Get-ChildItem -Path "${env:ProgramFiles(x86)}\Microsoft Visual Studio\" -Recurse -Filter "MSBuild.exe" -File)[0].FullName
$Root = (Get-Item -Path $PSScriptRoot).Parent.FullName
$CertificatePath = ""
$CertificatePassword = ""
$SignAssemblies = $false
Set-Location -Path $Root
#region Functions
function Replace-LineInFile($FilePath, $MatchPattern, $ReplaceLineWith, $MaxCount = -1){
@ -59,27 +63,6 @@ if ([string]::IsNullOrWhiteSpace($MSBuildPath) -or !(Test-Path -Path $MSBuildPat
return
}
for ($i = 0; $i -lt $args.Count; $i++)
{
$arg = $args[$i].ToString().ToLower()
if ($arg.Contains("outdir")){
$OutDir = $args[$i+1]
}
elseif ($arg.Contains("rid")){
$RID = $args[$i+1]
}
elseif ($arg.Contains("hostname")){
$Hostname = $args[$i+1]
}
elseif ($arg.Contains("certificate")){
$CertificatePath = $args[$i+1]
}
elseif ($arg.Contains("certpassword")){
$CertificatePassword = $args[$i+1]
}
}
if ($CertificatePath.Length -gt 0 -and
(Test-Path -Path $CertificatePath) -eq $true -and
$CertificatePassword.Length -gt 0)