今天,我只是想检查Windows工作站上是否安装了特定的子系统。
因此,我正在使用Windows Linux子系统(WSL),并安装Microsoft Store提供的Ubuntu。
现在,我正在尝试一种方法来检查它是否以编程方式安装。
,我得到以下输出:

PS C:\> wsl -l -v
NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
而且我需要知道是否安装了“Ubuntu-20.04”。
我已经尝试了很多东西,但是没有什么比这更有趣:
$state = wsl -l -v
if($state -like '*Ubuntu*') {
      Write-Host 'Installed'
} else {
      Write-Host 'Nope'
}
但是没有用。
你有我的头绪吗?
感谢大家 !

最佳答案

这似乎是一个编码问题。字符串中有(不可见)空字符。我仍在尝试找出处理它的最佳方法。
同时...这里有一个快速修复:

$state = (wsl -l -v) -replace "\x00",""
更新
另一个解决方法,但这将更改整个 session 的编码:
[System.Console]::OutputEncoding = [System.Text.Encoding]::Unicode

关于powershell - Powershell-奇怪的WSL输出字符串编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64104790/

10-11 08:48