@@ -33,19 +33,29 @@ function Test-AdminRights([string]$Scope)
33
33
$isAdmin = (New-Object Security.Principal.WindowsPrincipal $user ).IsInRole([Security.Principal.WindowsBuiltinRole ]::Administrator)
34
34
if ($isAdmin -eq $false )
35
35
{
36
- throw " Administrator rights are required to install Microsoft Azure modules"
36
+ throw " Administrator rights are required to install or uninstall Microsoft Azure modules"
37
37
}
38
38
}
39
39
}
40
40
41
41
function Install-ModuleWithVersionCheck ([string ]$Name , [string ]$MajorVersion , [string ]$Repository , [string ]$Scope )
42
42
{
43
- $minVer = " $MajorVersion .0.0.0"
44
- $maxVer = " $MajorVersion .9999.9999.9999"
43
+ $_MinVer = " $MajorVersion .0.0.0"
44
+ $_MaxVer = " $MajorVersion .9999.9999.9999"
45
45
try {
46
- Install-Module - Name $Name - Repository $Repository - Scope $Scope - MinimumVersion $minVer - MaximumVersion $maxVer - Confirm:$false - Force - ErrorAction Stop
46
+ $_ExistingModule = Get-Module - ListAvailable - Name $Name
47
+ $_ModuleAction = " installed"
48
+ if ($_ExistingModule -ne $null )
49
+ {
50
+ Update-Module - Name $Name - MaximumVersion $_MaxVer - ErrorAction Stop
51
+ $_ModuleAction = " updated"
52
+ }
53
+ else
54
+ {
55
+ Install-Module - Name $Name - Repository $Repository - Scope $Scope - MinimumVersion $_MinVer - MaximumVersion $_MaxVer - ErrorAction Stop
56
+ }
47
57
$v = (Get-InstalledModule - Name $Name - ErrorAction Ignore)[0 ].Version.ToString()
48
- Write-Output " $Name $v installed ..."
58
+ Write-Output " $Name $v $_ModuleAction ..."
49
59
} catch {
50
60
Write-Warning " Skipping $Name package..."
51
61
Write-Warning $_
@@ -86,22 +96,30 @@ function Update-AzureRM
86
96
87
97
Write-Output " Installing AzureRM modules."
88
98
89
- Install-ModuleWithVersionCheck " AzureRM.Profile " $MajorVersion $Repository $Scope
99
+ $_InstallationPolicy = ( Get-PSRepository - Name PSGallery).InstallationPolicy
90
100
91
- # Stop and remove any previous jobs
92
- $AzureRMModules | ForEach {Get-Job - Name " *$_ " } | Stop-Job | Remove-Job
93
-
94
- # Start new job
95
- $result = $AzureRMModules | ForEach {
96
- Start-Job - Name $_ - ScriptBlock {
97
- Install-ModuleWithVersionCheck $args [0 ] $args [1 ] $args [2 ] $args [3 ]
98
- } - ArgumentList $_ , $MajorVersion , $Repository , $Scope }
99
-
100
- # Get results from the jobs
101
- $AzureRMModules | ForEach {Get-Job - Name $_ | Wait-Job | Receive-Job }
102
-
103
- # Clean up
104
- $AzureRMModules | ForEach {Get-Job - Name $_ | Remove-Job }
101
+ try
102
+ {
103
+ Set-PSRepository - Name PSGallery - InstallationPolicy Trusted
104
+
105
+ Install-ModuleWithVersionCheck " AzureRM.Profile" $MajorVersion $Repository $Scope
106
+
107
+ # Stop and remove any previous jobs
108
+ $AzureRMModules | ForEach {Get-Job - Name " *$_ " } | Stop-Job | Remove-Job
109
+
110
+ # Start new job
111
+ $result = $AzureRMModules | ForEach {
112
+ Start-Job - Name $_ - ScriptBlock {
113
+ Install-ModuleWithVersionCheck $args [0 ] $args [1 ] $args [2 ] $args [3 ]
114
+ } - ArgumentList $_ , $MajorVersion , $Repository , $Scope }
115
+
116
+ # Get results from the jobs
117
+ $AzureRMModules | ForEach {Get-Job - Name $_ | Wait-Job | Receive-Job }
118
+ } finally {
119
+ # Clean up
120
+ Set-PSRepository - Name PSGallery - InstallationPolicy $_InstallationPolicy
121
+ $AzureRMModules | ForEach {Get-Job - Name $_ | Remove-Job }
122
+ }
105
123
}
106
124
107
125
<#
@@ -123,12 +141,12 @@ function Import-AzureRM
123
141
124
142
Write-Output " Importing AzureRM modules."
125
143
126
- $minVer = " $MajorVersion .0.0.0"
127
- $maxVer = " $MajorVersion .9999.9999.9999"
144
+ $_MinVer = " $MajorVersion .0.0.0"
145
+ $_MaxVer = " $MajorVersion .9999.9999.9999"
128
146
129
147
$AzureRMModules | ForEach {
130
148
$moduleName = $_
131
- $matchedModule = Get-InstalledModule - Name $moduleName - MinimumVersion $minVer - MaximumVersion $maxVer - ErrorAction Ignore | where {$_.Name -eq $moduleName }
149
+ $matchedModule = Get-InstalledModule - Name $moduleName - MinimumVersion $_MinVer - MaximumVersion $_MaxVer - ErrorAction Ignore | where {$_.Name -eq $moduleName }
132
150
if ($matchedModule -ne $null ) {
133
151
try {
134
152
Import-Module - Name $matchedModule.Name - RequiredVersion $matchedModule.Version - ErrorAction Stop
@@ -143,10 +161,10 @@ function Import-AzureRM
143
161
144
162
function Uninstall-ModuleWithVersionCheck ([string ]$Name , [string ]$MajorVersion )
145
163
{
146
- $minVer = " $MajorVersion .0.0.0"
147
- $maxVer = " $MajorVersion .9999.9999.9999"
164
+ $_MinVer = " $MajorVersion .0.0.0"
165
+ $_MaxVer = " $MajorVersion .9999.9999.9999"
148
166
# This is a workaround for a bug in PowerShellGet that uses "start with" matching for module name
149
- $matchedModule = Get-InstalledModule - Name $Name - MinimumVersion $minVer - MaximumVersion $maxVer - ErrorAction Ignore | where {$_.Name -eq $Name }
167
+ $matchedModule = Get-InstalledModule - Name $Name - MinimumVersion $_MinVer - MaximumVersion $_MaxVer - ErrorAction Ignore | where {$_.Name -eq $Name }
150
168
if ($matchedModule -ne $null ) {
151
169
try {
152
170
Remove-Module - Name $matchedModule.Name - Force - ErrorAction Ignore
0 commit comments