Eerste commit
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
<#
|
||||
.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\tools\SocketServer-proef.ps1'
|
||||
Reference in New Issue
Block a user