微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何匹配powershell中的wsl输出?

如何解决如何匹配powershell中的wsl输出?

我想看看我是否正在运行特定的 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 编码(“Un​​icode”编码)输出,而不是遵守控制台 (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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。