diff --git a/tools/AzureRM/AzureRM.psd1 b/tools/AzureRM/AzureRM.psd1 index b59669b2fb87..740ba03a61cb 100644 Binary files a/tools/AzureRM/AzureRM.psd1 and b/tools/AzureRM/AzureRM.psd1 differ diff --git a/tools/AzureRM/AzureRM.psm1 b/tools/AzureRM/AzureRM.psm1 index 5f14bb0197b2..6ae0626e4ba1 100644 --- a/tools/AzureRM/AzureRM.psm1 +++ b/tools/AzureRM/AzureRM.psm1 @@ -1,3 +1,7 @@ +#Requires -RunAsAdministrator + +$AzureRMProfileVersion = "0.9.8"; + $AzureRMModules = @{ "Azure.Storage" = "0.9.8"; "AzureRM.ApiManagement" = "0.9.8"; @@ -25,12 +29,31 @@ $AzureRMModules = @{ "AzureRM.Websites" = "0.9.8" } +function Import-ModuleWithVersionCheck([string]$Name,[string]$MinimumVersion,[string]$Repository,[string]$Scope) +{ + $minVer = $MinimumVersion + $maxVer = "$($minVer.Split(".")[0]).9999.0" + try { + if ([string]::IsNullOrWhiteSpace($Repository)) + { + Install-Module -Name $Name -Scope $Scope -MinimumVersion $minVer -MaximumVersion $maxVer -ErrorAction Stop + } else { + Install-Module -Name $Name -Repository $Repository -Scope $Scope -MinimumVersion $minVer -MaximumVersion $maxVer -ErrorAction Stop + } + $v = (Get-InstalledModule -Name $Name)[0].Version.ToString() + Write-Output "$Name $v installed..." + } catch { + Write-Warning "Skipping $Name package..." + Write-Warning $_ + } +} + <# .Synopsis Install Azure Resource Manager cmdlet modules .Description - Installs all the available Azure Resource Manager cmdlet modules that start with "AzureRM". + Installs all the available Azure Resource Manager cmdlet modules. .Parameter Repository Limit the search for "AzureRM" cmdlets in a specific repository. @@ -41,12 +64,11 @@ $AzureRMModules = @{ function Update-AzureRM { param( - [Parameter(Position=0; Mandatory = $false)] + [Parameter(Position=0, Mandatory = $false)] [string] - $Repository; - - [Parameter(Position=1; Mandatory = $false)] - [ValidateSet("CurrentUser";"AllUsers")] + $Repository, + [Parameter(Position=1, Mandatory = $false)] + [ValidateSet("CurrentUser","AllUsers")] [string] $Scope) @@ -57,19 +79,47 @@ function Update-AzureRM Write-Output "Installing AzureRM modules." - $result = $AzureRMModules | ForEach { + Import-ModuleWithVersionCheck "AzureRM.Profile" $AzureRMProfileVersion $Repository $Scope + + $result = $AzureRMModules.Keys | ForEach { Start-Job -Name $_ -ScriptBlock { - if ([string]::IsNullOrWhiteSpace($args[1])) - { - Install-Module -Name $args[0] -Scope $args[2] - } else { - Install-Module -Name $args[0] -Repository $args[1] -Scope $args[2] - } - $v = (Get-InstalledModule -Name $args[0])[0].Version.ToString() - Write-Output "$($args[0]) $v installed..." - } -ArgumentList $_; $Repository; $Scope } + Import-ModuleWithVersionCheck $args[0] $args[1] $args[2] $args[3] + } -ArgumentList $_, $AzureRMModules[$_], $Repository, $Scope } - $AzureRMModules | ForEach {Get-Job -Name $_ | Wait-Job | Receive-Job } + $AzureRMModules.Keys | ForEach {Get-Job -Name $_ | Wait-Job | Receive-Job } } + +<# + .Synopsis + Remove Azure Resource Manager cmdlet modules + + .Description + Removes all installed Azure Resource Manager cmdlet modules. +#> +function Uninstall-AzureRM +{ + param( + [Parameter(Position=0, Mandatory = $false)] + [string] + $Repository) + + Write-Output "Uninstalling AzureRM modules." + + $installedModules = Get-InstalledModule + + $AzureRMModules.Keys | ForEach { + $moduleName = $_ + if (($installedModules | where {$_.Name -eq $moduleName}) -ne $null) { + Uninstall-Module -Name $_ -ErrorAction Stop + Write-Output "$moduleName uninstalled..." + } + } + + if (($installedModules | where {"AzureRM.Profile" -eq $moduleName}) -ne $null) { + Uninstall-Module -Name "AzureRM.Profile" -ErrorAction Stop + Write-Output "AzureRM.Profile uninstalled..." + } +} + New-Alias -Name Install-AzureRM -Value Update-AzureRM Export-ModuleMember -function * -Alias * \ No newline at end of file