調用clist -l
給我包與版本的列表:如何從一臺機器上獲取軟件包列表並在另一臺機器上安裝巧克力?
7zip.install 16.04
ccleaner 5.28.6005
ConEmu 17.3.16.0
...
我如何獲得這個名單中,沒有版本信息?
我的意圖是使用此輸出在另一臺機器中調用choco install 7zip.install ccleaner ConEmu ...
。一個替代答案可能是如何將clist
的輸出直接用於cinst
。
調用clist -l
給我包與版本的列表:如何從一臺機器上獲取軟件包列表並在另一臺機器上安裝巧克力?
7zip.install 16.04
ccleaner 5.28.6005
ConEmu 17.3.16.0
...
我如何獲得這個名單中,沒有版本信息?
我的意圖是使用此輸出在另一臺機器中調用choco install 7zip.install ccleaner ConEmu ...
。一個替代答案可能是如何將clist
的輸出直接用於cinst
。
如果你看看爲choco install
命令的幫助(你可以做到這一點使用chcco install -h
,你會發現下面的用法:
choco install <pkg|packages.config> [<pkg2> <pkgN>] [<options/switches>] cinst <pkg|packages.config> [<pkg2> <pkgN>] [<options/switches>]
正如你所看到的,有可能。通過一個packages.config文件,其中將包含所有你想要安裝的軟件包此packages.config文件的格式非常簡單,看起來像下面這樣:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="calibre" version="2.81.0" />
<package id="chocolatey" version="0.10.3" />
<package id="chocolatey.extension" version="1.9.6" />
<package id="chocolatey-core.extension" version="1.1.0" />
</packages>
一旦你^ h將這個文件重新安裝到另一臺機器上是一個簡單的一行命令。
生成這個packages.config文件的一個簡單方法是安裝ChocolateyGUI(choco install chocolateygui
),它包括一個選項來導出當前安裝的應用程序列表。
既然你想省略的版本,我用的巧克力升級
#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
由於加里建議配置文件可能是一個簡單的解決方案,以維護。我服務器上的配置在網絡服務器上,所以我可以在shell中執行一個命令來安裝所有東西,並有能力製作一個簡單的xsl樣式表進行查看。
cinst -y $(([xml](Invoke-WebRequest -Uri http://softwareList.config)).packages.package | Select id).id
,或者你可以只保存在本地,並與所有的信息
(iwr -Uri http://softwareList.config).content | Out-File "$($env:LOCALAPPDATA)\list.config" -Encoding utf8;
cinst "$($env:LOCALAPPDATA)\list.config -y
的巧克力把它不提供該命令。這個問題(加上你提到的附加要求)只能用ETL解決方案來回答。沒有命令來完成這個建議。
.ps1腳本可以正常工作。
也就是說,通過刪除版本,您將跳到一些包到目標服務器上最新發布的版本。如果你需要安裝的克隆,你也需要使用這些版本。
,我遲到了,但萬一有人回來到這一點,這是我如何生成我packages.config:
$packageXml = ''
choco list -lo -r | % { $_ -split '\|' | select -first 1 } | % { $packageXml += "`n`t<package Id=""$_"" />" }
Set-Content "<packages>$packageXml`n</packages>" .\packages.config
一旦你的,你把這個文件到其他機器上並做:
choco install packages.config
這是我的窮人的解決同樣的問題,即把所有的巧克力包放在一臺機器上,並將它們安裝在另一臺機器上,而不用擔心特定的版本(即我想要最新版本)。
<package ... />
線取出version="X.Y.Z"
字段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>
PS。不要犯同樣的錯誤:我在Notepad ++中使用簡單的正則表達式來刪除所有version="1.1.1"
條目,並無意中從第一條<?xml ... ?>
行中刪除了相同的字段。這打破了XML文件。比我更小心/更聰明!
最終,這將是您可以運行以導出列表的命令。 – ferventcoder
@ferventcoder我希望有一個簡單的clist -b,類似於dir/b,只有包名會出現。會讓事情變得如此簡單。 – Natan