问题描述
我想看看我是否正在运行特定的 wsl 发行版(Windows 10 Home、WSL 2):
PS C:\Users\User> wsl --list --running
Windows Subsystem for Linux distributions:
Ubuntu (Default)
Mydistro
PS C:\Users\User> wsl --list --running | Select-String -Pattern "Mydistro"
PS C:\Users\User>
无输出。我用 Get-Member
看到输出是一个字符串;如果我通过 | Out-String -stream
之类的东西运行它,它没有区别。
我可以匹配 Select-String .
或 Select-String .*
但它匹配所有内容,这没有帮助。
是的,我想看看是否有特定名称的正在运行的发行版。在 PowerShell 中是否有更好的方法来做到这一点?
解决方法
令人费解的是,wsl --list --running
生成 UTF-16LE 编码(“Unicode”编码)输出,而不是遵守控制台 (OEM) 代码页。
一个快速而肮脏的解决方法 - 假设所有正在运行的发行版都只用 ASCII-range 字符描述(这似乎很可能) - 是使用以下内容:
(wsl --list --running) -replace "`0" | Select-String -Pattern MyDistro
支持所有 Unicode 字符的正确解决方法需要更多的努力:
$prev = [Console]::OutputEncoding; [Console]::OutputEncoding = [System.Text.Encoding]::Unicode
wsl --list --running | Select-String -Pattern MyDistro
[Console]::OutputEncoding = $prev