Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何匹配powershell中的wsl输出?_Powershell_Select String - Fatal编程技术网

如何匹配powershell中的wsl输出?

如何匹配powershell中的wsl输出?,powershell,select-string,Powershell,Select String,我想查看是否正在运行特定的wsl发行版(Windows 10 Home,wsl 2): 没有输出。我使用Get Member查看输出是一个字符串;如果我通过类似于| Out String-stream的方式运行它,则没有什么区别 我可以用Select String.或Select String.*获得匹配,但它匹配所有内容,这没有帮助 是的,我想看看是否有使用特定名称的发行版。在PowerShell中有更好的方法吗?令人费解的是,wsl--list--running产生UTF-16LE编码(“U

我想查看是否正在运行特定的wsl发行版(Windows 10 Home,wsl 2):

没有输出。我使用
Get Member
查看输出是一个字符串;如果我通过类似于
| Out String-stream
的方式运行它,则没有什么区别

我可以用
Select String.
Select String.*
获得匹配,但它匹配所有内容,这没有帮助


是的,我想看看是否有使用特定名称的发行版。在PowerShell中有更好的方法吗?

令人费解的是,
wsl--list--running
产生UTF-16LE编码(“Unicode”-编码的)输出,而不是遵循控制台(OEM)的代码页

一个快速而肮脏的解决方法是使用以下方法:假设所有正在运行的发行版都只使用ASCII范围字符(这似乎很可能):

(wsl--list--running)-replace“`0”| Select String-Pattern MyDistro
支持所有Unicode字符的适当解决方案需要付出更多努力:

$prev=[Console]::输出编码;[控制台]::outputeneCoding=[System.Text.Encoding]::Unicode
wsl--列表--运行|选择字符串模式MyDistro
[控制台]::outputeneCoding=$prev
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>