我正在尝试使用Powershell获取过期巧克力包的列表,并将它们填充到choco upgrade命令中,该命令获取一个以空格分隔的列表:choco upgrade <pkg> [<pkg2 <pkgN>]。
下面是获取和格式化列表所需的内容:
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 ' ')
但看起来他们将整个列表作为一个参数插入,包括空格:
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惯用的方式,但任何有效的技巧都是有效的。)
发布于 2020-08-07 05:29:51
似乎只将(choco outdated -r | %{$_.split('|')[0]}) -join ' ')作为一个参数。
尽量避免invoke-Expression的问题:
iex "choco upgrade $((choco outdated -r | %{$_.split('|')[0]}) -join ' ')"注意:我已经在我的计算机上成功地使用了以下命令:
iex "choco upgrade $((choco outdated -r | %{ ($_ -split "\.install|\|")[0] }) -join " ") -y"发布于 2020-08-07 11:59:47
将参数作为数组传递是可行的:
$myargs = '/i','hi'
echo Hi | findstr $myargs
Hi因此,将第一个输出保留为数组:
choco upgrade (choco outdated -r | %{$_.split('|')[0]})或
choco upgrade ((choco outdated -r) -replace '\|.*')https://stackoverflow.com/questions/63291473
复制相似问题