【问题标题】:How do I match on wsl output in powershell?如何在powershell中匹配wsl输出?
【发布时间】:2021-08-17 03:12:01
【问题描述】:

我想查看我是否正在运行特定的 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 中有没有更好的方法来做到这一点?

【问题讨论】:

    标签: powershell select-string


    【解决方案1】:

    莫名其妙地,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
    

    【讨论】:

      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多