PowerShell 5.1中无法在wsl命令的多行输出字符串中匹配子串的问题求助
PowerShell 5.1中无法在wsl命令的多行输出字符串中匹配子串的问题求助
我现在在Windows 11上用PowerShell 5.1,遇到个头疼的问题:想把wsl --list的多行输出存到变量里,然后在这个输出里查找特定子串,但怎么试都匹配不上。
我已经尝试了好几种捕获多行输出的方式:
$cmdOut = (wsl --list)[string]$cmdOut = (wsl --list)$cmdOut = (wsl --list) | Out-String
这些方式得到的变量看起来都是正常的字符串类型:
$cmdOut.getType() # 返回 String $cmdOut.Length # 结果是142 $cmdOut # 输出显示包含"Windows Subsystem for Linux Distributions: [省略后续多行内容]"
但只要尝试匹配子串,结果就不对:
$cmdOut -like '*Linux*' # 返回 False $cmdOut -match '.+ Linux .+' # 返回 False $cmdOut | Select-String 'Linux' -SimpleMatch # 没有任何返回结果
奇怪的是,如果我直接用变量里的第一行静态文本测试,所有匹配方式都能正常工作:
'Windows Subsystem for Linux Distributions' -like '*Linux*' # 返回 True 'Windows Subsystem for Linux Distributions' -match '.+ Linux .+' # 返回 True 'Windows Subsystem for Linux Distributions' | Select-String 'Linux' -SimpleMatch # 返回输入的字符串
我怀疑问题出在多行字符串的编码或者换行符上?查了好多个相关的帖子,试了各种建议还是没解决,有没有大佬能帮我看看问题出在哪,该怎么解决?
内容来源于stack exchange
相关产品推荐
相关产品推荐

