Public/Stop-WslDistribution.ps1
|
function Stop-WslDistribution { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0, ValueFromPipelineByPropertyName = $true)] [ArgumentCompleter({ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) Get-WslDistribution -Distribution "$wordToComplete*" | Where-Object { $_.Status -eq [WslDistributionStatus]::Running } | ForEach-Object { $_.Distribution } })] [Alias("Distro", "Name")] [string]$Distribution ) process { $ActualRunningDistro = Get-WslDistribution -Distribution $Distribution -ErrorAction SilentlyContinue | Where-Object { $_.Status -eq [WslDistributionStatus]::Running } if (-not $ActualRunningDistro) { throw (New-WslErrorRecord @{ Message = "WSL distribution is not currently running." ErrorId = "PowerShellWSLStopInvalidState" Distribution = $Distribution WslArgs = "--terminate $Distribution" ExitCode = $null StdErr = $null WslVersion = (Get-WslStatus -ErrorAction SilentlyContinue).WSL }) } Write-Information "Stopping WSL distribution '$Distribution'..." $StdErr, $StdOut, $Res = Invoke-WslCmdWrapper -WslArgs @('--terminate', $Distribution) -ErrorAction Stop if ($Res -ne 0) { throw (New-WslErrorRecord @{ Message = "Failed to stop WSL distribution with message: '$StdErr'" ErrorId = "PowerShellWSLStopFailed" Distribution = $Distribution WslArgs = "--terminate $Distribution" ExitCode = $Res StdErr = ($StdErr | Out-String).Trim() WslVersion = (Get-WslStatus -ErrorAction SilentlyContinue).WSL }) } } } |