2017-04-02 96 views

回答

4

如果你看看爲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),它包括一個選項來導出當前安裝的應用程序列表。

+1

最終,這將是您可以運行以導出列表的命令。 – ferventcoder

+1

@ferventcoder我希望有一個簡單的clist -b,類似於dir/b,只有包名會出現。會讓事情變得如此簡單。 – Natan

1

既然你想省略的版本,我用的巧克力升級

#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 
0

的巧克力把它不提供該命令。這個問題(加上你提到的附加要求)只能用ETL解決方案來回答。沒有命令來完成這個建議。

.ps1腳本可以正常工作。

也就是說,通過刪除版本,您將跳到一些包到目標服務器上最新發布的版本。如果你需要安裝的克隆,你也需要使用這些版本。

0

,我遲到了,但萬一有人回來到這一點,這是我如何生成我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 
1

這是我的窮人的解決同樣的問題,即把所有的巧克力包放在一臺機器上,並將它們安裝在另一臺機器上,而不用擔心特定的版本(即我想要最新版本)。

  1. 使用上Chocolately的GUI的出口按鈕來保存一個packages.config文件(到共享網絡驅動器)
  2. 編輯該.config文件,並且從每個<package ... />線取出version="X.Y.Z"字段
  3. 在新機器運行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文件。比我更小心/更聰明!

相關問題