Download Google.Protobuf/3.1.0 nuget packages to local machine using powershell

I have got this below script in below blog which will Download all nuget packages to my local server using power-shell script. I have used same script to download Google.Protobuf/3.1.0 Nuget packages to local drive.

PS-1 script from blog-

# --- settings --- 
$feedUrlBase = "https://www.nuget.org/packages/Google.Protobuf/3.1.0/" 
# the rest will be params when converting to funclet 
$latest = $true 
$overwrite = $false 
$top = 5 #use $top = $null to grab all or a number to get TOP 500 packages 
# $destinationDirectory = join-path ([Environment]::GetFolderPath("MyDocuments")) "NuGetLocal" 
$destinationDirectory = "D:\test"

# --- locals --- 
$webClient = New-Object System.Net.WebClient

# --- functions ---

# download entries on a page, recursively called for page continuations 
function DownloadEntries { 
param ([string]$feedUrl) 
$feed = [xml]$webClient.DownloadString($feedUrl) 
$entries = $feed.feed.entry 
$progress = 0 

foreach ($entry in $entries) { 
    $url = $entry.content.src 
    $fileName = $entry.properties.id + "." + $entry.properties.version + ".nupkg" 
    $saveFileName = join-path $destinationDirectory $fileName 
    $pagepercent = ((++$progress)/$entries.Length*100) 
    if ((-not $overwrite) -and (Test-Path -path $saveFileName)) 
    { 
        write-progress -activity "$fileName already downloaded" -status "$pagepercent% of current page complete" -percentcomplete $pagepercent 
        continue 
    } 
    write-progress -activity "Downloading $fileName" -status "$pagepercent% of current page complete" -percentcomplete $pagepercent

    [int]$trials = 0 
    do { 
        try { 
            $trials +=1 
            $webClient.DownloadFile($url, $saveFileName) 
            break 
        } catch [System.Net.WebException] { 
            write-host "Problem downloading $url `tTrial $trials `n`tException: " $_.Exception.Message 
        } 
    } 
    while ($trials -lt 3) 
  }

  $link = $feed.feed.link | where { $_.rel.startsWith("next") } | select href 
  if ($link -ne $null) { 
    # if using a paged url with a $skiptoken like 
    # http:// ... /Packages?$skiptoken='EnyimMemcached-log4net','2.7' 
    # remember that you need to escape the $ in powershell with ` 
    return $link.href 
  } 
  return $null 
}

# the NuGet feed uses a fwlink which redirects 
# using this to follow the redirect 
function GetPackageUrl { 
param ([string]$feedUrlBase) 
$resp = [xml]$webClient.DownloadString($feedUrlBase) 
return $resp.service.GetAttribute("xml:base") 
}

# --- do the actual work ---

# if dest dir doesn't exist, create it 
if (!(Test-Path -path $destinationDirectory)) { 
    New-Item $destinationDirectory -type directory 
}

# set up feed URL 
$feedUrl = "http://packages.nuget.org/v1/FeedService.svc/Packages"
if($latest) { 
    $feedUrl = $feedUrl + "?`$filter=IsLatestVersion eq true" 
    if($top -ne $null) { 
        $feedUrl = $feedUrl + "&`$orderby=DownloadCount desc&`$top=$top" 
    } 
}

while($feedUrl -ne $null) { 
    $feedUrl = DownloadEntries $feedUrl 
}

PS1- Error Logs-

    Problem downloading http://packages.nuget.org/api/v1/package/Newtonsoft.Json/10.0.1     Trial 1 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Newtonsoft.Json/10.0.1     Trial 2 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Newtonsoft.Json/10.0.1     Trial 3 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/jQuery/3.1.1   Trial 1 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/jQuery/3.1.1   Trial 2 
    Exception:  The operation has timed out
Problem downloading http://packages.nuget.org/api/v1/package/jQuery/3.1.1   Trial 3 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/EntityFramework/6.1.3  Trial 1 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/EntityFramework/6.1.3  Trial 2 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/EntityFramework/6.1.3  Trial 3 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Microsoft.AspNet.Mvc/5.2.3     Trial 1 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Microsoft.AspNet.Mvc/5.2.3     Trial 2 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Microsoft.AspNet.Mvc/5.2.3     Trial 3 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Microsoft.AspNet.Razor/3.2.3   Trial 1 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Microsoft.AspNet.Razor/3.2.3   Trial 2 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Problem downloading http://packages.nuget.org/api/v1/package/Microsoft.AspNet.Razor/3.2.3   Trial 3 
    Exception:  The underlying connection was closed: An unexpected error occurred on a receive.
Jon Skeet
people
quotationmark

https://www.nuget.org/packages/Google.Protobuf/3.1.0/ isn't a feed URL base - that's a page for a specific package.

It looks to me like this:

$serviceBase = GetPackageUrl($feedUrlBase) 
$feedUrl = $serviceBase + "Packages"

can just be replaced with

$feedUrl = "http://packages.nuget.org/v1/FeedService.svc/Packages"

... if you're happy to restrict yourself to nuget.org.

people

See more on this question at Stackoverflow