Types/OpenPackage.Source/Nuget.ps1
|
<# .SYNOPSIS Gets a Nuget package .DESCRIPTION Gets a Nuget package, given a url. Nuget packages are already Open Packages .EXAMPLE Get-OpenPackage #> param( [Parameter(Mandatory)] [uri]$Nuget, # Any additional headers to pass into a web request. [Alias('Header')] [Collections.IDictionary] $Headers ) if ($nuget.Segments.Count -lt 2) { throw "Not enough information in $nuget" } if ($nuget.Segments[1] -notmatch 'api') { $nuSegments = $NuGet.Segments -replace 'packages', 'api/v2/package' -join '' $nuget = $nuget.Scheme + '://' + $NuGet.DnsSafeHost + $( if ($NuGet.Port -notin 80, 443) { ":$($NuGet.Port)" } ) + $nuSegments } if ($nuget.Segments[1] -match 'api') { if ($headers) { $downloadPackage = Invoke-WebRequest -Uri $nuget -Headers $Headers } else { $downloadPackage = Invoke-WebRequest -Uri $nuget } if ($downloadPackage.Content -is [byte[]]) { $memoryStream = [IO.MemoryStream]::new($downloadPackage.Content) $nugetPackage = [IO.Packaging.Package]::Open($memoryStream, 'OpenOrCreate', 'ReadWrite') $nugetPackage | Add-Member NoteProperty MemoryStream $memoryStream -Force $nugetPackage } } else { throw "Could not convert $($NuGet) to a package URL" return } |