WSL/tools/deploy/deploy-to-vm.ps1

54 lines
1.5 KiB
PowerShell

[cmdletbinding(PositionalBinding = $false)]
param (
[string]$VmName,
[string]$Username,
[string]$Password,
[ValidateSet("X64", "arm64")][string]$Platform = "X64",
[ValidateSet("Debug", "Release")][string]$BuildType = "Debug",
[string]$RemoteTempFolder = "C:\\",
[string]$BuildOutputPath = [string](Get-Location),
[parameter(ValueFromRemainingArguments = $true)]
[string[]]$ExtraMsiArgs
)
$ErrorActionPreference = "Stop"
if ([string]::IsNullOrEmpty($Password)) {
$SecurePassword = New-Object System.Security.SecureString
}
else {
$SecurePassword = ConvertTo-SecureString "$Password" -AsPlainText -Force
}
$Credential = New-Object System.Management.Automation.PSCredential("$Username", $SecurePassword)
$Session = New-PSSession -VMName $VmName -Credential $Credential
$Package = $BuildOutputPath + "/bin/$Platform/$BuildType/wsl.msi"
Copy-Item -ToSession $Session -Path $Package -Destination "$RemoteTempFolder" -Force
Invoke-Command -Session $Session -ScriptBlock {
$MSIArguments = @(
"/i"
"$using:RemoteTempFolder\wsl.msi"
"/qn"
"/norestart"
)
if ($using:ExtraMsiArgs)
{
$MSIArguments += $using:ExtraMsiArgs
}
$exitCode = (Start-Process -Wait "msiexec.exe" -ArgumentList $MSIArguments -NoNewWindow -PassThru).ExitCode
if ($exitCode -Ne 0)
{
Write-Host "Failed to install package: $exitCode"
exit 1
}
Write-Host "Package $using:Package successfully deployed on $using:VmName"
}
Remove-PSSession -Session $Session