InplaceUpDate is a free PowerShell script collection, not a compiled application, that backs up logins, linked servers, SSIS packages, the SSIS catalog, SSRS content, and SSAS databases before an in-place SQL Server upgrade — then restores them onto the reinstalled instance afterward. It refuses to uninstall the old version until it can prove a completed backup exists.
An in-place upgrade wizard replaces the SQL Server binaries — it has no concept of your linked servers, SSIS packages, or SSRS content, and no way to know if you've backed any of it up before letting you uninstall.
| Without it | With InplaceUpDate |
|---|---|
| Linked servers, SSIS packages, and SSRS content aren't preserved by an upgrade wizard | All backed up first, as a matched set, before uninstall is even offered |
| Forgetting one component means redoing work after the upgrade | One consistent backup set covering six SQL Server components |
| Nothing stops an uninstall from running before the backup finishes | Uninstall refuses to run without a completed backup summary to point at |
| Recreating logins from scratch means resetting every password | Login password hashes are preserved, not reset |
| A destructive step runs unattended by accident | Every uninstall and restore action asks for an explicit yes/no first |
| PowerShell | 5.1 or later |
| dbatools | 1.0 or later — Install-Module dbatools |
| Rights | Local Administrator on the server (uninstall/reinstall), sysadmin on the SQL instance |
| SSAS backup/restore (optional) | The Analysis Services AMO assembly, auto-discovered from an SSMS 18/19 install; degrades gracefully to a manual-restore note if it isn't found |
| Scope | Standalone instances only — no Availability Group or Failover Cluster Instance handling |
Start-SQLUpgradeBackup.ps1Captures all six components below into a timestamped backup set, and writes a summary file that proves the backup completed.Start-SQLUpgradeUninstall.ps1Checks for that summary file first and refuses to proceed without it, then removes the old SQL Server version via its own setup.exe.Start-SQLUpgradeRestore.ps1Replays the backup set onto the reinstalled instance, confirming each component individually before touching it.The bundled launcher, Start-InplaceUpDate.cmd, presents these as a numbered menu and self-elevates via UAC — needed because a mapped network drive used to start the tool becomes unreachable once the process elevates.
| Component | Method |
|---|---|
| SQL logins & permissions | dbatools Export-DbaLogin (preserves password hashes), plus a T-SQL script covering server roles and grants/denies |
| Linked servers | A T-SQL script rebuilding each linked server and its login mapping — connection passwords can't be exported by SQL Server itself, so those are flagged as needing manual re-entry |
| Legacy SSIS packages | Every package in msdb exported as a .dtsx file, preserving folder structure; encrypted packages are flagged as needing their original password |
| SSIS Catalog (SSISDB) | A full native database backup, plus CSV inventories of folders, projects, packages, and environments |
| SSRS content & configuration | Reports, data sources, and shared datasets exported directly from the ReportServer catalog, plus the SSRS config files themselves |
| SSAS databases | A native backup per database plus an XMLA definition script, via the Analysis Services AMO library |
Before touching anything, the backup step scans for ODBC DSNs, OLE DB providers, Visual Studio/SSDT installs, other SQL instances, and Windows services that depend on this one — anything high-severity stops and asks before continuing.
The uninstall step then requires a path to a completed backup set and checks for its summary file; without one, it warns loudly and asks for an explicit override rather than proceeding quietly. Once confirmed, it reads the currently installed features from the registry, stops the SQL Server, Agent, SSAS, and SSRS services, and runs the vendor's own setup.exe /ACTION=Uninstall — with optional, separately confirmed cleanup of leftover files, registry entries, and a reboot at the end.
Once the new SQL Server version is installed, the restore step connects to it and walks through the same six components — each one only restored if you confirm it individually. T-SQL scripts are replayed batch by batch, tracking success and failure counts rather than stopping at the first error; SSISDB is restored as a full database; SSRS content is written back into the catalog directly; SSAS databases are restored per database via AMO. A restore summary is written out at the end, same as the backup step.
If an uninstall or restore fails partway, there's no automatic recovery — you re-run the affected restore steps, or reinstall SQL Server again and restore from the same backup set. That's a real limitation, not an oversight: nothing here takes a VM snapshot or offers a one-click "undo the uninstall."
The actual safety net is upstream of that. The tool won't let an uninstall proceed without a provable, completed backup, and every destructive action is confirmed individually rather than run unattended — so the backup set you're left holding is always complete and current, which is what makes a manual restore a reliable rollback path in practice.
# Phase 1 - back up everything before touching the install .\Start-SQLUpgradeBackup.ps1 -SqlInstance 'SERVER01\SQL2019' -InstanceName 'SQL2019' # Phase 2 - uninstall, pointing at the completed backup set .\Start-SQLUpgradeUninstall.ps1 -InstanceName 'SQL2019' -BackupSetPath 'C:\SQLUpgrade_Backup\...' # Phase 3 - install the new SQL Server version yourself (not automated) # Phase 4 - restore onto the reinstalled instance .\Start-SQLUpgradeRestore.ps1 -SqlInstance 'SERVER01\SQL2019' -BackupSetPath 'C:\SQLUpgrade_Backup\...'
Individual components can be skipped on the backup side with switches like -SkipSSAS or -SkipSSRS; the uninstall step's feature list and setup path can also be overridden explicitly rather than auto-detected.
InplaceUpDate is released under the MIT License — no trial, no activation, same as the rest of the free tools in this suite.
SQLSetupTool handles new installs only, by design — it hands off to InplaceUpDate specifically for in-place version upgrades.
Get-sqmSQLInstanceCheck
Run this after reinstalling and restoring, to confirm the instance passes the same best-practice checks a fresh install would.
Free, MIT-licensed — clone the repository and run the backup step before your next upgrade window.