<# .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', [string] $Service = 'MijnBesluitSocket', [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'