powershell - 如何匹配 powershell 中的 wsl 输出?

标签 powershell select-string

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

相关文章:

powershell - 哈希表 - 按输入方式排序

Powershell:Get-ChildItem - 管道到 Rename-Item 和 Copy-Item

powershell - 如何使用powershell select字符串获取正则表达式周围的部分?

powershell - Select-String 因搜索词包含特殊字符而失败

powershell - 十六进制到十进制转换-PowerShell 5

c# - EWS - 访问共享日历项目/约会

powershell - 从 Samaccountname 获取电子邮件地址

powershell - PowerShell 中的着色数组筛选器

Powershell - 变量上的匹配 sid 不起作用

xml - 比较对象cmdlet在文本文件中不能与 “<!--”一起使用