Fully automatic SQL Server deployment - from start to a finished instance
Read settings.ini, detect the domain, validate source paths
Version, edition, instance name, port, disk layout, optional components
Check the AD account, calculate the TCP port automatically, choose the collation
SQL installation sources from the SourceShare to a local drive
4 checks: instance conflict, 64K NTFS, snapshot reminder, HPU AD group
SQL Server + optional components (SSRS, SSAS, SSMS, SSIS, TDP) + drivers
Memory, MAXDOP, TempDB, Ola Maintenance, Splunk, SQL scripts, report
settings.iniConfig\domains\<DOMAIN>.iniDEFAULT.inicollations.txt[Versions] Available_Enabled=true AND the source is reachable| # | Check | Behavior | Control |
|---|---|---|---|
| 1 | SQL instance already installed? | Warning + Yes/No dialog - No = abort | always active |
| 2 | NTFS 64K block size | Every SQL drive checked - offers to format on mismatch | Format64kCheck |
| 3 | Snapshot reminder | Info dialog - create a snapshot manually, then OK | SnapshotEnabled |
| 4 | HPU AD group membership | Get-sqmHpuAllowGroup → ADSI check - not a member = abort |
HpuCheck |
[PreInstall] in settings.ini - each check individually controlled via true/false
[Installation] Features[SerialNumbers]Installed version vs. source version (VersionInfo / filename regex)
| # | Step |
|---|---|
| 1 | Set NTFS permissions |
| 2 | Max server memory (90% RAM) |
| 2a | MAXDOP, cost threshold, ad-hoc |
| 2b | Configure the TCP port |
| 3 | SQL Agent autostart |
| 4 | Optimize TempDB (CPU-based, max 8) |
| 5 | Recovery model FULL |
| 6 | Disable the SQL Browser |
| 7 | Assign sysadmin groups |
| # | Step |
|---|---|
| 8 | SA obfuscation |
| 9 | Monitoring key in the registry |
| 10 | Instance validation (best practice) |
| 11 | Custom PostInstall script |
| 12 | Ola Maintenance Solution |
| 13 | Ola jobs (index, integrity) |
| 14 | SysDB backup job |
| 15 | User DB backup jobs (FULL/DIFF/LOG) |
| 16 | Configure the Splunk forwarder |
| 17 | Run company SQL scripts |
| 18 | Create the setup report |
[General] — SourceShare, instance name, paths[Versions] — Available: 2019, 2022, 2025[Editions] — Standard / Developer[Ports] — BasePort, PortIncrement[DiskLayout_Standard] — drive letters[PreInstall] — Format64kCheck, Snapshot, HpuCheck[Installation] — Features, TempDB parameters[Drivers] — JDBC/ODBC/DB2 Enabled + SourcePath[PostInstall] — Splunk, SqlScriptsPath[Monitoring] — MonitoringEnabled, type[SerialNumbers] — product keys per version/edition[SysadminGroups] — Standard + Domain_<NAME>Test-sqmDriverInstalled -DriverType ODBC|JDBC|DB2
ODBC/DB2: VersionInfo from MSI/EXE - JDBC: regex from the filename
[System.Version] comparison: source newer → dialog
Yes: Uninstall-sqm*Driver → Install-sqm*Driver
ProductCode from the registry → msiexec /x {GUID} /quiet
Deletes mssql-jdbc*.jar from %ProgramFiles% - no MSI
Registry MSI or Setup.exe /silent /uninstall
Status: Uninstalled | NotFound | Error
Config\domains\<DOMAIN>.iniDEFAULT.ini if no profile existssettings.ini| Parameter | Example |
|---|---|
| Disk layout | D: E: F: G: H: |
| Sysadmin groups | DOMAIN\SQL-Admins |
| Collation | Latin1_General_CI_AS |
| BasePort | 1433, 1450, 1470 |
| SourceShare | \\Server\SQL-Sources |
| Monitoring type | Splunk | TSM |
Start-SQLSetupTool.cmd
# starts as admin
# loads settings.ini
# opens MainForm
Start-AdminConfig.cmd
# global configuration
# ConfigForm.ps1
Start-DomainConfig.cmd
# maintain the domain profile
# DomainConfigForm.ps1
# New domain profile:
Config\domains\
MYDOMAIN.ini
# Setup report after
# step 18 as HTML
# in the temp directory
# opened automatically
LogCallback