Det her indlæg gennemgår, hvordan du sætter isolerede PowerShell Universal-instanser op på den samme maskine. Det er nyttigt, når du vil teste forskellige versioner, prøve forskellige serverkonfigurationer eller isolere ressourcer på tværs af miljøer. Vi bruger teknikken i vid udstrækning i vores test- og udviklingsmiljøer.
Installation
Første skridt er at oprette en mappe til din PowerShell Universal-app og dine konfigurationsfiler. Download derefter PowerShell Universal-ZIP-filen, og læg den i en App-mappe. Du kan bruge det følgende script til at hente det seneste version 4-build og pakke det ud i en lokal mappe. Opret et update.ps1-script i din mappe, og kør det.
$Version = (Invoke-WebRequest https://imsreleases.blob.core.windows.net/universal/production/v4-version.txt).Content
Write-Verbose "Downloading $Version..."
$Temp = [System.IO.Path]::GetTempPath()
$Zip = (Join-Path $Temp "Universal.$Version.zip")
if (Test-Path $Zip) {
Remove-Item $Zip -Force
}
Invoke-WebRequest "https://imsreleases.blob.core.windows.net/universal/production/$version/Universal.win7-x64.$Version.zip" -OutFile $Zip
$AppPath = Join-Path $PSScriptRoot "App"
if (Test-Path $AppPath) {
Remove-Item $AppPath -Recurse -Force
}
Expand-Archive -Path $Zip -DestinationPath $AppPath
Get-ChildItem $AppPath -Recurse | Unblock-File
Hvis du vil bruge version 5, skal du ændre delen v4-version.txt i versions-URL’en til v5-version.txt. Du kan også hardcode versionen, hvis du vil have et bestemt build. I blob-URL’en til ZIP-filen har du måske lagt mærke til delen win7-x64. Det er den platform, ZIP-filen er bygget til. Du kan ændre den til linux-x64 eller osx-x64, hvis du kører på en anden platform. Besøg downloadcenteret for at se, hvordan URL’erne er formateret, hvis blobben ikke er tilgængelig.
Dokumentationen til ZIP-installationen dækker også udpakning, fjernelse af blokering og start af Universal.Server.exe.
Konfiguration
Opret derefter en run.ps1 i din mappe for at sætte konfigurationen op til din instans. Indstillingerne bruger relative stier til repository, database og logfiler. Nedenfor bruger vi miljøvariabler til at sætte konfigurationen ud fra filen appsettings.json i mappen App. Miljøvariabler tilsidesætter indstillingerne i appsettings.json. Se appindstillinger for den fulde liste.
param($Port = 5000)
$ENV:Data__RepositoryPath = "$PSScriptRoot\Repository"
$ENV:Data__ConnectionString = "Data Source=$PSScriptRoot\Database.db"
$ENV:Kestrel__Endpoints__HTTP__Url = "http://localhost:$Port"
$ENV:Plugins__0 = "SQLite"
$ENV:SystemLogPath = "$PSScriptRoot\Logs\SysLog.txt"
& "$PSScriptRoot\App\Universal.Server.exe"
Scriptet sætter konfigurationen for din instans. Du kan køre det med en bestemt port for at starte instansen. Kopiér scriptet til en anden mappe, og skift porten for at køre flere instanser. Hver instans har sin egen konfiguration og sine egne data. Du kan ikke dele porte mellem instanser, medmindre du bruger IIS.
Klar til at bygge? Download PowerShell Universal.

Adam Driscoll