@@ -21,15 +21,18 @@ param(
21
21
[Parameter (ParameterSetName = ' Scope' , Mandatory = $true , Position = 0 )]
22
22
[ValidateSet (" AzureRMAndDependencies" , " AzureAndDependencies" , " NetCoreModules" , " AzureStackAndDependencies" )]
23
23
[string ] $scope ,
24
- [Parameter (ParameterSetName = ' ModuleList' , Mandatory = $false )]
24
+ [Parameter (ParameterSetName = ' ModuleList' , Mandatory = $true )]
25
25
[string []] $listOfModules ,
26
+ [Parameter (ParameterSetName = ' ModulesAndVersionsList' , Mandatory = $true )]
27
+ [hashtable []] $moduleVersionTable ,
26
28
[Parameter (Mandatory = $false )]
27
- [ValidateSet (" TestGallery" , " PSGallery" )]
28
29
[string ] $repoName ,
29
30
[Parameter (Mandatory = $false )]
30
31
[string ] $nugetExe ,
31
32
[Parameter (Mandatory = $false )]
32
- [string ] $apiKey
33
+ [string ] $apiKey ,
34
+ [Parameter (Mandatory = $false )]
35
+ [switch ] $Force
33
36
)
34
37
35
38
function Get-TargetModules
@@ -38,22 +41,28 @@ function Get-TargetModules
38
41
param
39
42
(
40
43
[string ]$scope ,
41
- [string []]$moduleList
44
+ [string []]$moduleList ,
45
+ [hashtable []]$moduleVersionTable
42
46
)
43
47
48
+ $targets = @ ()
49
+
44
50
if ($listOfModules.Count -ge 1 )
45
51
{
46
- $targets = @ ()
47
52
$moduleList | ForEach-Object {
48
53
$targets += Find-Module - Name $_ - Repository $repoName
49
54
}
55
+ }
50
56
51
- return $targets
57
+ elseif ($moduleVersionTable.Count -ge 1 )
58
+ {
59
+ $moduleVersionTable | ForEach-Object {
60
+ $targets += Find-Module - Name $_.Module - RequiredVersion $_.Version - Repository $repoName
61
+ }
52
62
}
53
63
54
64
else
55
65
{
56
- $targets = @ ()
57
66
$query = " "
58
67
if ($scope -eq " AzureRMAndDependencies" ) {
59
68
$query = " AzureRM"
@@ -84,9 +93,9 @@ function Get-TargetModules
84
93
$targets += $CDModule
85
94
}
86
95
}
87
-
88
- return $targets
89
96
}
97
+
98
+ return $targets
90
99
}
91
100
92
101
function Get-DependentModules
@@ -95,25 +104,19 @@ function Get-DependentModules
95
104
[string ]$repoName ,
96
105
[string ]$moduleName ,
97
106
[string ]$moduleVersion ,
98
- $allModules ,
99
- $azureModules
107
+ [ object []] $allModules ,
108
+ [ object []] $azureModules
100
109
)
101
110
102
111
$dependencies = @ ()
103
112
$azureModules | ForEach-Object {
104
113
$targetName = $_.Name
105
- $moduleNotBeingDeleted = $true
106
- $allModules | ForEach-Object {
107
- if ($_.Name -eq $targetName )
108
- {
109
- $moduleNotBeingDeleted = $false
110
- }
111
- }
114
+ $moduleBeingDeleted = $allModules | Where-Object {$_.Name -eq $targetName }
112
115
113
116
$_.Dependencies | ForEach-Object {
114
117
$dependencyName = $_.Name
115
118
116
- if ($moduleNotBeingDeleted -and ($moduleName -eq $dependencyName ))
119
+ if (( $moduleBeingDeleted -eq $null ) -and ($moduleName -eq $dependencyName ))
117
120
{
118
121
$allTargetVersions = Find-Module - Name $targetName - Repository $repoName - AllVersions
119
122
$allTargetVersions | ForEach-Object {
@@ -130,23 +133,32 @@ function Get-DependentModules
130
133
}
131
134
if ($dependencies.Count -ne 0 )
132
135
{
133
- Write-Warning " $moduleName $moduleVersion is a dependency for $dependencies the module(s) will have an orphaned dependency."
136
+ return " $moduleName $moduleVersion is a dependency for $dependencies the module(s) will have an orphaned dependency. Are you sure you want to unlist this package? "
134
137
}
135
138
}
136
139
137
140
function Get-ApiKey
138
141
{
139
142
param ([string ]$repoName )
140
143
141
- $vaultKey = " PSTestGalleryApiKey"
142
144
if ($repoName -eq " PSGallery" )
143
145
{
144
146
$vaultKey = " PowerShellGalleryApiKey"
145
147
}
148
+
149
+ elseif ($repoName -eq " TestGallery" )
150
+ {
151
+ $vaultKey = " PSTestGalleryApiKey"
152
+ }
153
+
154
+ else
155
+ {
156
+ throw " Must supply ApiKey if not using PSGallery or TestGallery"
157
+ }
146
158
147
159
$context = $null
148
160
try {
149
- $context = Get-AzureRMContext
161
+ $context = Get-AzureRMContext - ErrorAction Stop
150
162
} catch {}
151
163
152
164
if ($context -eq $null )
@@ -171,38 +183,50 @@ if ([string]::IsNullOrEmpty($repoName))
171
183
}
172
184
Write-Host " Deleting modules from the following repository: $repoName "
173
185
174
- $repositoryLocation = " https://dtlgalleryint.cloudapp.net/api/v2/package/"
175
- if ($repoName -eq " PSGallery" )
186
+ if (($repoName -eq " PSGallery" ) -or ([string ]::IsNullOrEmpty($repoName )))
176
187
{
177
188
$repositoryLocation = " https://www.powershellgallery.com/api/v2/package/"
178
189
}
179
190
191
+ elseif ($repoName -eq " TestGallery" )
192
+ {
193
+ $repositoryLocation = " https://dtlgalleryint.cloudapp.net/api/v2/package/"
194
+ }
195
+
196
+ else
197
+ {
198
+ $repositoryLocation = $repoName
199
+ }
200
+
180
201
if ([string ]::IsNullOrEmpty($apiKey ))
181
202
{
182
203
$apiKey = Get-ApiKey - repoName $repoName
183
204
}
184
205
185
- $ModulesToDelete = Get-TargetModules - scope $scope - moduleList $listOfModules
206
+ $ModulesToDelete = Get-TargetModules - scope $scope - moduleList $listOfModules - moduleVersionTable $moduleVersionTable
186
207
$ModulesToDeleteName = $ModulesToDelete | ForEach-Object {$_.Name }
187
- $ModulesToDeleteName
188
208
$azureModules = Find-Module Azure* - Repository $repoName
189
209
if ($PSCmdlet.ShouldProcess (" Module(s) being deleted: $ModulesToDeleteName " ))
190
210
{
191
211
$ModulesToDelete | ForEach-Object {
212
+ $version = $null
192
213
if (! [string ]::IsNullOrEmpty($_.Version ))
193
214
{
194
- Get-DependentModules - repoName $repoName - moduleName $_.Name - moduleVersion $_.Version - allModules $ModulesToDelete - azureModules $azureModules
195
- & $nugetExe delete $_.Name $_.Version - ApiKey $apiKey - Source $repositoryLocation
215
+ $version = $_.Version
196
216
}
197
217
elseif (! [string ]::IsNullOrEmpty($_.RequiredVersion ))
198
218
{
199
- Get-DependentModules - repoName $repoName - moduleName $_.Name - moduleVersion $_.RequiredVersion - allModules $ModulesToDelete - azureModules $azureModules
200
- & $nugetExe delete $_.Name $_.RequiredVersion - ApiKey $apiKey - Source $repositoryLocation
219
+ $version = $_.RequiredVersion
201
220
}
202
221
elseif (! [string ]::IsNullOrEmpty($_.MinimumVersion ))
203
222
{
204
- Get-DependentModules - repoName $repoName - moduleName $_.Name - moduleVersion $_.MinimumVersion - allModules $ModulesToDelete - azureModules $azureModules
205
- & $nugetExe delete $_.Name $_.MinimumVersion - ApiKey $apiKey - Source $repositoryLocation
223
+ $version = $_.MinimumVersion
224
+ }
225
+
226
+ $warning = Get-DependentModules - repoName $repoName - moduleName $_.Name - moduleVersion $version - allModules $ModulesToDelete - azureModules $azureModules
227
+ if (($warning -eq $null ) -or ($Force ) -or ($PSCmdlet.ShouldContinue ($warning , " Deleting package with orphaned dependencies" )))
228
+ {
229
+ & $nugetExe delete $_.Name $version - ApiKey $apiKey - Source $repositoryLocation - NonInteractive
206
230
}
207
231
}
208
232
}
0 commit comments