web-dev-qa-db-fra.com

Comment obtenir la liste des packages d'une machine et l'installer dans une autre avec Chocolatey?

Appeler clist -l me donne une liste de packages avec les versions:

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

Comment obtenir cette liste sans informations de version?

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

25
Natan

Si vous consultez les informations d'aide pour le choco install commande (vous pouvez le faire en utilisant chcco install -h, vous trouverez l'utilisation suivante:

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 packages que vous souhaitez installer. Le format de ce fichier packages.config est très simple et ressemble à ceci:

<?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 avez ce fichier, réinstaller tous les packages 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ées.

21
Gary Ewan Park

C'était la solution de mon pauvre homme au même problème, c'est-à-dire prendre tous les packages Chocolatey sur une machine et les installer sur une autre, sans se soucier des versions spécifiques (c'est-à-dire que je veux les dernières versions).

  1. Utilisez le Export sur Chocolately-GUI pour enregistrer un fichier packages.config (sur un lecteur réseau partagé).
  2. Modifiez ce fichier .config et supprimez le version="X.Y.Z" champs de chaque <package ... /> ligne.
  3. Sur la nouvelle machine, exécutez 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 tous les version="1.1.1" entrées et a supprimé par inadvertance le même champ du premier <?xml ... ?> ligne. Cela casse le fichier XML. Soyez plus prudent/intelligent que moi!

9
Justin

Voici comment j'ai généré mon packages.config:

$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 cela, vous prenez ce fichier sur l'autre machine et faites:

choco install packages.config
7
Ben Richards

Puisque vous voulez omettre la version, j'ai utilisé la mise à niveau de 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 l'a suggéré, un fichier de configuration pourrait être une solution plus facile à maintenir. Je serveur mes configurations sur un serveur Web, je peux donc simplement utiliser Shell et exécuter une commande pour tout installer et avoir la possibilité de créer 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 l'appeler avec toutes les informations:

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

Je voudrais résumer les deux approches générales données par d'autres réponses à ce post.

1. Exportez une liste simple de noms de packages et utilisez-la pour créer une commande cinst.

Ceci est aligné avec la question posée: comment clist -l sans informations de version.

J'aime la réponse simple de clist -l --idonly, mais pour automatiser cela, il faut quand même tenir compte des première et dernière lignes. Donc, un script simple est probablement nécessaire - et sous Windows, c'est un peu pénible (c'est pourquoi cette question est même posée).

Si l'objectif principal est de sauvegarder et de réinstaller les packages Choclatey, il existe de bons choix sans écrire vos propres scripts. D'où le prochain type de solution ...

2. Exportez un fichier packages.config, qui peut être installé par cinst nativement.

C'est une bonne façon de le faire, car l'installation d'un packages.config est prise en charge nativement par cinst.
Malheureusement, Chocolatey n'a pas de support natif pour l'exportation de packages.config.

Voici quelques façons courantes d'exporter packages.config:

Pour le contexte de cette approche et pour suivre les progrès d'une solution intégrée, voir https://github.com/chocolatey/choco/issues/357 .

2
J. Christian

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

Un script .ps1 fonctionnerait bien.

Cela étant dit, en supprimant la version, vous basculerez certains packages vers la dernière version publiée sur le serveur cible. Si vous avez besoin d'un clone des installations, vous devrez également consommer les versions.

1
Brent