-
-
Save alimbada/449ddf65b4ef9752eff3 to your computer and use it in GitHub Desktop.
#Put this in Export-Chocolatey.ps1 file and run it: | |
#.\Export-Chocolatey.ps1 > packages.config | |
#You can install the packages using | |
#choco install packages.config -y | |
Write-Output "<?xml version=`"1.0`" encoding=`"utf-8`"?>" | |
Write-Output "<packages>" | |
choco list -lo -r -y | % { " <package id=`"$($_.SubString(0, $_.IndexOf("|")))`" version=`"$($_.SubString($_.IndexOf("|") + 1))`" />" } | |
Write-Output "</packages>" |
Here's a version that specifically installs the version
choco list -lo -r -y | % { "choco install " + $_.Replace("|", " -version ") + " -y" }@wolfmagic7 You can just pipe it to a file, something like this:
choco list -lo -r -y | % { "choco install " + $_.Replace("|", " -version ") + " -y" } > Install.ps1And you should be in the directory where you ran the script.
Without version information:
choco list -lo -r -y | % { "choco install " + $_.split('|')[0] + " -y" } > Install.ps1
Thanks for the script. I kept running into a deserialization error on the xml header when installing on the new machine.
<?xml encoding="utf-8"?>
After trying all kinds of stuff, different encoding, including version, excluding encoding etc. etc. Still couldn't user the packages.config to install the packages. Turns out you can just remove the whole xml header and everything install fines :)
So just
<packages>
...
</packages>
Thanks for the script. It would be better to explain some details in comment cause there are some mistakes confused me (cs freshman) for a while.
There are two ways to run the script.
Way 1 : cd to the folder where you create the ps1 file first. And run .\Export-Chocolatey.ps1 > packages.config
instead of Export-Chocolatey.ps1 > packages.config
Way 2 : type the file with specific location instead, such as ~/desktop/Export-Chocolatey.ps1 > packages.config
.
Thanks for the script. It would be better to explain some details in comment cause there are some mistakes confused me (cs freshman) for a while.
There are two ways to run the script.
Way 1 : cd to the folder where you create the ps1 file first. And run.\Export-Chocolatey.ps1 > packages.config
instead ofExport-Chocolatey.ps1 > packages.config
Way 2 : type the file with specific location instead, such as~/desktop/Export-Chocolatey.ps1 > packages.config
.
Thanks for the feedback. I've updated the comments in the script.
Is it possible to export the args/switches used on installation? Or alternatively does choco log the installation commands so I can catch them anywhere? For example when I write
cinstall notepadplusplus --install-args="'/DIR=C:\notepad'"
@WebTiger89 and others may be interested to see the documentation for packages.config:
Just a comment about this feature, and also the ability to install from a package list...
We need the option to omit versions. We will probably want to install the same stuff but with the most recent version.
I created my own take on this kind of system in my own fork. https://gist.github.com/infogulch/0d81c3d4caccf2f1b6a82dc6f6459397
I based the workflow around committing updates to packages.config in git. See the README for details. I even ran the update script for my computer and committed it to demonstrate the intended workflow. You can find this commit in my gist's revisions. (Btw, if you clone your own gist to local you can commit and push back to the gist to update it.)
I disagree Melbourne, versions in packages.config mean you can know exactly what version is installed. Except if it's overwritten every time that information is lost. But if you keep it in a git repo then you get the best of both!
Write-Output "<?xml version=`"1.0`"encoding=`"utf-8`"?>"
Write-Output "<packages>"
choco list -lo -r -y |%{ "<package id=`"$($_.SubString(0,$_.IndexOf("|")))`"version=`"$($_.SubString($_.IndexOf("|") +1))`"/>"}
Write-Output "</packages>"
Out-File -FilePath .\packages.config
I added one line to this little script. Now, when it executes it automatically creates the pachages.config file that can be directly passed to chocolatey .
I've updated the script with @Matty666's suggestions.
Apologies for the tardy response here; GitHub doesn't send notifications for comments on gists.