2017-04-02 3 views
4

appel clist -l me donne une liste des paquets avec les versions:Comment obtenir une liste de paquets d'une machine et installer dans une autre avec chocolatey?

7zip.install 16.04 
ccleaner 5.28.6005 
ConEmu 17.3.16.0 
... 

Comment puis-je obtenir cette liste sans informations sur la version?

Mon intention est d'utiliser cette sortie pour appeler choco install 7zip.install ccleaner ConEmu ... dans une autre machine. Une réponse alternative pourrait être comment utiliser la sortie de clist directement dans cinst.

Répondre

4

Si vous avez un oeil à l'information d'aide pour la commande choco install (vous pouvez le faire en utilisant chcco install -h, vous trouverez l'utilisation suivante:

choco install <pkg|packages.config> [<pkg2> <pkgN>] [<options/switches>] cinst <pkg|packages.config> [<pkg2> <pkgN>] [<options/switches>]

Comme vous le verrez, il est possible de . passer un fichier packages.config, qui contiendrait tous les paquets que vous souhaitez installer le format de ce fichier packages.config est très simple, et ressemble à ce qui suit:

<?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> 

une fois que vous h Ave ce fichier, l'installation de tous les paquets à nouveau sur une autre machine est une simple commande d'une ligne.

Un moyen simple de générer ce fichier packages.config serait d'installer ChocolateyGUI (choco install chocolateygui), qui inclut une option pour exporter la liste des applications actuellement installée.

+1

Finalement, il s'agira d'une commande que vous pouvez exécuter pour exporter la liste. – ferventcoder

+1

@ferventcoder J'espérais qu'il y avait un simple clist -b, analogue à dir/b où seul le nom du paquet viendrait. Cela rendrait les choses tellement plus simples. – Natan

1

Puisque vous voulez omettre la version i utilisé la mise à niveau 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 

Comme Gary a suggéré un fichier de configuration peut être une solution plus facile à entretenir. Je mets en place mes configs sur un serveur web pour que je puisse juste sheller et exécuter une commande pour tout installer et avoir la possibilité de faire une simple feuille de style xsl pour la visualisation.

cinst -y $(([xml](Invoke-WebRequest -Uri http://softwareList.config)).packages.package | Select id).id 

ou vous pouvez simplement l'enregistrer localement et appeler toutes les informations

(iwr -Uri http://softwareList.config).content | Out-File "$($env:LOCALAPPDATA)\list.config" -Encoding utf8; 
cinst "$($env:LOCALAPPDATA)\list.config -y 
0

chocolaté ne fournit pas cette commande. La question (plus les exigences supplémentaires que vous avez mentionnées) ne peut être résolue qu'avec une solution ETL. Il n'y a pas de commande pour accomplir cette proposition.

Un script .ps1 fonctionnerait correctement. Cela étant dit, en supprimant la version, vous sautez quelques paquets vers la dernière version publiée sur le serveur cible. Si vous avez besoin d'un clone des installations, vous devrez également utiliser les versions.

0

Je suis en retard à la fête, mais au cas où quelqu'un revient à cela, voici comment je packages.config mon généré:

$packageXml = '' 
choco list -lo -r | % { $_ -split '\|' | select -first 1 } | % { $packageXml += "`n`t<package Id=""$_"" />" } 
Set-Content "<packages>$packageXml`n</packages>" .\packages.config 

Une fois que vous avez, vous prenez ce fichier à l'autre machine et faire:

choco install packages.config 
1

C'était la solution de mon pauvre-homme au même problème, à savoirprenez tous les paquets de chocolat sur une machine et installez-les sur un autre, sans vous soucier des versions spécifiques (c'est-à-dire que je veux les dernières versions).

  1. Utilisez le bouton d'exportation sur Chocolatement-GUI pour enregistrer un fichier packages.config (à un lecteur réseau partagé)
  2. Modifier ce fichier .config et supprimer les version="X.Y.Z" champs de chaque <package ... /> ligne
  3. sur la nouvelle machine run choco install \\mypc\shared\packages.config -y

Par exemple, mon fichier packages.config modifié ressemble à ceci:

<?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. Ne faites pas la même erreur que moi: j'ai utilisé une simple expression régulière dans Notepad ++ pour supprimer toutes les entrées version="1.1.1" et par inadvertance supprimé le même champ de la première ligne <?xml ... ?>. Cela casse le fichier XML. Soyez plus prudent/intelligent que moi!