126 lines
4.7 KiB
PowerShell
126 lines
4.7 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Zet een nieuwe versie van de SocketServer op deze server.
|
|
|
|
.DESCRIPTION
|
|
Draai dit OP DE SERVER, in een PowerShell dat je als administrator hebt geopend.
|
|
|
|
Het script stopt de service, bewaart de huidige versie én je appsettings.json, pakt de
|
|
nieuwe versie uit, zet de instellingen terug en start de service weer. Start hij niet,
|
|
dan wordt de vorige versie teruggezet.
|
|
|
|
Je instellingen blijven dus staan - ook de vingerafdruk van het certificaat.
|
|
|
|
.EXAMPLE
|
|
C:\beheer\SocketServer-uitrollen.ps1 -Zip \\tsclient\D\publish\mijnbesluit-socketserver.zip
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string] $Zip,
|
|
|
|
[string] $Doel = 'C:\MijnBesluitSocket',
|
|
# De SideKickAgent geeft -Servicenaam en -Exe mee; -Exe wordt hier niet gebruikt (de exe is vast MijnBesluit.SocketServer.exe).
|
|
[Alias('Servicenaam')]
|
|
[string] $Service = 'MijnBesluitSocket',
|
|
[string] $Exe = 'MijnBesluit.SocketServer.exe',
|
|
[int] $BewaarVersies = 5
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$beheerder = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
|
if (-not $beheerder) {
|
|
throw 'Dit script heeft beheerdersrechten nodig. Open PowerShell met "Als administrator uitvoeren".'
|
|
}
|
|
|
|
if (-not (Test-Path $Zip)) { throw "Het zip-bestand is niet gevonden: $Zip" }
|
|
if (-not (Test-Path $Doel)) { throw "De map $Doel bestaat niet. Is de SocketServer hier wel geinstalleerd?" }
|
|
|
|
$Stempel = Get-Date -Format 'yyyyMMdd-HHmmss'
|
|
$Instelling = Join-Path $Doel 'appsettings.json'
|
|
$Bewaarmap = Join-Path (Split-Path $Doel -Parent) '_vorige-socketserver'
|
|
|
|
Write-Host ''
|
|
Write-Host 'SocketServer uitrollen' -ForegroundColor Cyan
|
|
Write-Host " Zip : $Zip"
|
|
Write-Host " Doel : $Doel"
|
|
Write-Host " Service : $Service"
|
|
Write-Host ''
|
|
|
|
# Eerst uitpakken naar een tijdelijke map, zodat de service maar kort uit staat.
|
|
$Tijdelijk = Join-Path $env:TEMP "mijnbesluit-socket-$Stempel"
|
|
Write-Host 'Uitpakken...' -ForegroundColor Cyan
|
|
Expand-Archive -Path $Zip -DestinationPath $Tijdelijk -Force
|
|
|
|
if (-not (Test-Path (Join-Path $Tijdelijk 'MijnBesluit.SocketServer.exe'))) {
|
|
Remove-Item $Tijdelijk -Recurse -Force
|
|
throw 'Dit lijkt geen geldige publicatie: MijnBesluit.SocketServer.exe ontbreekt in het zip-bestand.'
|
|
}
|
|
|
|
# De instellingen zijn van jou, niet van de publicatie: die gaan er straks weer overheen.
|
|
$instellingenBewaard = $null
|
|
if (Test-Path $Instelling) {
|
|
$instellingenBewaard = Join-Path $env:TEMP "appsettings-$Stempel.json"
|
|
Copy-Item $Instelling $instellingenBewaard -Force
|
|
Write-Host 'Instellingen bewaard.'
|
|
}
|
|
|
|
$draaide = (Get-Service $Service -ErrorAction SilentlyContinue).Status -eq 'Running'
|
|
if ($draaide) {
|
|
Write-Host 'Service stoppen...' -ForegroundColor Cyan
|
|
Stop-Service $Service
|
|
# Windows geeft de bestanden niet altijd meteen vrij.
|
|
Start-Sleep -Seconds 2
|
|
}
|
|
|
|
New-Item -ItemType Directory -Path $Bewaarmap -Force | Out-Null
|
|
$vorige = Join-Path $Bewaarmap "socketserver-$Stempel"
|
|
Write-Host 'Vorige versie bewaren...' -ForegroundColor Cyan
|
|
Copy-Item $Doel $vorige -Recurse -Force
|
|
|
|
try {
|
|
Write-Host 'Nieuwe versie plaatsen...' -ForegroundColor Cyan
|
|
Copy-Item (Join-Path $Tijdelijk '*') $Doel -Recurse -Force
|
|
|
|
if ($instellingenBewaard) {
|
|
Copy-Item $instellingenBewaard $Instelling -Force
|
|
Write-Host 'Instellingen teruggezet.'
|
|
}
|
|
|
|
Write-Host 'Service starten...' -ForegroundColor Cyan
|
|
Start-Service $Service
|
|
Start-Sleep -Seconds 3
|
|
|
|
$stand = (Get-Service $Service).Status
|
|
if ($stand -ne 'Running') { throw "De service staat op '$stand' in plaats van 'Running'." }
|
|
}
|
|
catch {
|
|
Write-Host ''
|
|
Write-Host "Mislukt: $($_.Exception.Message)" -ForegroundColor Red
|
|
Write-Host 'Vorige versie terugzetten...' -ForegroundColor Yellow
|
|
|
|
Stop-Service $Service -ErrorAction SilentlyContinue
|
|
Start-Sleep -Seconds 2
|
|
Copy-Item (Join-Path $vorige '*') $Doel -Recurse -Force
|
|
Start-Service $Service -ErrorAction SilentlyContinue
|
|
|
|
throw 'De nieuwe versie is teruggedraaid. Kijk in Logboeken > Windows-logboeken > Toepassing.'
|
|
}
|
|
finally {
|
|
Remove-Item $Tijdelijk -Recurse -Force -ErrorAction SilentlyContinue
|
|
if ($instellingenBewaard) { Remove-Item $instellingenBewaard -Force -ErrorAction SilentlyContinue }
|
|
}
|
|
|
|
# Oude versies opruimen, anders loopt de schijf vol.
|
|
Get-ChildItem $Bewaarmap -Directory | Sort-Object Name -Descending |
|
|
Select-Object -Skip $BewaarVersies | Remove-Item -Recurse -Force
|
|
|
|
Write-Host ''
|
|
Write-Host 'Klaar. De service draait.' -ForegroundColor Green
|
|
Write-Host " Vorige versie staat in: $vorige"
|
|
Write-Host ''
|
|
Write-Host 'Controleer vanaf je eigen pc met:'
|
|
Write-Host ' D:\MijnBesluit VS\MijnBesluit\tools\SocketServer-proef.ps1'
|