Files
MijnBesluit/tools/SocketServer-uitrollen.ps1
2026-10-16 17:34:03 +02:00

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'