Esta entrada explica cómo configurar instancias aisladas de PowerShell Universal en el mismo equipo. Resulta útil para probar distintas versiones, ensayar configuraciones de servidor diferentes o aislar recursos entre entornos. Utilizamos esta técnica de forma habitual en nuestros entornos de prueba y desarrollo.
Instalación
El primer paso es preparar una carpeta para alojar la aplicación PowerShell Universal y sus archivos de configuración. A continuación, descargue el ZIP de PowerShell Universal y colóquelo en un directorio App. Puede usar el siguiente script para obtener la última compilación de la versión 4 y extraerla a un directorio local. Cree un script update.ps1 en su directorio y ejecútelo.
$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
Si quiere usar la versión 5, cambie la porción v4-version.txt de la URL de versión por v5-version.txt. También puede fijar la versión en el código si desea una compilación concreta. En la URL del blob del ZIP quizá haya visto la porción win7-x64. Esa es la plataforma para la que se genera el ZIP. Puede cambiarla a linux-x64 o osx-x64 si ejecuta en otra plataforma. Consulte el centro de descargas para ver el formato de estas URL si el blob no está disponible.
La documentación de instalación ZIP también cubre la extracción, el desbloqueo de archivos y el arranque de Universal.Server.exe.
Configuración
A continuación, cree un run.ps1 en su directorio para configurar la instancia. Los ajustes usan rutas relativas para el repositorio, la base de datos y los archivos de registro. En el ejemplo siguiente usamos variables de entorno para definir la configuración a partir del archivo appsettings.json de la carpeta App. Cualquier variable de entorno sobrescribe los ajustes de appsettings.json. Consulte configuración de la aplicación para la lista completa.
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"
Este script establece la configuración de su instancia. Puede ejecutarlo con un puerto concreto para arrancar la instancia. Duplique el script en otro directorio y cambie el puerto para ejecutar varias instancias. Cada instancia tiene su propia configuración y sus propios datos. No puede compartir puertos entre instancias, salvo que use IIS.
¿Listo para crear? Descargue PowerShell Universal.

Adam Driscoll