@@ -25,39 +25,47 @@ function Install-NugetPackage {
25
25
$packageInfoObject = $packageInfoResponse.Content | ConvertFrom-Json
26
26
$packageInfo = $packageInfoObject.data | Select-Object - First 1
27
27
if (-Not $packageInfo ) {
28
- Write-PSFMessage - Level Critical - Message " Package $Name was not found"
28
+ Stop-PSFFunction - Message " Package $Name was not found"
29
29
}
30
30
$packageName = $packageInfo.id
31
31
$packageLowerName = $packageName.ToLower ()
32
-
33
- # get package versions
34
- $baseAddressUrl = $indexObject.resources | Where-Object { $_ .' @type' -eq ' PackageBaseAddress/3.0.0' } | Select-Object - First 1
35
- $packageVersions = Invoke-WebRequest - Uri " $ ( $baseAddressUrl .' @id' ) $packageLowerName /index.json" - ErrorAction Stop
36
- $packageVersionsObject = $packageVersions.Content | ConvertFrom-Json
37
- [array ]$versionList = $packageVersionsObject.Versions
38
- Write-PSFMessage - Level Verbose - Message " Found a total of $ ( $versionList.Count ) versions of $packageName "
39
-
40
- # filter out the versions we don't need based on parameters
41
- if ($SkipPreRelease ) {
42
- $versionList = $versionList | Where-Object { try { [version ]$_ } catch { $false } }
43
- }
44
- if ($MinimumVersion ) {
45
- $versionList = $versionList | Where-Object { $_ -ge $MinimumVersion }
46
- }
47
- if ($MaximumVersion ) {
48
- $versionList = $versionList | Where-Object { $_ -le $MaximumVersion }
49
- }
50
32
if ($RequiredVersion ) {
51
- $versionList = $versionList | Where-Object { $_ -eq $RequiredVersion }
33
+ $versionList = @ ($RequiredVersion )
34
+ Write-PSFMessage - Level Verbose - Message " Using RequiredVersion $RequiredVersion of $packageName "
35
+ }
36
+ else {
37
+ [array ]$versionList = $packageInfo.versions.version
38
+ Write-PSFMessage - Level Verbose - Message " Found a total of $ ( $versionList.Count ) versions of $packageName "
39
+
40
+ # filter out the versions we don't need based on parameters
41
+ if ($versionList -and $MinimumVersion ) {
42
+ $position = $versionList.IndexOf ($MinimumVersion )
43
+ if ($position -eq -1 ) {
44
+ $versionList = $versionList | Where-Object { try { [version ]$_ -ge $MinimumVersion } catch { $false } }
45
+ }
46
+ else {
47
+ $versionList = $versionList [$position .. ($versionList.Count - 1 )]
48
+ }
49
+ }
50
+ if ($versionList -and $MaximumVersion ) {
51
+ $position = $versionList.IndexOf ($MaximumVersion )
52
+ if ($position -eq -1 ) {
53
+ $versionList = $versionList | Where-Object { try { [version ]$_ -le $MaximumVersion } catch { $false } }
54
+ }
55
+ else {
56
+ $versionList = $versionList [0 .. $position ]
57
+ }
58
+ }
59
+ Write-PSFMessage - Level Verbose - Message " $ ( $versionList.Count ) versions left after applying filters"
52
60
}
53
- Write-PSFMessage - Level Verbose - Message " $ ( $versionList .Count ) versions left after applying filters "
54
- $selectedVersion = $versionList | Sort-Object - Descending | Select-Object - First 1
61
+
62
+ $selectedVersion = $versionList | Select-Object - Last 1
55
63
if (-Not $selectedVersion ) {
56
- Write-PSFMessage - Level Critical - Message " Version could not be found using current parameters" - EnableException $true
64
+ Stop-PSFFunction - Message " Version could not be found using current parameters" - EnableException $true
57
65
}
58
66
59
67
# download and extract the files
60
- Write-PSFMessage - Level Verbose - Message " Downloading version $selectedVersion of $packageName "
68
+ Write-PSFMessage - Level Verbose - Message " Version $selectedVersion of $packageName was selected "
61
69
$fileName = " $packageName .$selectedVersion .nupkg"
62
70
# Path reference: https://github.com/OneGet/oneget/blob/master/src/Microsoft.PackageManagement/Utility/Platform/OSInformation.cs
63
71
$scopePath = switch ($Scope ) {
@@ -75,26 +83,35 @@ function Install-NugetPackage {
75
83
}
76
84
}
77
85
$path = Join-PSFPath $scopePath " $packageName .$selectedVersion "
78
- $folder = New-Item - ItemType Directory - Path $path - Force
79
86
$packagePath = Join-PSFPath $path $fileName
80
- if ((Test-Path $packagePath ) -and -Not $Force ) {
81
- Write-PSFMessage - Level Critical - Message " File $packagePath already exists at destination" - EnableException $true
82
- }
83
- $downloadUrl = " $ ( $baseAddressUrl .' @id' ) $packageLowerName /$selectedVersion /$fileName "
84
- Invoke-WebRequest - Uri $downloadUrl - OutFile $packagePath - ErrorAction Stop
85
- Write-PSFMessage - Level Verbose - Message " Extracting $fileName to $folder "
86
- if ($isCoreCLR ) {
87
- [System.IO.Compression.ZipFile ]::ExtractToDirectory($packagePath , $folder , $true )
88
- }
89
- else {
90
- [System.IO.Compression.ZipFile ]::ExtractToDirectory($packagePath , $folder )
91
- }
87
+ if ($PSCmdlet.ShouldProcess ($fileName , " Download package" )) {
88
+ if (Test-Path $path ) {
89
+ if ($Force ) {
90
+ Remove-Item $path - Recurse - Force
91
+ }
92
+ else {
93
+ Write-PSFMessage - Level Critical - Message " $packageName .$selectedVersion already exists at destination" - EnableException $true
94
+ }
95
+ }
96
+ $folder = New-Item - ItemType Directory - Path $path - Force
97
+
98
+ $baseAddressUrl = $indexObject.resources | Where-Object { $_ .' @type' -eq ' PackageBaseAddress/3.0.0' } | Select-Object - First 1
99
+ $downloadUrl = " $ ( $baseAddressUrl .' @id' ) $packageLowerName /$selectedVersion /$fileName "
100
+ Invoke-WebRequest - Uri $downloadUrl - OutFile $packagePath - ErrorAction Stop
101
+ Write-PSFMessage - Level Verbose - Message " Extracting $fileName to $folder "
102
+ if ($isCoreCLR ) {
103
+ [System.IO.Compression.ZipFile ]::ExtractToDirectory($packagePath , $folder , $true )
104
+ }
105
+ else {
106
+ [System.IO.Compression.ZipFile ]::ExtractToDirectory($packagePath , $folder )
107
+ }
92
108
93
- # return output
94
- [PSCustomObject ]@ {
95
- Name = $packageName
96
- Source = $packagePath
97
- Version = $selectedVersion
98
- Uri = $downloadUrl
99
- } | Select-Object *
109
+ # return output
110
+ [PSCustomObject ]@ {
111
+ Name = $packageName
112
+ Source = $packagePath
113
+ Version = $selectedVersion
114
+ Uri = $downloadUrl
115
+ } | Select-Object *
116
+ }
100
117
}
0 commit comments