我想看看我是否正在运行特定的 wsl 发行版(Windows 10 家庭版、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 范围 字符描述(这似乎很可能) - 是使用以下内容:
(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
关于powershell - 如何匹配 powershell 中的 wsl 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67746179/