How To

Install SQL Server Management Studio on Windows with winget

You want SQL Server Management Studio on a Windows box without clicking through a wizard, so you type winget install ssms. Three winget packages answer to that ssms moniker, and the unversioned package ID still installs SSMS 20. This guide shows how to install SQL Server Management Studio with the one exact winget ID, with the vs_SSMS.exe bootstrapper behind the aka.ms link, and silently for scripted builds.

Original content from computingforgeeks.com - post 46417

After the install we check the download, fix the encryption error a fresh instance throws at you, and run the everyday database, login and backup work. Our Windows Server 2025 lab VM refused every login this round, so the Windows install commands follow the documented installer switches and the winget manifest rather than a captured run. I pulled apart the SSMS 22.11.1 bootstrapper and the winget manifests in October 2026 and ran every T-SQL block below against SQL Server 2025 on my homelab box, so that output is real.

What you need before you install SSMS

SSMS 22 is built on the Visual Studio installer, so it inherits Visual Studio’s OS support rather than the old SSMS 19/20 list. Windows 10 is no longer on it, which surprises people upgrading an old admin workstation, because SSMS 20 ran there fine. Per the official SSMS system requirements, you need:

  • Windows 11 (x64 or Arm64), or Windows Server 2019, 2022 or 2025
  • An x64 CPU, quad-core recommended
  • 4 GB RAM minimum, 16 GB recommended
  • 20 to 50 GB free disk for a typical install, on an SSD if you can
  • Administrator rights for the install and for updates
  • .NET Framework 4.7.2 to install (setup adds 4.8 if it is missing)

You also need something to connect to. SSMS 22 manages SQL Server 2014 through SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance and SQL databases in Microsoft Fabric. If you do not have an instance yet, the SQL Server Developer install on Windows Server 2025 gets one running on the same machine, or you can run SQL Server in a Docker or Podman container on a Linux box, which is what we used for the query examples.

Step 1: Install SSMS with winget

Why does a bare winget install ssms not just work? The winget catalog carries three SSMS packages, and all three set the moniker ssms. Per the winget docs, an ambiguous query makes winget ask you to narrow it down rather than pick one, and the manifests we pulled from the winget-pkgs repository show what each ID would install:

Package IDNewest version in the catalogInstaller
Microsoft.SQLServerManagementStudio20.2.1Legacy SSMS-Setup-ENU.exe (burn)
Microsoft.SQLServerManagementStudio.2121.6.17vs_SSMS.exe (SSMS 21)
Microsoft.SQLServerManagementStudio.2222.11.1vs_SSMS.exe (SSMS 22)

That first row is the trap. Old blog posts and scripts use Microsoft.SQLServerManagementStudio, and that ID tops out at SSMS 20, which only supports up to SQL Server 2022. For the current release you want the .22 ID with -e so winget matches it exactly. Winget prompts for elevation when the installer needs it, but for unattended runs start PowerShell or Windows Terminal as administrator. Confirm what winget will install before you commit:

winget show --id Microsoft.SQLServerManagementStudio.22 -e

You should see a version line with the latest SSMS 22 release, and an installer URL pointing at download.visualstudio.microsoft.com. Then install it:

winget install --id Microsoft.SQLServerManagementStudio.22 -e --accept-package-agreements --accept-source-agreements

Winget downloads the same vs_SSMS.exe bootstrapper you would get from the browser and runs it with the switches from the package manifest. These are the relevant lines from the 22.11.1 installer manifest, and they explain most of what you see during the install.

InstallerSwitches:
  Silent: --quiet
  SilentWithProgress: --passive
  InstallLocation: --installPath <INSTALLPATH>
  Upgrade: update
  Custom: --wait --campaign "winget"
ExpectedReturnCodes:
- InstallerReturnCode: 1001
  ReturnResponse: installInProgress
- InstallerReturnCode: 1003
  ReturnResponse: fileInUse
- InstallerReturnCode: 1641
  ReturnResponse: rebootInitiated
- InstallerReturnCode: 3010
  ReturnResponse: rebootRequiredToFinish

By default winget runs the installer with progress shown (--passive), and adding --silent to the winget command switches it to --quiet with no window at all. Return code 3010 means the install worked but Windows wants a reboot, so do not treat it as a failure in a provisioning script. Return code 1001 means another Visual Studio installer is already running, which happens if Windows Update or a second install is mid-flight; wait for it and run winget again.

For an unattended build, the fully silent form is:

winget install --id Microsoft.SQLServerManagementStudio.22 -e --silent --accept-package-agreements --accept-source-agreements

If winget itself is missing (older Server builds, or a stripped image), the winget install guide covers getting the Windows Package Manager onto Windows 11 and Server. Once SSMS is in, winget list --id Microsoft.SQLServerManagementStudio.22 -e shows the installed version, and the same ID is what you pass to winget upgrade later.

Step 2: Download vs_SSMS.exe from aka.ms

The download link on the official install page is https://aka.ms/ssms/22/release/vs_SSMS.exe. There is no standalone MSI for SSMS 22. That link always serves the bootstrapper for the newest release on the Release channel, so it is safe to bake into a script. We followed the redirect from a Linux box to see where it lands:

curl -sIL https://aka.ms/ssms/22/release/vs_SSMS.exe

Our request got a 301 to the Visual Studio download CDN, and the file is about 5.4 MB:

HTTP/1.1 301 Moved Permanently
Content-Length: 0
Location: https://download.visualstudio.microsoft.com/download/pr/e07fb79d-d4ec-45bc-b19d-200bc819ee8d/845b7431296e6d3e0e10eca264becd0541452f26e0abb99fdc3a4bfb53d75dad/vs_SSMS.exe
HTTP/1.1 200 OK
Content-Length: 5691472
Last-Modified: Thu, 15 Oct 2026 22:26:14 GMT

Look at the long hex segment in that URL. It is the SHA-256 of the file itself: the sha256sum of the downloaded vs_SSMS.exe came back as 845b7431...3d75dad, the same string. The winget manifest follows the same pattern, where the hash in its installer URL equals its InstallerSha256. That gives you a free integrity check. On Windows, download the bootstrapper with PowerShell:

Invoke-WebRequest -Uri https://aka.ms/ssms/22/release/vs_SSMS.exe -OutFile "$env:USERPROFILE\Downloads\vs_SSMS.exe"

Hash it and read the product version from its file properties next:

Get-FileHash "$env:USERPROFILE\Downloads\vs_SSMS.exe" -Algorithm SHA256
(Get-Item "$env:USERPROFILE\Downloads\vs_SSMS.exe").VersionInfo.ProductVersion

Your hash should match the hex segment of the redirect URL, and the product version tells you which SSMS release the bootstrapper installs. Reading the version resource of the file we downloaded gave these values, and the same fields appear under Properties, then Details in File Explorer:

FileDescription
SSMS Installer
FileVersion
18.11.12315.225
--
ProductName
Microsoft SQL Server Management Studio
ProductVersion
22.11.1

Do not be thrown by the 18.x file version. That is the Visual Studio 2026 installer engine that SSMS 22 rides on, and the release notes for 22.11.1 say exactly that (“Updated to Visual Studio 18.11.1”). The product version is the one to compare against the SSMS 22 release notes. One more thing we noticed: the aka.ms file and the file winget pins for the same 22.11.1 release have different hashes (845b74... versus bf9e70...) and differ by 32 bytes, so never compare a browser download against the winget manifest hash. Compare each file against its own URL.

Step 3: Install SQL Server Management Studio, GUI or silent

Double-clicking vs_SSMS.exe asks for UAC, shows the license terms, then opens the Visual Studio Installer with the SSMS workload already selected. The optional workloads are worth a look before you click Install, because adding them later means another trip through the installer:

  • Hybrid and Migration, for upgrade assessments and data migration
  • AI Assistance, for GitHub Copilot in SSMS
  • Business Intelligence, if you still manage SSIS, SSAS or SSRS
  • Language packs, on their own tab

You can only choose the install location and download cache drive on the first install. If you want SSMS off the system drive, set it now, because changing it later means uninstalling and reinstalling.

For a scripted or remote install, run the bootstrapper from an elevated PowerShell prompt in the Downloads folder. --quiet hides all UI, --wait keeps the bootstrapper alive until setup finishes, and --norestart postpones any reboot. Wrap it in Start-Process -Wait -PassThru, because vs_SSMS.exe is a GUI-subsystem program: started bare, PowerShell returns to the prompt at once and never sets $LASTEXITCODE, so you would read an empty or stale value:

cd "$env:USERPROFILE\Downloads"
$p = Start-Process -FilePath .\vs_SSMS.exe -ArgumentList "--quiet","--wait","--norestart" -Wait -PassThru
$p.ExitCode

A 0 means done, while 3010 (reboot pending) and 1641 (reboot started) are also successes. The failures you are most likely to see in a script are 740, which means the shell was not elevated, and 8006, which means SSMS was still running. For anything else, read the setup logs in %TEMP%: the files start with ssms_bootstrapper, ssms_client and ssms_setup. Workloads go on the same line with repeated --add switches, which is how you would pre-install the Business Intelligence pieces for an SSIS admin:

Start-Process -FilePath .\vs_SSMS.exe -ArgumentList "--add","Microsoft.SqlServer.Workload.SSMS.BI","--includeRecommended","--quiet","--wait","--norestart" -Wait

Machines with no internet access need an offline layout built on a connected machine first. The layout folder then gets copied across and installed from its own copy of the bootstrapper with --noWeb --noUpdateInstaller; the command-line examples page has the full layout and install recipes. Copy the Visual C++ v14 Redistributable installers (vc_redist.x86.exe and vc_redist.x64.exe from https://aka.ms/vc14/vc_redist.x64.exe and https://aka.ms/vc14/vc_redist.x86.exe) along with the layout, because the system requirements say they must already be installed on an offline machine before SSMS 22 goes on. Without any --add, a layout downloads every workload and component, so this English-only layout is the complete one and the largest:

Start-Process -FilePath .\vs_SSMS.exe -ArgumentList "--layout","C:\SSMS_Layout","--lang","en-US" -Wait

After any of these paths, launch SSMS from the Start menu by searching for “SQL Server Management Studio 22”.

Step 4: Connect SSMS to SQL Server

SSMS opens the Connect to Server dialog on first launch. For a local default instance the server name is localhost (or a single dot), a named instance is HOSTNAME\INSTANCE, and a remote server is its hostname or IP, optionally with a port after a comma (10.0.1.50,1433). Pick Windows Authentication if your Windows account is a SQL Server login, or SQL Server Authentication for a SQL login such as sa.

Most first connections trip on one setting, Encrypt. In SSMS 20 and later it defaults to Mandatory, with Trust Server Certificate unchecked, so the client insists on a certificate it can validate. A fresh SQL Server install or container only has a self-signed certificate, and the connection fails before login. We reproduced the same check from the command line with sqlcmd, which uses the same ODBC Driver 18 defaults:

sqlcmd encryption error against SQL Server 2025 self-signed certificate, then success with trust server certificate

Our first attempt fails with “certificate verify failed: self-signed certificate”, and the second succeeds once -C (trust the server certificate) is added, reporting SQL Server 2025 Enterprise Developer Edition. In SSMS the equivalent is ticking Trust Server Certificate, which is fine for a lab or a box on your own desk. For anything shared, install a certificate from your internal CA or a public one on the SQL Server instead, and leave the box unticked so SSMS keeps validating it.

If the connection times out rather than failing on TLS, the problem is the network path, not SSMS. Check these on the server side:

  • The SQL Server service is running
  • TCP/IP is enabled in SQL Server Configuration Manager
  • TCP 1433 is open in Windows Firewall
  • UDP 1434 and the SQL Server Browser service, for named instances

Our remote access walkthrough covers each of those, and if you would rather move the instance off 1433, set SQL Server to listen on a custom port and put that port after the comma in the server name.

Azure SQL Database works from the same dialog: use the full yourserver.database.windows.net name, Microsoft Entra MFA or a SQL admin login, and Strict encryption, which SSMS 20 and later require for Azure SQL. Allow your public client IP in the firewall rules of the Azure SQL server first, otherwise the dialog fails with a firewall error that names your IP. We did not test Azure SQL for this refresh; the official Azure SQL with SSMS quickstart has the current dialog.

Step 5: Create a database and run queries

Open a query window with New Query on the toolbar or Ctrl+N, and press F5 to run whatever is in it (or only the highlighted part). Everything in this section ran against SQL Server 2025 exactly as shown. Create the database first:

CREATE DATABASE SampleDB;
GO

Object Explorer does not notice new databases on its own, so right-click Databases and choose Refresh to see SampleDB appear. Every statement after this one needs to run inside that database, because a query window keeps the context it opened with (usually master) until you change it. That is why the next script starts with USE before creating the table:

USE SampleDB;
GO

CREATE TABLE dbo.Employees (
    EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    Email NVARCHAR(100),
    Department NVARCHAR(50),
    HireDate DATE NOT NULL DEFAULT CAST(GETDATE() AS DATE)
);
GO

Load a few rows and read some back with a filter, so you can see the results grid do its job:

USE SampleDB;
GO

INSERT INTO dbo.Employees (FirstName, LastName, Email, Department)
VALUES
    ('John', 'Smith', '[email protected]', 'Engineering'),
    ('Sarah', 'Johnson', '[email protected]', 'Marketing'),
    ('Mike', 'Williams', '[email protected]', 'Engineering'),
    ('Lisa', 'Brown', '[email protected]', 'Finance');
GO

SELECT EmployeeID, FirstName, LastName, Department, HireDate
FROM dbo.Employees
WHERE Department = 'Engineering'
ORDER BY LastName;
GO

You get four rows from the insert, and the filtered select returns the two engineers with the identity values and today’s date filled in by the column defaults.

(4 rows affected)
EmployeeID FirstName LastName Department HireDate
---------- --------- -------- ---------- --------
1 John Smith Engineering 2026-10-25
3 Mike Williams Engineering 2026-10-25

(2 rows affected)

Before you tune anything, check Query Store. Older guides tell you to turn it on with ALTER DATABASE ... SET QUERY_STORE = ON, but SQL Server 2022 and later enable it for new databases already. Confirm it on yours:

USE SampleDB;
GO

SELECT desired_state_desc, actual_state_desc, max_storage_size_mb
FROM sys.database_query_store_options;
GO

On our freshly created SampleDB it was already in read-write mode with a 1000 MB cap, so the Query Store reports under the database node in Object Explorer (Regressed Queries is the one to open first after a bad deploy) have data from day one:

desired_state_desc actual_state_desc max_storage_size_mb
------------------ ----------------- -------------------
READ_WRITE READ_WRITE 1000

While a query window is open, Ctrl+L shows the estimated execution plan without running anything, and Ctrl+M includes the actual plan on the next F5. A scan over a large table in either plan is usually the missing index you are looking for.

Step 6: Create a login and set permissions

SQL Server splits identity in two: a login at the server level, which lets someone connect, and a user inside each database, which carries the permissions. An application account normally needs read access to everything plus write access to a few tables, so we give it the reader role, grant insert on one table, and explicitly deny delete:

CREATE LOGIN AppUser WITH PASSWORD = 'StrongP@ssw0rd!2026';
GO

USE SampleDB;
GO

CREATE USER AppUser FOR LOGIN AppUser;
ALTER ROLE db_datareader ADD MEMBER AppUser;
GRANT INSERT ON dbo.Employees TO AppUser;
DENY DELETE ON dbo.Employees TO AppUser;
GO

Use your own password there, obviously, because SQL Server enforces the Windows password policy on SQL logins by default and a weak one fails the CREATE LOGIN. To audit what a user can actually do, list the explicit permissions and the role memberships side by side. Role access never shows up in sys.database_permissions, so checking only that view makes a reader-only account look like it has no rights at all:

USE SampleDB;
GO

SELECT dp.name AS UserName, o.name AS ObjectName,
       p.permission_name, p.state_desc
FROM sys.database_permissions AS p
JOIN sys.database_principals AS dp ON p.grantee_principal_id = dp.principal_id
LEFT JOIN sys.objects AS o ON p.major_id = o.object_id
WHERE dp.name = 'AppUser';

SELECT r.name AS RoleName
FROM sys.database_role_members AS rm
JOIN sys.database_principals AS r ON rm.role_principal_id = r.principal_id
JOIN sys.database_principals AS m ON rm.member_principal_id = m.principal_id
WHERE m.name = 'AppUser';
GO

Our first result set shows the CONNECT that CREATE USER grants automatically, plus our INSERT grant and the DELETE deny. The second confirms the reader role:

UserName ObjectName permission_name state_desc
-------- ---------- --------------- ----------
AppUser NULL CONNECT GRANT
AppUser Employees DELETE DENY
AppUser Employees INSERT GRANT

(3 rows affected)
RoleName
--------
db_datareader

(1 rows affected)

We then connected as AppUser and tried a delete, which is the last line of the screenshot in Step 4. SQL Server refuses it with error 229, “The DELETE permission was denied on the object ‘Employees’, database ‘SampleDB’, schema ‘dbo’.”, while a SELECT run as AppUser in a separate session still counted all four rows. A DENY always beats a GRANT, including one inherited from a role, so it is the right tool for “this account must never delete” rules. In SSMS the same objects live under Security, then Logins at the server level and Security, then Users inside each database, and the SQL Server users and permissions guide goes further into roles and schemas.

Step 7: Back up and restore a database

Hardcoding C:\SQLBackups\ in a backup script fails the first time it runs somewhere that folder does not exist. If you give BACKUP a bare file name, SQL Server writes it to the default backup directory of the instance instead, so check where that is and which recovery model the database uses:

SELECT SERVERPROPERTY('InstanceDefaultBackupPath') AS BackupPath,
       DATABASEPROPERTYEX('SampleDB', 'Recovery') AS RecoveryModel;
GO

On our Linux-hosted instance the path is /var/opt/mssql/data; a default Windows install points at the MSSQL\Backup folder under the instance directory. The recovery model came back FULL, which matters for the log backup further down:

BackupPath RecoveryModel
---------- -------------
/var/opt/mssql/data FULL

Take a compressed full backup with a checksum, so corruption is caught while the backup is written rather than during the restore you actually need:

BACKUP DATABASE SampleDB
TO DISK = N'SampleDB_Full.bak'
WITH INIT, COMPRESSION, CHECKSUM, STATS = 25;
GO

Watch the Messages tab, which shows progress every 25 percent and the throughput at the end:

25 percent processed.
50 percent processed.
75 percent processed.
100 percent processed.
Processed 424 pages for database 'SampleDB', file 'SampleDB' on file 1.
Processed 2 pages for database 'SampleDB', file 'SampleDB_log' on file 1.
BACKUP DATABASE successfully processed 426 pages in 0.139 seconds (23.915 MB/sec).

INIT overwrites the backup sets in that file but keeps its media header, which is gentler than the FORMAT option older guides use. Differential and log backups follow the same shape:

BACKUP DATABASE SampleDB
TO DISK = N'SampleDB_Diff.bak'
WITH DIFFERENTIAL, INIT, COMPRESSION, CHECKSUM;
GO

BACKUP LOG SampleDB
TO DISK = N'SampleDB_Log.trn'
WITH INIT, COMPRESSION, CHECKSUM;
GO

Both succeeded here because the database is in FULL recovery. On a database in SIMPLE recovery (the default on Express, since it inherits from model) the log backup is refused, so switch the model first if you need point-in-time restores:

Processed 104 pages for database 'SampleDB', file 'SampleDB' on file 1.
Processed 2 pages for database 'SampleDB', file 'SampleDB_log' on file 1.
BACKUP DATABASE WITH DIFFERENTIAL successfully processed 106 pages in 0.268 seconds (3.075 MB/sec).
Processed 8 pages for database 'SampleDB', file 'SampleDB_log' on file 1.
BACKUP LOG successfully processed 8 pages in 0.020 seconds (3.125 MB/sec).

A backup you never tested is a hope, not a backup. RESTORE VERIFYONLY reads the whole file and rechecks the page checksums without touching the live database:

RESTORE VERIFYONLY FROM DISK = N'SampleDB_Full.bak' WITH CHECKSUM;
GO

It answered “The backup set on file 1 is valid.” To restore over the existing database, move your own session to master and kick everyone else out first. Skipping that is the classic reason a restore fails with “Exclusive access could not be obtained because the database is in use”, usually because the restoring query window itself still has SampleDB selected:

USE master;
GO

ALTER DATABASE SampleDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE SampleDB
FROM DISK = N'SampleDB_Full.bak'
WITH REPLACE, RECOVERY, STATS = 50;
ALTER DATABASE SampleDB SET MULTI_USER;
GO

Restoring the same 426 pages took 0.081 seconds on our box. To see every backup taken of the database, query the history in msdb:

SELECT database_name, type AS BackupType,
       backup_finish_date,
       CAST(compressed_backup_size / 1048576.0 AS DECIMAL(10,2)) AS SizeMB
FROM msdb.dbo.backupset
WHERE database_name = 'SampleDB'
ORDER BY backup_finish_date DESC;
GO

In the type column, D is a full backup, I a differential and L a log backup. With compression on, the full backup of this small database came to half a megabyte:

database_name BackupType backup_finish_date SizeMB
------------- ---------- ------------------ ------
SampleDB L 2026-10-25 05:36:10.000 .01
SampleDB I 2026-10-25 05:36:10.000 .10
SampleDB D 2026-10-25 05:36:07.000 .50

(3 rows affected)

In the GUI, right-click the database, Tasks, then Back Up, and its Script button at the top of the dialog writes the equivalent T-SQL into a query window. That is a handy way to learn the syntax for options you have not used before. If you want to go deeper on T-SQL itself, T-SQL Fundamentals, 4th Edition (paid link) by Itzik Ben-Gan is the book we point new DBAs at, and our roundup of SQL Server books covers administration and tuning titles.

SSMS keyboard shortcuts worth learning

We checked each of these against the official SSMS keyboard shortcut reference, and they work with the default SQL Server keyboard scheme.

ShortcutWhat it does
F5Run the selected text, or the whole window if nothing is selected
Ctrl+NNew query window
Ctrl+LShow the estimated execution plan
Ctrl+MInclude the actual execution plan on the next run
Ctrl+RShow or hide the results pane
Ctrl+D / Ctrl+TResults to grid / results to text
Ctrl+K, Ctrl+CComment the selection
Ctrl+K, Ctrl+UUncomment the selection
Alt+F1Run sp_help on the highlighted object name
Ctrl+Alt+AOpen Activity Monitor

Alt+F1 is the one people discover late and then use all day: highlight a table name in any script and it prints the columns, types, indexes and constraints without leaving the editor.

What replaced Azure Data Studio

Earlier versions of this guide suggested Azure Data Studio as a lighter companion to SSMS. Microsoft retired Azure Data Studio on February 28, 2026, and it no longer gets updates or security fixes, so do not install it on a new machine. The retirement notice points users to Visual Studio Code with the MSSQL extension, which covers the query editing, notebooks and cross-platform use that people liked ADS for. SSMS remains the tool for server administration on Windows: Agent jobs, maintenance plans, SSIS and the full security tree.

What broke while we worked through this

Three things cost us time on this refresh, and each one is something a reader is likely to hit too:

  1. The ssms moniker is shared by three winget packages, and the unversioned ID installs SSMS 20
  2. sqlcmd and SSMS refused the self-signed certificate on a fresh instance
  3. Our first Query Store check used a column that does not exist

Step 1 covers the first one, and the takeaway is to always pin --id Microsoft.SQLServerManagementStudio.22 -e in scripts. The second is the encryption default from Step 4, and the honest fix outside a lab is a proper certificate, not a ticked box. The third was our own typo, but the message is worth recognising: sys.database_query_store_options has no name column, and SQL Server answered with “Msg 207, Level 16, State 1 … Invalid column name ‘name’.” That catalog view is scoped to the current database, so switch to the database with USE first instead of filtering by name.

Update or remove SSMS 22

SSMS 22 ships new releases roughly every few weeks, and it notifies you inside the app when one is ready. The quickest update path on a machine you installed with winget is the same package ID:

winget upgrade --id Microsoft.SQLServerManagementStudio.22 -e --accept-package-agreements --accept-source-agreements

Per the manifest, winget runs the update verb of the bootstrapper for this. Without winget, open Visual Studio Installer from the Start menu and click Update on the SSMS 22 entry. Removal goes through the same installer, or from the command line with the documented uninstall command. Call setup.exe by its full path from any other folder, because the parameter reference says the installer must not be started from its own directory. setup.exe is a GUI program too, so Start-Process -Wait keeps a script from moving on before the removal finishes:

Start-Process -FilePath "C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe" -ArgumentList "uninstall","--passive","--productId","Microsoft.VisualStudio.Product.Ssms","--channelId","SSMS.22.SSMS.Release","--noweb" -Wait

This removes SSMS 22 but leaves the Visual Studio Installer behind for any other SSMS or Visual Studio versions on the machine. If you installed SSMS 20 by accident through the old winget ID, remove it from Installed apps like any other program; it sits side by side with SSMS 22 and does not interfere, so there is no rush.

Keep reading

Create a Bootable Windows 11 USB and Install Windows 11 Windows Create a Bootable Windows 11 USB and Install Windows 11 Set Up a Samba Share on Windows 11 and Access It from Linux Networking Set Up a Samba Share on Windows 11 and Access It from Linux Windows 11 Installation on KVM with Virt-Manager KVM Windows 11 Installation on KVM with Virt-Manager Configure NTP Server on Windows Server 2025 / 2022 (w32tm Guide) Windows Configure NTP Server on Windows Server 2025 / 2022 (w32tm Guide) Windows 11 Keyboard Shortcuts Cheat Sheet (Printable PDF) Cheat Sheets Windows 11 Keyboard Shortcuts Cheat Sheet (Printable PDF) Installing PostgreSQL 14 on Rocky Linux 9 / AlmaLinux 9 Databases Installing PostgreSQL 14 on Rocky Linux 9 / AlmaLinux 9

Leave a Comment

Press ESC to close