Last active
March 19, 2024 23:25
-
-
Save bevand/e5325035a31c281f4532e330005216cc to your computer and use it in GitHub Desktop.
Powershell script to download all packages from a nuget feed
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$destinationDirectory = "C:\LocalNuGetTest\" | |
$webClient = New-Object System.Net.WebClient | |
$webClient.Credentials = New-Object System.Net.NetworkCredential("USERNAME", "PASSWORD") | |
$feed =[xml]$webClient.DownloadString("https://hostednugetfeed.com/custom-feed/nuget/v2/Packages") | |
$records = $feed | select -ExpandProperty feed | select -ExpandProperty entry #| select -ExpandProperty content | |
for ($i=0; $i -lt $records.Length; $i++) { | |
$content = $records[$i] | select -ExpandProperty content | |
$properties = $records[$i] | select -ExpandProperty properties | |
$title = $records[$i].title.'#text' | |
$url = $content.src | |
$startOfQuery = $url.IndexOf("?id=") + 4 | |
$fileName = $url.Substring($startOfQuery, $url.Length - $startOfQuery) | |
$fullPath = ($destinationDirectory + "" + $fileName) | |
$webClient.DownloadFile($content.src, ($destinationDirectory + "" + $title + "." + $properties.Version + ".nupkg")) | |
} |
Interesting! However this only downloads 100 first nupkgs when I use this URL: https://www.powershellgallery.com/api/v2/Packages
Is there a way to make the script crawl the entire repository?
Yes, @EricSP2, and for anyone else wondering, there are ref links which will give you the next batch. Something like this:
$r = Invoke-WebRequest -uri "https://example.com/nuget/api/v2/Packages"
$RequestContent = [xml] $r
$NextLink = $RequestContent.feed.link.href[1]
Invoke-WebRequest -Uri "$NextLink"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I created a modified version for MyGet, this script also pulls symbol packages (if available) and can work with multiple feeds
this is tested with powershell 6, should work with 5 if you register a v2 feed endpoint...
$Token = "xxxxxx-xxxxxx-xxxxxx-xxxx"
$WebClient = New-Object System.Net.WebClient
$Feeds = "a","b","c"
New-Item -Name "feeds" -Type 'directory' -Force
ForEach ($Feed in $Feeds) {
Register-PackageSource "${Feed}" -Location "https://stylelabs.myget.org/F/${Feed}/auth/${Token}/api/v3/index.json" -Trusted -ProviderName NuGet -Force
New-Item -Name ".\feeds${Feed}" -Type 'directory' -Force
Find-Package -AllowPrereleaseVersions -AllVersions -Source "${Feed}" | ForEach-Object {
}