代码之家  ›  专栏  ›  技术社区  ›  abhijit

如何从纯文本输出中筛选

  •  0
  • abhijit  · 技术社区  · 2 年前

    我在跑步 wsl -l -v 要在我的计算机上获得WSL虚拟机的列表,我会得到这样的列表:

    NAME             STATE     VERSION
    Ubuntu-18-04     Stopped   2
    Ubuntu-20-04     Running   2
    

    我只想看看那些正在奔跑的。
    我试过:

    wsl -l -v | Select-Object NAME
    

    但我只得到一个空行列表。

    1 回复  |  直到 2 年前
        1
  •  2
  •   X-_-FARZA_ D-_-X    2 年前

    刚在--help文档中找到这个

    wsl -l --running
    

    输出

    Windows Subsystem for Linux Distributions:
    Ubuntu (Default)
    
        2
  •  2
  •   NotTheDr01ds    2 年前

    而您的特定用例可以由 wsl --list --running (如所述 @X- -FARZA_D- -X's answer ),有两个原因 滤器 不起作用:

    首先,你可能在寻找 Select-String Running PowerShell的 Select-Object 将需要PowerShell 对象 用一个 NAME 所有物全部的 wsl.exe 提供的是字符串输出。

    但更重要的是,即使在适当的时候,它仍然不起作用:

    wsl -l -v | Select-String Running
    

    这是由于中的一个错误造成的 wsl.exe 这导致其输出为损坏的UTF-16。看见 this this 请回答以了解详细信息。

    考虑到您的用例,您应该能够正确地使用以下内容进行筛选:

    $console = ([console]::OutputEncoding)
    [console]::OutputEncoding = New-Object System.Text.UnicodeEncoding
    wsl -l -v | Select-String Running
    [console]::OutputEncoding = $console
    

    或者,如果您在Windows 11上使用最新版本的WSL(0.64.0或更高版本),您可以简单地:

    $env:WSL_UTF8=1
    wsl -l -v | Select-String Running