UpdateAz.ps1
<#PSScriptInfo .VERSION 3.1 .GUID 9eb5ce4f-04cf-4fec-a2b8-f424812bb556 .AUTHOR rustedwizard@outlook.com .COMPANYNAME .COPYRIGHT .TAGS .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .PRIVATEDATA #> <# .DESCRIPTION Uninstall and install latest version of Azure Powershell and Azure Cli #> param( [Parameter(Mandatory=$false)] [bool]$AllUsers=$true, [Parameter(Mandatory=$false)] [bool]$SkipAzureCli=$false ) Write-Host -ForegroundColor Yellow "*********************************************************************" Write-Host -ForegroundColor Yellow "** Update Az **" Write-Host -ForegroundColor Yellow "** This script will perform following operation: **" Write-Host -ForegroundColor Yellow "** 1. Uninstall all versions of Az PowerShell. **" Write-Host -ForegroundColor Yellow "** 2. Install the latest version of Az PowerShell available. **" Write-Host -ForegroundColor Yellow "** 3. Upgrade/install the latest version of Azure Cli. **" Write-Host -ForegroundColor Yellow "*********************************************************************" Write-Host "" Write-Host "" Write-Host "Checking for elevated permissions..." if (($AllUsers -OR !$SkipAzureCli) -AND (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))) { Write-Warning "Insufficient permissions to run this script. Open the PowerShell console as an administrator and run this script again." Write-Host -ForegroundColor Red "By default, this script install Az PowerShell in scope of AllUsers, and install Azure Cli require Admin permission." Write-Host -ForegroundColor Red 'You may specify prameter -AllUsers $false -SkipAzureCli=$true in order to run this script in regular user.' Return } Write-Host -ForegroundColor Yellow "Remove all versions of Az PowerShell currently installed" $AzVersions = Get-InstalledModule -Name Az -AllVersions -ErrorAction SilentlyContinue if ($null -ne $AzVersions) { Foreach ($v in $AzVersions) { $version = $v.Version Write-Host -ForegroundColor Yellow "Removing Az PowerShell version $version" $temp += (Import-Clixml -Path (Join-Path -Path $v.InstalledLocation -ChildPath PSGetModuleInfo.xml)).Dependencies.Name $total = $temp.Count $count = 0 Foreach ($e in $temp) { $count += 1 if ($null -ne $e) { if (Get-Module -ListAvailable -Name $e) { $prog = $count / $total * 100 Write-Progress -Activity "Removing Depedency Module..." -Status "Dependency module found: $e" -PercentComplete $prog Remove-Module -Name $e -ErrorAction SilentlyContinue Write-Progress -Activity "Removing Depedency Module..." -Status "Attempting to uninstall module: $e" -PercentComplete $prog Uninstall-Module -Name $e -AllVersions } else { Write-Host "Dependency Module $e not installed, skipping..." -ForegroundColor Yellow } } } Write-Progress -Activity "Removing Depedency Module..." -Status "Ready" -Completed } Write-Host "" Write-Host "Remove Az PowerShell..." -ForegroundColor Yellow Remove-Module -Name Az -ErrorAction SilentlyContinue Uninstall-Module -Name Az -AllVersions Write-Host -ForegroundColor Green "Successfully removed Az PowerShell version $version" }else{ Write-Host "No Az PowerShell install has been found, skip uninstallation..." -ForegroundColor Yellow } Write-Host "Install latest Az PowerShell..." -ForegroundColor Yellow if($AllUsers){ Install-Module -Name Az -Scope AllUsers -Repository PSGallery -Force }else{ Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force } Write-Host "Upgrade operation has completed successfully." -ForegroundColor Green if(!$SkipAzureCli){ Write-Host "" Write-Host "Upgrade/Install Azure Cli" -ForegroundColor Yellow Write-Host "" Write-Host "Downloading latest version of Azure Cli..." -ForegroundColor Blue Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi Write-Host "`Installer downloaded, start unattended install..." -ForegroundColor Yellow Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet' Write-Host "`rInstallation process end, clean up..." -ForegroundColor Green Write-Host "Installation of Azure Cli completed successfully." -ForegroundColor Green Remove-Item .\AzureCLI.msi Write-Host "`Clean up completed, Upgrade installed Azure Cli Extensions." -ForegroundColor Yellow $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") Az Upgrade } Write-Host "Script Execution Finished successfully." -ForegroundColor Green # SIG # Begin signature block # MIIQGQYJKoZIhvcNAQcCoIIQCjCCEAYCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUVQlvVAXjKJ6InIlsL5sfbeRV # iBegggzVMIIGWzCCBEOgAwIBAgIQV156WorWyKgnVBrnbADy+TANBgkqhkiG9w0B # AQsFADB4MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv # dXN0b24xETAPBgNVBAoMCFNTTCBDb3JwMTQwMgYDVQQDDCtTU0wuY29tIENvZGUg # U2lnbmluZyBJbnRlcm1lZGlhdGUgQ0EgUlNBIFIxMB4XDTIyMDcwOTE3MzEwN1oX # DTI1MDcwODE3MzEwN1owZDELMAkGA1UEBhMCQ0ExGTAXBgNVBAgMEEJyaXRpc2gg # Q29sdW1iaWExEDAOBgNVBAcMB0J1cm5hYnkxEzARBgNVBAoMClNoaWtlIENoZW4x # EzARBgNVBAMMClNoaWtlIENoZW4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGK # AoIBgQC2KsqxstUq33DhMCd4NE3QmFI/ffLA3g1k0FRuwkuJJ0SdwT14OFJf221x # mGnF4Y0ibGvD21/FeyVZxlA4unJlajZJF/WMMspZeriwWWGE84rE+z56lAhZnTLu # M8Id2lDsuVv6C9vxNrerRRV9UErxqrk0OLdvdT8OFh9X0PNFE+Q4YFQQsrkT9dBN # +bxe/n9cZgdlAgtGRN/ZdYE6Xs6Dc4DMaHLl0g+C8iN80DnVm6kRkg/4eW6Le9wD # A7sn0BwuxxgUpttmCdZGAj8Y+M/I+G9AAHpB3Gdq9ptx+mB4S7pVIcBG5wkkmcG6 # R3aiWVfM/Rsil7/heXfcN4RNIYmwPnWB4ILwdEpCrx8NZqbt894MjI0Oh6rGkEsb # KCklDKBf95AFei1FL5NVIeBFDbJpf5Ag+dZdSzCRQvqTBznYZRjP1n6FB7RpU+7k # 9ONjtsWykoeUwdBoEKiLpavxXGuP5a6WX3q3XHoIsEcbaz3SRzxyUl2djpYzvHx/ # IMN6ggMCAwEAAaOCAXMwggFvMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUVML+ # EJUAk81q9efA19myS7iPDOMwWAYIKwYBBQUHAQEETDBKMEgGCCsGAQUFBzAChjxo # dHRwOi8vY2VydC5zc2wuY29tL1NTTGNvbS1TdWJDQS1Db2RlU2lnbmluZy1SU0Et # NDA5Ni1SMS5jZXIwUQYDVR0gBEowSDAIBgZngQwBBAEwPAYMKwYBBAGCqTABAwMB # MCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnNzbC5jb20vcmVwb3NpdG9yeTAT # BgNVHSUEDDAKBggrBgEFBQcDAzBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vY3Js # cy5zc2wuY29tL1NTTGNvbS1TdWJDQS1Db2RlU2lnbmluZy1SU0EtNDA5Ni1SMS5j # cmwwHQYDVR0OBBYEFDf3renyUjaxIiWGHDyaNg9qLVNPMA4GA1UdDwEB/wQEAwIH # gDANBgkqhkiG9w0BAQsFAAOCAgEAatpx4vhhKY3FbIF4tycYGOlZP1fb7D+nhYyu # LtG2fCLE3HUH5uUOXqwJ3cn9dJTyJ3U98q0GSo+dWwai9J7vf29jQNkVrPaA9qYO # ZJFvqd2zwfD/OjIuDziu/fR8BZXBL/rDQmQHXy1V1pL69CanKIL2k9nZ2lJtHIAd # SkbAcdkNaWMllupsNYrna2gzF4sznukX0vLbRDN4SPxFKreDVGkDSP58I3IMcqE8 # VNQcELHYeI7Baf6D+98MTVk1Rz1BkACai3mC/0zn6n5mvpnYpKb83Fd2YqHMPSRL # d2u9PvEd/NU4UzbegYnqmxAC9JElGkSOALKJ9Vp3EsbAIHwHxem2/SS3HlfnjHg5 # kGkm8AXir0F+JPp8afsxaWji+l56kw4MbFlBoCtd0aBfeOPoCs65ehcmnphpnU0U # oLW1Ec72etnKzsFiT3xRDVScfqojiM92yTyIt0/Fhlj9kcZgg6EGA4TEJYNmDltB # 1MO6ZtDYW9vyYxu9Kc4n9CTDmeahzgf95bD7tKzSctwPaTwZHZ0GCGs4EeE/pdGJ # wjUXwV8HsZ8VkTMY3o3pWQrzmTSZWzYhqryO2l5rsnfixiudjz2SmjX1umwrAFNb # HB5/AH7k/fHpAxWfehnUyIqYn8txgUDLaQKEZMTECDkEdRVtVwruJdIF/LuBo1To # LL87DZAwggZyMIIEWqADAgECAghkM1HTxzifCDANBgkqhkiG9w0BAQsFADB8MQsw # CQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24xGDAW # BgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBSb290IENl # cnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTAeFw0xNjA2MjQyMDQ0MzBaFw0zMTA2 # MjQyMDQ0MzBaMHgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UE # BwwHSG91c3RvbjERMA8GA1UECgwIU1NMIENvcnAxNDAyBgNVBAMMK1NTTC5jb20g # Q29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBDQSBSU0EgUjEwggIiMA0GCSqGSIb3 # DQEBAQUAA4ICDwAwggIKAoICAQCfgxNzqrDGbSHL24t6h3TQcdyOl3Ka5LuINLTd # gAPGL0WkdJq/Hg9Q6p5tePOf+lEmqT2d0bKUVz77OYkbkStW72fL5gvjDjmMxjX0 # jD3dJekBrBdCfVgWQNz51ShEHZVkMGE6ZPKX13NMfXsjAm3zdetVPW+qLcSvvnSs # Xf5qtvzqXHnpD0OctVIFD+8+sbGP0EmtpuNCGVQ/8y8Ooct8/hP5IznaJRy4PgBK # Om8yMDdkHseudQfYVdIYyQ6KvKNc8HwKp4WBwg6vj5lc02AlvINaaRwlE81y9euc # gJvcLGfE3ckJmNVz68Qho+Uyjj4vUpjGYDdkjLJvSlRyGMwnh/rNdaJjIUy1PWT9 # K6abVa8mTGC0uVz+q0O9rdATZlAfC9KJpv/XgAbxwxECMzNhF/dWH44vO2jnFfF3 # VkopngPawismYTJboFblSSmNNqf1x1KiVgMgLzh4gL32Bq5BNMuURb2bx4kYHwu6 # /6muakCZE93vUN8BuvIE1tAx3zQ4XldbyDgeVtSsSKbt//m4wTvtwiS+RGCnd83V # PZhZtEPqqmB9zcLlL/Hr9dQg1Zc0bl0EawUR0tOSjAknRO1PNTFGfnQZBWLsiePq # I3CY5NEv1IoTGEaTZeVYc9NMPSd6Ij/D+KNVt/nmh4LsRR7Fbjp8sU65q2j3m2PV # kUG8qQIDAQABo4H7MIH4MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU3QQJ # B6L1en1SUxKSle44gCUNplkwMAYIKwYBBQUHAQEEJDAiMCAGCCsGAQUFBzABhhRo # dHRwOi8vb2NzcHMuc3NsLmNvbTARBgNVHSAECjAIMAYGBFUdIAAwEwYDVR0lBAww # CgYIKwYBBQUHAwMwOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybHMuc3NsLmNv # bS9zc2wuY29tLXJzYS1Sb290Q0EuY3JsMB0GA1UdDgQWBBRUwv4QlQCTzWr158DX # 2bJLuI8M4zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAPUPJodw # r5miyvXWyfCNZj05gtOII9iCv49UhCe204MH154niU2EjlTRIO5gQ9tXQjzHsJX2 # vszqoz2OTwbGK1mGf+tzG8rlQCbgPW/M9r1xxs19DiBAOdYF0q+UCL9/wlG3K7V7 # gyHwY9rlnOFpLnUdTsthHvWlM98CnRXZ7WmTV7pGRS6AvGW+5xI+3kf/kJwQrfZW # sqTU+tb8LryXIbN2g9KR+gZQ0bGAKID+260PZ+34fdzZcFt6umi1s0pmF4/n8OdX # 3Wn+vF7h1YyfE7uVmhX7eSuF1W0+Z0duGwdc+1RFDxYRLhHDsLy1bhwzV5Qe/kI0 # Ro4xUE7bM1eV+jjk5hLbq1guRbfZIsr0WkdJLCjoT4xCPGRo6eZDrBmRqccTgl/8 # cQo3t51Qezxd96JSgjXktefTCm9r/o35pNfVHUvnfWII+NnXrJlJ27WEQRQu9i5g # l1NLmv7xiHp0up516eDap8nMLDt7TAp4z5T3NmC2gzyKVMtODWgqlBF1JhTqIDfM # 63kXdlV4cW3iSTgzN9vkbFnHI2LmvM4uVEv9XgMqyN0eS3FE0HU+MWJliymm7STh # eh2ENH+kF3y0rH0/NVjLw78a3Z9UVm1F5VPziIorMaPKPlDRADTsJwjDZ8Zc6Gi/ # zy4WZbg8Zv87spWrmo2dzJTw7XhQf+xkR6OdMYICrjCCAqoCAQEwgYwweDELMAkG # A1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYD # VQQKDAhTU0wgQ29ycDE0MDIGA1UEAwwrU1NMLmNvbSBDb2RlIFNpZ25pbmcgSW50 # ZXJtZWRpYXRlIENBIFJTQSBSMQIQV156WorWyKgnVBrnbADy+TAJBgUrDgMCGgUA # oHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYB # BAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0B # CQQxFgQUCPEH7LvJ5wwh/6mhZNT8xQsH6PgwDQYJKoZIhvcNAQEBBQAEggGAVw7s # gFUVoclAvCVvAuMdIl6SmS0uir8vgV692iUj/BWaPWaA0/mvWnuGcKd2FL92qZ3Q # QFEzbvqYoA1rWGmcNN+mc/HSmsIj64R2vMLHSPl95NyaAdkHoQ0RIwMA87X8sXme # Ee3VMvqqZL60XahVAySgndsQNDvYC2xgB2UllhNGj+pLro8InYDSlET1DvQhX3Q9 # vsW+Vn/8VelFTRXkXwvdzItRJwqWt8xrGUMGhm4Byn5b/RR8YFFL+TsiR9OLSoR6 # eoT4m8dEl/VHudXj7xyyW962NdbO7M5/C3LIOBOGC2RSQF7E51Ue5LxdedWw45pK # +acOZUnyhXVS1ddpKoaDtQ31/875kXnHP7XkeqlsspeZeyU7yN/R/BpKsFwivaNK # ZIi5m1g/KMgpjVUeG1ap7//jSUaEsr1R9YnNgKnTIaZVF9FMUHDlwfnyXZ/A7Ro/ # ctgEsj0/YEeUJToP+82hNEpL8TRSrXpXae0GfbYoZjpm4s3mc6fwGi0DEJCq # SIG # End signature block |