首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Powershell管道输出放入不支持管道输入(多个参数)的命令中?

如何将Powershell管道输出放入不支持管道输入(多个参数)的命令中?
EN

Stack Overflow用户
提问于 2020-08-07 04:43:01
回答 2查看 55关注 0票数 0

我正在尝试使用Powershell获取过期巧克力包的列表,并将它们填充到choco upgrade命令中,该命令获取一个以空格分隔的列表:choco upgrade <pkg> [<pkg2 <pkgN>]

下面是获取和格式化列表所需的内容:

代码语言:javascript
复制
PS C:\WINDOWS\system32> (choco outdated -r | %{$_.split('|')[0]}) -join ' '
google-drive-file-stream intel-dsa malwarebytes paint.net powertoys zoom

仅仅添加| choco upgrade是不可能的,因为它不接受管道输入。因此,我想插入管道的结果,就像它是命令的参数一样,就像我刚刚输入了以下内容:

choco upgrade google-drive-file-stream intel-dsa malwarebytes paint.net powertoys zoom

以下是我最好的猜测:

(choco outdated -r | %{$_.split('|')[0]}) -join ' ' | %{choco upgrade $_}

choco upgrade ((choco outdated -r | %{$_.split('|')[0]}) -join ' ')

但看起来他们将整个列表作为一个参数插入,包括空格:

代码语言:javascript
复制
PS C:\WINDOWS\system32> choco upgrade ((choco outdated -r | %{$_.split('|')[0]} | Select-Object -skiplast 1) -join ' ')
Chocolatey v0.10.15
Upgrading the following packages:
google-drive-file-stream intel-dsa malwarebytes paint.net powertoys
By upgrading you accept licenses for the packages.
google-drive-file-stream intel-dsa malwarebytes paint.net powertoys is not installed. Installing...
google-drive-file-stream intel-dsa malwarebytes paint.net powertoys not installed. The package was not found with the source(s) listed.

如何插入所有这些值,就像它们是单独的参数一样?

(我的目标是一行。我感兴趣的是一种PS惯用的方式,但任何有效的技巧都是有效的。)

EN

回答 2

Stack Overflow用户

发布于 2020-08-07 05:29:51

似乎只将(choco outdated -r | %{$_.split('|')[0]}) -join ' ')作为一个参数。

尽量避免invoke-Expression的问题:

代码语言:javascript
复制
iex "choco upgrade $((choco outdated -r | %{$_.split('|')[0]}) -join ' ')"

注意:我已经在我的计算机上成功地使用了以下命令:

代码语言:javascript
复制
iex "choco upgrade $((choco outdated -r | %{ ($_ -split "\.install|\|")[0] }) -join " ") -y"
票数 1
EN

Stack Overflow用户

发布于 2020-08-07 11:59:47

将参数作为数组传递是可行的:

代码语言:javascript
复制
$myargs = '/i','hi'
echo Hi | findstr $myargs

Hi

因此,将第一个输出保留为数组:

代码语言:javascript
复制
choco upgrade (choco outdated -r | %{$_.split('|')[0]})

代码语言:javascript
复制
choco upgrade ((choco outdated -r) -replace '\|.*')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63291473

复制
相关文章

相似问题

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