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.
Now that a newer version is out any thoughts on how to uninstall the old version with PowerShell to install the SSMS 18.
Hi Tracy,
To uninstall old versions of SSMS I’m using this piece of code which I shamelessly stolen from StackOverflow:
Can this be automated on remote server without winrm?
You can use ssh (https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview).
The bottom line is to have a way to execute commands on a remote system.