Public/Start-WslDistribution.ps1

function Start-WslDistribution {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false, Position = 0, ValueFromPipelineByPropertyName = $true)]
        [ArgumentCompleter({ 
                param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) 
                Get-WslDistribution -Distribution "$wordToComplete*" | Where-Object { $_.Status -eq [WslDistributionStatus]::Stopped } | ForEach-Object { $_.Distribution } 
            })]
        [Alias("Distro", "Name")]
        [string]$Distribution
    )

    $ActualStoppedDistro = Get-WslDistribution -Distribution $Distribution -ErrorAction SilentlyContinue | Where-Object { $_.Status -eq [WslDistributionStatus]::Stopped }
    if (-not $ActualStoppedDistro) {
        throw (New-WslErrorRecord @{
            Message      = "WSL distribution is not currently stopped."
            ErrorId      = "PowerShellWSLStartInvalidState"
            Distribution = $Distribution
            WslArgs      = "-d $Distribution"
            ExitCode     = $null
            StdErr       = $null
            WslVersion   = (Get-WslStatus -ErrorAction SilentlyContinue).WSL
        })
    }

    if (-not $Distribution) {
        Write-Verbose "No distribution name specified. Using the default WSL distribution."
        $WslDefaultDistro = Get-WslDistribution -Default -ErrorAction Stop
        $Distribution = $WslDefaultDistro.Distribution
    }
    
    Write-Information "Starting WSL distribution '$Distribution'..."
    wsl.exe -d $Distribution

    if ($LASTEXITCODE -ne 0) {
        throw (New-WslErrorRecord @{
            Message      = "Failed to start WSL distribution."
            ErrorId      = "PowerShellWSLStartFailed"
            Distribution = $Distribution
            WslArgs      = "-d $Distribution"
            ExitCode     = $LASTEXITCODE
            StdErr       = $null
            WslVersion   = (Get-WslStatus -ErrorAction SilentlyContinue).WSL
        })
    }
}