You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何检测是否已安装WSL Ubuntu发行版

WSL Ubuntu安装状态检测方案

匹配失效根因

wsl.exe默认输出编码为UTF-16LE,内容包含不可见控制字符(字节顺序标记BOM、多余空字节),部分版本WSL输出的发行版名称前还会附带不可见空格前缀,导致^Ubuntu的行首正则匹配无法命中。

可行解决方案

方案1:使用-q参数输出干净发行版列表

wsl -l -q(--quiet参数)会跳过标题行、默认发行版标记,仅输出纯净的发行版名称,配合前后空白清理即可精准匹配:

# 检测Ubuntu是否存在
$ubuntuInstalled = (wsl -l -q | ForEach-Object { $_.Trim() }) -contains 'Ubuntu'

如果返回$true则说明已安装Ubuntu发行版。

方案2:清理输出编码后正则匹配

如果需要识别默认发行版标记,可先对wsl -l的输出做编码清理后再匹配:

# 编码清理+匹配带默认标记的Ubuntu行
$ubuntuLine = wsl -l | ForEach-Object {
    [Text.Encoding]::ASCII.GetString([Text.Encoding]::Unicode.GetBytes($_))
} | Where-Object { $_.Trim() -match '^Ubuntu.*\(Default\)$' }

如果$ubuntuLine不为空,说明Ubuntu已安装且为默认WSL发行版。

完整检测脚本示例

# 拉取所有WSL发行版并清理空白
$distroList = wsl -l -q | ForEach-Object { $_.Trim() }
$isUbuntuInstalled = $distroList -contains 'Ubuntu'

if ($isUbuntuInstalled) {
    Write-Host "WSL Ubuntu 已安装"
    # 检测是否为默认发行版
    $defaultLine = wsl -l | Select-String '\(Default\)$'
    if ($defaultLine -and $defaultLine.ToString().Trim().StartsWith('Ubuntu')) {
        Write-Host "Ubuntu 是当前默认WSL发行版"
    }
} else {
    Write-Host "未检测到WSL Ubuntu 安装"
}

内容的提问来源于stack exchange,提问作者pico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:48:00