首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell:在所有WSL2 VM上执行命令

PowerShell:在所有WSL2 VM上执行命令
EN

Stack Overflow用户
提问于 2022-05-19 09:16:50
回答 1查看 127关注 0票数 0

我不认为这个问题需要太多的澄清,尤其是当你看到我尝试过的:

代码语言:javascript
复制
wsl -l -q --running | Where{$_ -ne ""} | ForEach {Write-Output "Distro $_"; wsl -d $_ -e ls; Write-Output "/// $_"}

我希望/期望上面的内容在控制台上写"Distro (distribution name)“,然后在那个发行版上执行ls,最后在控制台上为每个活动VM编写"/// (distribution name)”。不起作用的部分是ls -,而不是执行,我从** wsl.获得了通用的帮助消息。

我认为我没有正确地转义一些东西,因为如果我试图通过删除发行版名称参数(即wsl -d -e ls而不是wsl -d $_ -e ls)来故意破坏命令,我就会得到一个合理的错误消息(There is no distribution with the supplied name.),而不是一般的帮助消息。

另一方面,如果我只是在控制台中手动运行wsl -d Ubuntu-20.04 -e ls,它的行为就像预期的那样。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-19 09:56:11

原来我的问题是由wsl引起的。令人惊讶的是,它以一种奇怪的编码方式发出发行版的名字,当它被反馈给它时,它就拒绝了。看看这个:

代码语言:javascript
复制
wsl -l | Format-Hex

我的解决方案(至少目前是这样)只是从wsl的输出中删除空字符:

代码语言:javascript
复制
(wsl -l) -replace "`0", "" | Format-Hex

看起来好多了。

我们只需在我们的原始脚本中使用这个技巧:

代码语言:javascript
复制
(wsl -l -q --running) -replace "`0", "" | Where{$_ -ne ""} | ForEach {Write-Output "Distro $_"; wsl -d $_ -e ls; Write-Output "/// $_"}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72301840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档