如何过滤WSL命令纯文本输出?仅显示运行中的虚拟机
解决WSL虚拟机状态筛选问题
你的问题出在wsl -l -v的输出是纯文本格式,不是PowerShell可识别的结构化对象,而Select-Object NAME是针对对象属性的操作,自然找不到对应属性,所以输出空行。
以下是几种可行的解决方法:
方法1:直接匹配文本行
用Where-Object筛选包含Running的行,简单直接:
# 包含表头的结果 wsl -l -v | Where-Object { $_ -match 'Running' } # 只显示运行中的虚拟机(跳过表头) wsl -l -v | Select-Object -Skip 1 | Where-Object { $_ -match 'Running' }
方法2:转换为结构化对象后筛选
先把文本输出转换成PowerShell对象,这样可以更灵活地筛选、提取字段:
wsl -l -v | Select-Object -Skip 1 | ForEach-Object { # 按空格分割,最多分成3部分(处理名称含空格的情况) $splitLine = $_ -split '\s+', 3 [PSCustomObject]@{ Name = $splitLine[0] State = $splitLine[1] Version = $splitLine[2] } } | Where-Object State -eq 'Running' | Select-Object Name
执行后会只输出运行中虚拟机的名称。
方法3:借助WSL的grep命令
如果你的WSL环境已安装grep,可以直接在管道中调用WSL的grep工具筛选:
# 包含表头 wsl -l -v | wsl grep Running # 只显示运行中的虚拟机 wsl -l -v | Select-Object -Skip 1 | wsl grep Running
内容的提问来源于stack exchange,提问作者abhijit
相关产品推荐
相关产品推荐

