调用clist -l给我一个包含版本的包列表:
7zip.install 16.04
ccleaner 5.28.6005
ConEmu 17.3.16.0
...
Run Code Online (Sandbox Code Playgroud)
如何在没有版本信息的情况下获取此列表?
我的目的是使用此输出来调用choco install 7zip.install ccleaner ConEmu ...另一台机器.另一种答案可能是如何clist直接使用输出cinst.
小智 28
导出功能终于实现了 -文档链接
除了官方版本之外,我不建议使用任何其他版本,但是,具有导出功能的分支可以在这里找到。
您可以在目录中运行build.bat并使用。然后你可以输入choco.exebuild_output
choco export -o="'c:\temp\packages.config'" --include-version-numbers --allowunofficial
Run Code Online (Sandbox Code Playgroud)
创建导出文件。
Gar*_*ark 18
如果您查看该choco install命令的帮助信息(您可以使用此命令chcco install -h,您将找到以下用法:
choco install chocolateygui
正如您将看到的,可以传递一个packages.config文件,该文件将包含您要安装的所有软件包.这个packages.config文件的格式非常简单,如下所示:
cinst <pkg|packages.config> [<pkg2> <pkgN>] [<options/switches>]
Run Code Online (Sandbox Code Playgroud)
获得此文件后,在另一台计算机上再次安装所有软件包是一个简单的单行命令.
生成这个packages.config文件的一种简单方法是安装ChocolateyGUI(choco install),其中包含一个导出当前安装的应用程序列表的选项.
Ben*_*rds 16
这是我生成packages.config的方式:
$packageXml = ''
choco list -lo -r | % { $_ -split '\|' | select -first 1 } | % { $packageXml += "`n`t<package id=""$_"" />" }
Set-Content "<?xml version=`"1.0`" encoding=`"utf-8`"?>`n<packages>$packageXml`n</packages>" -Path .\packages.config
Run Code Online (Sandbox Code Playgroud)
一旦你有了它,你就可以将该文件带到另一台机器上并执行以下操作:
choco install packages.config
Run Code Online (Sandbox Code Playgroud)
这是我的穷人解决同一问题的解决方案,即将所有Chocolatey软件包放在一台计算机上,然后将它们安装在另一台计算机上,而不必担心特定版本(即我想要最新版本)。
version="X.Y.Z"从每一<package ... />行中删除字段。choco install \\mypc\shared\packages.config -y。例如,我编辑的packages.config文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="audacity" />
<package id="autohotkey" />
<package id="autohotkey.install" />
<package id="ccleaner" />
<package id="chocolatey" />
<package id="chocolatey-core.extension" />
<package id="chocolateygui" />
</packages>
Run Code Online (Sandbox Code Playgroud)
PS .:不要犯同样的错误:我在Notepad ++中使用了一个简单的正则表达式来删除所有version="1.1.1"条目,并且无意中从第一<?xml ... ?>行中删除了相同的字段。这会破坏XML文件。比我要小心/聪明!
我想总结一下这篇文章的其他答案给出的两种一般方法。
1. 导出一个简单的包名列表,并用它来构建一个cinst命令。
这与所问的问题一致:如何在clist -l没有版本信息的情况下。
我喜欢 的简单答案clist -l --idonly,但要自动执行此操作,仍然必须考虑第一行和最后一行。因此,可能需要一个简单的脚本——而在 Windows 上,这有点痛苦(这就是为什么甚至会问这个问题的原因)。
如果主要目标是备份和重新安装 Choclatey 软件包,那么有一些不错的选择,而无需编写自己的脚本。因此,下一种解决方案......
2.导出packages.config文件,cinst本地安装即可。
这是一个很好的方法,因为安装packages.config 是由cinst 本身支持的。
不幸的是,Chocolatey 缺乏对导出packages.config 的本地支持。
以下是几种常用的导出packages.config的方法:
有关此方法的背景以及跟踪内置解决方案的进度,请参阅https://github.com/chocolatey/choco/issues/357。
小智 5
由于您想省略版本,因此我使用choco升级:
# Filter for selecting packages, if empty will match all.
# I do this at times to see whats installed for my company packages
$PkgPrefix = ""
$cmd = "cup -y "
Test-WSMan $server | Out-Null
$session = New-PSSession -ComputerName $server -Credential ( Import-Clixml -Path $CredenitalFile ) -Verbose -Authentication Negotiate
$(clist -lo -r --id-starts-with "$PkgPrefix" )| % { $cmd += "$($_.Split( "|" )[0]),"}
Invoke-Command -Session $session -ScriptBlock $cmd
Run Code Online (Sandbox Code Playgroud)
正如Gary所建议的,配置文件可能是更易于维护的解决方案。我将我的配置存储在Web服务器上,因此我可以安装并执行一个命令来安装所有内容,并能够制作一个简单的XSL样式表进行查看。
cinst -y $( ( [xml]( Invoke-WebRequest -Uri http://softwareList.config) ).packages.package | Select id ).id
Run Code Online (Sandbox Code Playgroud)
或者,您可以将其保存在本地,然后使用所有信息进行调用:
(iwr -Uri http://softwareList.config).content | Out-File "$($env:LOCALAPPDATA)\list.config" -Encoding utf8;
cinst "$($env:LOCALAPPDATA)\list.config -y
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6139 次 |
| 最近记录: |