SSMS is now free and no longer requiring licensing.
It is a separate install and has a more frequent release cycle, usually around 30 days.
To be able to maintain up to date a larger number of SSMS installations I wrote a PowerShell Script for the task.
Of course that a better approach will be to make the download once and then propagate it to other servers, but for now, this works best for me.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<# .SYNOPSIS Silently Download and Install SQL Server Management Studio (SSMS). .DESCRIPTION This script will download and install the latest available SSMS from Microsoft. .PARAMETER WriteLog You want to log to a file. It will generate more than a few files :) .EXAMPLE .\Get-LastSSMS -WriteLog 1 .NOTES Author: Viorel Ciucu Date: January, 2017 .LINK #> #Requires -RunAsAdministrator [CmdletBinding()] param ( [parameter(Mandatory = $false)] [int]$WriteLog = 0 ) if(-not $PSScriptRoot) { $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent } $msg = "" $args = @() $args += "/install /quiet /norestart" if($WriteLog -eq 1) { $args += "/log SSMS_$(Get-Date -Format `"yyyyMMdd_HHmm`").txt" $msg = "InstallationLog: $PSScriptRoot\SSMS_$(Get-Date -Format `"yyyyMMdd_HHmm`").txt" } # Create SSL/TLS secure channel [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # Start the download Write-Host "Download starting! Please wait.." $ProgressPreference = 'SilentlyContinue' $Domain = "https://msdn.microsoft.com/en-us/library/mt238290.aspx" $url = (Invoke-WebRequest -Uri $Domain -UseBasicParsing).Links $members = ($url | Get-Member).Name $filter = @() if ($members -match 'innerHTML') { $filter = 'innerHTML' }elseif ($members -match 'outerHTML') { $filter = 'outerHTML' } $href = ($url | Where-Object $filter -Match "Download SQL Server Management Studio").href | Select-Object -First 1 $job = Start-BitsTransfer -Source $href -DisplayName SSMS -Destination "SSMS-Setup-ENU.exe" -Asynchronous while (($Job.JobState -eq "Transferring") -or ($Job.JobState -eq "Connecting")) { Start-Sleep 5; } # Poll for status, sleep for 5 seconds, or perform an action. Switch($Job.JobState) { "Transferred" { Complete-BitsTransfer -BitsJob $Job; Write-Output "Download completed!" } "Error" { $Job | Format-List } # List the errors. default { Write-Output "You need to re-run the script, there is a problem with the proxy or Microsoft has changed the download link!"; Exit } # Perform corrective action. } # We close running SSMS processes if (Get-Process 'Ssms') { Stop-Process -Name Ssms } # Install silently Write-Output "Performing silent install..." Start-Process -FilePath SSMS-Setup-ENU.exe -ArgumentList $args -Wait -Verb RunAs Write-Output $msg Write-Output "All done!" |
Hope you’ll find it useful.