Execution Flow
Synopsis
Queries sys.server_principals JOIN sys.server_role_members for all direct sysadmin members. Each login is classified into one of five statuses. BUILTIN\Administrators always gets its own BuiltinAdmins status and is never silently excluded. The TXT report contains four sections: BuiltinAdmins, Unexpected, Disabled, SA, and Excluded accounts.
Requires dbatools. Compatible with SQL Server 2008+ (password_last_set_time and last_login_date are intentionally excluded for older version compatibility). Use
-ExcludeSysAccounts to suppress expected service accounts from the Unexpected section.Login Status Values
| Status | Meaning |
|---|---|
| BuiltinAdmins | BUILTIN\Administrators — security review required. |
| Unexpected | No exclusion defined — requires manual review. |
| Disabled | Has sysadmin rights but login is disabled. |
| Excluded | Matched by -ExcludeLogin pattern or -ExcludeSysAccounts. |
| SA | The SA account (SID 0x01). |
Syntax
Get-sqmSysadminAccounts [-SqlInstance <String[]>] # pipeline [-SqlCredential <PSCredential>] [-ExcludeLogin <String[]>] # wildcards allowed [-ExcludeSysAccounts] # adds NT SERVICE\*, NT AUTHORITY\*, ##MS_*## [-IncludeDisabled <Bool>] # default $true [-OutputPath <String>] [-ContinueOnError] [-EnableException]
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| -SqlInstance | String[] | $env:COMPUTERNAME | SQL Server instance(s). Pipeline-capable. |
| -SqlCredential | PSCredential | — | SQL connection credential. |
| -ExcludeLogin | String[] | @() | Login names or wildcard patterns to mark as Excluded. |
| -ExcludeSysAccounts | Switch | false | Auto-exclude NT SERVICE\*, NT AUTHORITY\*, ##MS_*## patterns. |
| -IncludeDisabled | Bool | $true | Include disabled sysadmin logins in the report. |
| -OutputPath | String | C:\System\WinSrvLog\MSSQL | Directory for TXT and CSV report files. |
| -ContinueOnError | Switch | false | Continue on error for an instance. |
| -EnableException | Switch | false | Throw terminating exceptions. |
Examples
# Basic audit — local instance Get-sqmSysadminAccounts # Exclude known service accounts automatically Get-sqmSysadminAccounts -SqlInstance "SQL01" -ExcludeSysAccounts # Exclude specific accounts by name pattern Get-sqmSysadminAccounts -SqlInstance "SQL01" -ExcludeLogin "DOMAIN\svc_sql","DOMAIN\dba_*"