mssSQLTool – PowerShell SQL Admin Toolset

🛢 mssSQLTool

PowerShell SQL Admin Toolset · dtcSoftware · Janke

v 1.0.0 PowerShell 5.1+ dbatools required 74 Funktionen MS SQL Server
📖 Referenz
🚀 Quick Start
⚙️ Konfiguration

🔄 AlwaysOn Availability Groups

Invoke-mssAddDatabaseToAvailabilityGroup AlwaysOn
Fügt eine oder mehrere Datenbanken zu einer AG hinzu (AutoSeed). Prüft bestehende Mitgliedschaft, setzt Recovery auf Full, löscht DB auf Secondaries und fügt via Automatic Seeding hinzu. Bei -All sequentielle Verarbeitung zur Lastvermeidung.
▶ 4 Beispiele anzeigen
Einzelne Datenbank hinzufügen
Invoke-mssAddDatabaseToAvailabilityGroup -AvailabilityGroup "AG_Prod" -Database "SalesDB"
Alle User-Datenbanken hinzufügen
Invoke-mssAddDatabaseToAvailabilityGroup -AvailabilityGroup "AG_Prod" -All
Mehrere Datenbanken explizit
Invoke-mssAddDatabaseToAvailabilityGroup -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" ` 
-Database "SalesDB","InventoryDB","HRApp"
Invoke-mssRemoveDatabaseFromAvailabilityGroup AlwaysOn
Entfernt Datenbanken aus ihrer AG, erkennt die AG automatisch und löscht die DB von allen Secondaries. Systemdatenbanken werden ignoriert.
▶ 3 Beispiele anzeigen
Einzelne Datenbank entfernen
Invoke-mssRemoveDatabaseFromAvailabilityGroup -Database "SalesDB"
Alle AG-Datenbanken entfernen
Invoke-mssRemoveDatabaseFromAvailabilityGroup -All
Auf expliziter Instanz
Invoke-mssRemoveDatabaseFromAvailabilityGroup -SqlInstance "SQL01" -Database "OldApp"
Invoke-mssSqlAlwaysOnAutoseeding AlwaysOn
Aktiviert Automatic Seeding auf allen Replikaten einer oder aller AGs. Setzt den Seeding-Modus aller Replikate auf "Automatic".
▶ 3 Beispiele anzeigen
Lokale Instanz (Standard)
Invoke-mssSqlAlwaysOnAutoseeding
Alle AGs auf einer Instanz aktivieren
Invoke-mssSqlAlwaysOnAutoseeding -SqlInstance "SQL01" -All
Benannte Instanz
Invoke-mssSqlAlwaysOnAutoseeding -SqlInstance "SQL01\MSSQLSERVER"
Get-mssAgHealthReport AlwaysOn
Vollständiger Zustandsbericht aller AGs: Synchronisierungsstatus, Redo/Send-Queue pro Replikat, Verbindungsstatus, Listener-Konfiguration, laufende AutoSeed-Vorgänge. Schreibt TXT + CSV ins OutputPath.
▶ 5 Beispiele anzeigen
Einfacher Health-Report
Get-mssAgHealthReport
Mit angepassten Schwellwerten
Get-mssAgHealthReport -SqlInstance "SQL01" -MaxRedoQueueMB 200 -OutputPath "D:\Reports"
Nur kritische Probleme anzeigen
Get-mssAgHealthReport -SqlInstance "SQL01" | 
Where-Object OverallStatus -eq 'Critical' | 
Format-Table AgName, ReplicaName, Database, DbSyncState, RedoQueueMB -AutoSize
Redo-Queue sortiert – größte zuerst
Get-mssAgHealthReport -SqlInstance "SQL01" | 
Where-Object Role -eq 'SECONDARY' | 
Sort-Object RedoQueueMB -Descending | 
Select-Object AgName, Database, ReplicaName, RedoQueueMB, SendQueueMB | 
Format-Table -AutoSize
AutoSeed-Vorgänge live überwachen
while ($true) { 
Clear-Host 
Get-mssAgHealthReport -SqlInstance "SQL01" | 
Where-Object Role -eq 'SEEDING' | 
Select-Object Database, DbSyncState, PercentComplete | 
Format-Table -AutoSize 
Start-Sleep 30 
}
Sync-mssAgNode AlwaysOn
Synchronisiert Logins, SQL Agent Jobs, Linked Server, Operatoren und Alerts von Primary zu allen Secondaries. Erkennt Primary automatisch. Bereinigt anschließend verwaiste User auf AG-Datenbanken.
▶ 5 Beispiele anzeigen
Vollautomatische Synchronisation
Sync-mssAgNode
Nur Logins synchronisieren
Sync-mssAgNode -SqlInstance "SQL01" -ExcludeType Jobs,LinkedServers,Operators,Alerts
Nur bestimmte AG synchronisieren
Sync-mssAgNode -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod"
Einzelnen Login gezielt synchronisieren
Sync-mssAgNode -SqlInstance "SQL01" -ObjectName "AppServiceAccount"
Ergebnis auswerten
$r = Sync-mssAgNode -SqlInstance "SQL01" 
$r | Group-Object ObjectType | ForEach-Object { 
"$($_.Name): $(@($_.Group | Where Status -eq 'Success').Count) OK, " + 
"$(@($_.Group | Where Status -eq 'Failed').Count) Fehler" 
}
Repair-mssAlwaysOnDatabases AlwaysOn
Überprüft alle AG-Datenbanken auf Probleme (SyncStatus ≠ HEALTHY/SYNCHRONIZED) und repariert sie automatisch (Remove → Cleanup → Add mit AutoSeed). Erstellt Eventlog-Quelle "MSSAlwaysOn" bei Bedarf.
▶ 3 Beispiele anzeigen
Automatische Reparatur (nur Problemfälle)
Repair-mssAlwaysOnDatabases
Alle DBs erzwingen (auch gesunde)
Repair-mssAlwaysOnDatabases -Force
Explizite Instanz mit Fehlertoleranz
Repair-mssAlwaysOnDatabases -SqlInstance "SQL01" -ContinueOnError
New-mssAlwaysOnRepairJob AlwaysOn
Erstellt einen SQL Agent Job der Repair-mssAlwaysOnDatabases periodisch ausführt (PowerShell-Subsystem). Konfigurierbar mit Zeitplan und Operator-Benachrichtigung.
▶ 3 Beispiele anzeigen
Stündlicher Repair-Job
New-mssAlwaysOnRepairJob
Täglich um 02:00 Uhr
New-mssAlwaysOnRepairJob -Schedule "FREQ=DAILY;INTERVAL=1" -StartTime "02:00:00"
Job auf allen AG-Nodes erstellen
"SQL01","SQL02","SQL03" | ForEach-Object { 
New-mssAlwaysOnRepairJob -SqlInstance $_ -Schedule "FREQ=HOURLY;INTERVAL=2" 
}
Invoke-mssFailover AlwaysOn
Fuehrt einen kontrollierten manuellen AlwaysOn-Failover mit Pre- und Post-Checks durch. Pre-Check: AG-Existenz, Primary-Rolle, Replikat-Status, Redo-Queue-Groesse (Standard: max. 50 MB). Failover: ALTER AVAILABILITY GROUP ... FAILOVER wird auf dem Ziel-Sekundaer ausgefuehrt. Post-Check: Bestaetigt neue Primary-Rolle nach konfigurierbarer Wartezeit. Unterstuetzt -WhatIf, automatische Replikat-Auswahl (kleinste Redo-Queue, SYNCHRONOUS_COMMIT bevorzugt) und -ContinueOnError.
► 5 Beispiele anzeigen
Testlauf - was wuerde passieren?
Invoke-mssFailover -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod" -WhatIf
Failover auf bestimmtes Replikat
Invoke-mssFailover -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod" ` 
-TargetReplica "SQL02" -MaxRedoQueueMB 10
Automatische Replikat-Wahl (kleinste Queue)
Invoke-mssFailover -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod"
Mit laengerer Post-Check-Wartezeit
Invoke-mssFailover -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod" ` 
-WaitAfterFailoverSeconds 60 -EnableException
Ergebnis auswerten
$result = Invoke-mssFailover -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod" 
if ($result.Status -eq 'Success') { 
Write-Host "Failover OK: $($result.OldPrimary) -> $($result.NewPrimary) in $($result.FailoverDurationSec)s" 
}

💾 Backup & Restore

Invoke-mssUserDatabaseBackup Backup
Sichert alle oder ausgewählte Benutzerdatenbanken (Full). Zielpfad wird aus Server-Properties (BackupDirectory) gelesen und muss auf \User-Db enden.
▶ 4 Beispiele anzeigen
Alle Benutzerdatenbanken sichern
Invoke-mssUserDatabaseBackup -All
Bestimmte Datenbanken auf Remote-Server
Invoke-mssUserDatabaseBackup -SqlInstance "SQL01" -Database "SalesDB","InventoryDB"
Mit alternativem Backup-Pfad
Invoke-mssUserDatabaseBackup -All -BackupPath "D:\Backup\User-Db"
Testlauf ohne Ausführung
Invoke-mssUserDatabaseBackup -All -WhatIf
Invoke-mssRestoreDatabase Restore
Kontrollierter Restore mit AG-Erkennung: entfernt DB aus AG, exportiert User, optional Pre-Restore-Backup, Restore, User-Wiederherstellung, Orphaned-User-Bereinigung, SA-Owner setzen. Unterstützt Full + Diff + Log-Sequenzen.
▶ 4 Beispiele anzeigen
Einfacher Full-Restore
Invoke-mssRestoreDatabase -SqlInstance "SQL01" ` 
-BackupFile "D:\Backup\AdventureWorks.bak" ` 
-DatabaseName "AdventureWorks"
Full + Diff + Logs
$backupSequence = @( 
"D:\Backup\AW_Full.bak", 
"D:\Backup\AW_Diff.bak", 
"D:\Backup\AW_Log1.trn", 
"D:\Backup\AW_Log2.trn" 
) 
Invoke-mssRestoreDatabase -SqlInstance "SQL01" ` 
-BackupFiles $backupSequence ` 
-DatabaseName "AdventureWorks"
Restore unter neuem Namen
Invoke-mssRestoreDatabase -SqlInstance "SQL01" ` 
-BackupFile "D:\Backup\OldDB.bak" ` 
-DatabaseName "OldDB" ` 
-NewDatabaseName "NewDB"
Mit Pre-Restore-Backup (Rollback-Sicherheit)
Invoke-mssRestoreDatabase -SqlInstance "SQL01" ` 
-BackupFile "D:\Backup\SalesDB.bak" ` 
-DatabaseName "SalesDB" ` 
-CreatePreRestoreBackup
Single-User erzwingen (DB in Benutzung)
Invoke-mssRestoreDatabase -SqlInstance "SQL01" ` 
-BackupFile "D:\Backup\SalesDB.bak" ` 
-DatabaseName "SalesDB" ` 
-ForceSingleUser
Mehrere DBs per Pipeline
"D:\Bak\DB1.bak","D:\Bak\DB2.bak" | 
Invoke-mssRestoreDatabase -SqlInstance "SQL01" -DatabaseName { [IO.Path]::GetFileNameWithoutExtension($_) }
Test-mssBackupIntegrity Backup
Prüft eine oder mehrere Backup-Dateien via RESTORE VERIFYONLY. Liefert $true bei Erfolg.
▶ 3 Beispiele anzeigen
Einzelne Datei prüfen
Test-mssBackupIntegrity -SqlInstance "SQL01" -BackupPath "D:\Backup\AdventureWorks.bak"
Alle Backups eines Verzeichnisses prüfen
Get-ChildItem "D:\Backup\*.bak" | ForEach-Object { 
$ok = Test-mssBackupIntegrity -SqlInstance "SQL01" -BackupPath $_.FullName 
[PSCustomObject]@{ File = $_.Name; Valid = $ok } 
} | Format-Table -AutoSize
Bei Fehler abbrechen
if (-not (Test-mssBackupIntegrity -SqlInstance "SQL01" -BackupPath "D:\Backup\SalesDB.bak")) { 
throw "Backup-Prüfung fehlgeschlagen!" 
}
Invoke-mssLogShrink Wartung
Shrinkt LDF-Dateien via DBCC SHRINKFILE. Berechnet Zielgröße aus ShrinkTargetPercent + MinTargetMB. Berücksichtigt AGs (leitet zum Primary). Systemdatenbanken und Offline-DBs werden übersprungen.
▶ 4 Beispiele anzeigen
Einzelne Datenbank auf 20 % schrumpfen
Invoke-mssLogShrink -Database "MyDB" -ShrinkTargetPercent 20
Alle Datenbanken (Testlauf)
Invoke-mssLogShrink -SqlInstance "SQL01" -All -WhatIf
Mit Mindestgröße
Invoke-mssLogShrink -Database "HugeDB" -ShrinkTargetPercent 10 -MinTargetMB 512
Vor Shrink ein Log-Backup machen (Full Recovery)
# 1. Log-Backup 
Backup-DbaDatabase -SqlInstance "SQL01" -Database "SalesDB" -Type Log -BackupDirectory "D:\Backup" 
# 2. Dann shrink 
Invoke-mssLogShrink -SqlInstance "SQL01" -Database "SalesDB" -ShrinkTargetPercent 15

🔒 Sicherheit

Invoke-mssSaObfuscation Sicherheit
Verschleiert das SA-Konto: umbenennen, deaktivieren, kryptographisch sicheres Zufallskennwort (Fisher-Yates-Shuffle). Abbruch wenn kein weiteres aktives sysadmin-Konto vorhanden (Status: AbortedNoSysadmin).
▶ 5 Beispiele anzeigen
Standardverschleierung (Name: msssa, 18 Zeichen)
$r = Invoke-mssSaObfuscation -SqlInstance "SQL01" 
Write-Host "Neuer Name : $($r.NewLoginName)" 
Write-Host "Kennwort : $($r.GeneratedPassword)" # SOFORT sicher verwahren!
Eigener Login-Name und längeres Kennwort
Invoke-mssSaObfuscation -SqlInstance "SQL01" -NewName "dbsvc_sys" -PasswordLength 32
Kennwort sofort in Datei sichern
$r = Invoke-mssSaObfuscation -SqlInstance "SQL01" 
if ($r.Status -eq 'Success') { 
$r.GeneratedPassword | Out-File "C:\Secure\sa_pw_$(Get-Date -f 'yyyyMMdd').txt" -Encoding UTF8 
}
Mehrere Instanzen mit Fehlertoleranz
$results = "SQL01","SQL02","SQL03" | ForEach-Object { 
Invoke-mssSaObfuscation -SqlInstance $_ -ContinueOnError 
} 
$results | Select-Object SqlInstance, NewLoginName, SysadminCheck, Status | Format-Table -AutoSize
Invoke-mssRenameSaAccount Sicherheit
Benennt das SA-Konto um (über feste SID 0x01 – umbenennungssicher) und/oder ändert den Aktivierungsstatus. Umbenennung und Aktivierung/Deaktivierung sind unabhängig voneinander.
▶ 4 Beispiele anzeigen
SA in mssa umbenennen (Standardname)
Invoke-mssRenameSaAccount
Umbenennen und deaktivieren
Invoke-mssRenameSaAccount -NewName "MyHiddenSA" -Disable
Nur aktivieren (ohne Umbenennung)
Invoke-mssRenameSaAccount -NewName "sa" -Enable
Mehrere Instanzen
"SQL01","SQL02","SQL03" | ForEach-Object { 
Invoke-mssRenameSaAccount -SqlInstance $_ -NewName "mssa" -Disable 
}
Get-mssSysadminAccounts Sicherheit
Ermittelt alle sysadmin-Logins. Bekannte Konten per -ExcludeLogin (Wildcard) als "Excluded" markieren. BUILTIN\Administrators erhält eigenen Status. Schreibt TXT + CSV ins OutputPath.
▶ 5 Beispiele anzeigen
Alle Sysadmin-Konten auflisten
Get-mssSysadminAccounts -SqlInstance "SQL01"
Systemkonten automatisch ausschließen
Get-mssSysadminAccounts -SqlInstance "SQL01" -ExcludeSysAccounts
Bekannte Konten ausschließen
Get-mssSysadminAccounts -SqlInstance "SQL01" ` 
-ExcludeLogin "NT SERVICE\*","NT AUTHORITY\*","CONTOSO\SQLAdmins","msssa" ` 
-ExcludeSysAccounts
Nur unerwartete Konten anzeigen
Get-mssSysadminAccounts -SqlInstance "SQL01" -ExcludeSysAccounts | 
Where-Object Status -in 'Unexpected','BuiltinAdmins' | 
Format-Table SqlInstance, LoginName, LoginType, IsEnabled -AutoSize
Zusammenfassung über alle Instanzen
$all = Get-mssSysadminAccounts -SqlInstance "SQL01","SQL02","SQL03" ` 
-ExcludeLogin "NT SERVICE\*","msssa" -ContinueOnError 
$all | Group-Object SqlInstance | ForEach-Object { 
$u = @($_.Group | Where-Object Status -eq 'Unexpected').Count 
"$($_.Name): $($_.Count) gesamt, $u unerwartet$(if($u -gt 0){' ← PRÜFEN'})" 
}
Invoke-mssLoginAudit Sicherheit
Umfassender Login-Audit: Policy-Verstöße (CHECK_POLICY/EXPIRATION/MUST_CHANGE), Kennwortalter, Inaktivität, doppelte SIDs, optionale AD-Orphan-Erkennung. Schreibt LoginAudit_*.txt und *.csv.
▶ 5 Beispiele anzeigen
Standard-Audit
Invoke-mssLoginAudit -SqlInstance "SQL01"
Mit angepassten Schwellwerten
Invoke-mssLoginAudit -SqlInstance "SQL01" ` 
-InactivityThresholdDays 60 ` 
-MaxPasswordAgeDays 90 ` 
-ExcludeLogin "NT SERVICE\*","SA"
Mit AD-Orphan-Prüfung (erfordert RSAT)
Invoke-mssLoginAudit -SqlInstance "SQL01" -CheckAdOrphans -IncludeSystemLogins
Nur Policy-Verstöße filtern
$r = Invoke-mssLoginAudit -SqlInstance "SQL01" -ExcludeLogin "NT SERVICE\*" 
$r | Where-Object Category -eq 'Policy' | Format-Table LoginName, Issue -AutoSize
Mehrere Instanzen parallel
"SQL01","SQL02","SQL03" | Invoke-mssLoginAudit -ContinueOnError
Copy-mssLogins Sicherheit
Kopiert SQL- und Windows-Logins von einer Quellinstanz auf eine Zielinstanz inkl. Passwort-Hash (HASHED) und SID-Mapping. Prüft Windows-Logins gegen Active Directory (AD-Orphans werden übersprungen). Gleicht bei Bedarf den Auth-Modus an (Mixed/Windows). Repariert Orphaned-User auf allen Ziel-DBs. Deaktiviert/reaktiviert die konfigurierte Default-Policy via finally-Block (idempotent).
▶ 4 Beispiele anzeigen
Alle Logins kopieren
Copy-mssLogins -SourceInstance "SQL01" -TargetInstance "SQL02"
Auth-Modus automatisch angleichen + Dienst neu starten
Copy-mssLogins -SourceInstance "SQL01" -TargetInstance "SQL02" ` 
-AdjustAuthMode -RestartServiceIfRequired
Bestimmte Logins ausschließen
Copy-mssLogins -SourceInstance "SQL01" -TargetInstance "SQL02" ` 
-ExcludeLogin "OldApp*","TestUser"
Mehrere Zielinstanzen
"SQL02","SQL03","SQL04" | ForEach-Object { 
Copy-mssLogins -SourceInstance "SQL01" -TargetInstance $_ -ContinueOnError 
}
Get-mssADAccountStatus Sicherheit
AD-Status für SQL Service Accounts und Windows-Logins: Enabled, Locked, PasswordExpired, LastLogon.
▶ 2 Beispiele anzeigen
Status eines Service Accounts prüfen
Get-mssADAccountStatus -SamAccountName "svc-sqlserver"
Set-mssDatabaseOwner Sicherheit
DB-Owner einheitlich auf sa setzen. Systemdatenbanken übersprungen. Unterstützt -WhatIf.
▶ 2 Beispiele anzeigen
Alle User-DBs auf sa setzen
Set-mssDatabaseOwner -SqlInstance "SQL01" -All

🩺 Diagnose & Health

Get-mssDatabaseHealth Diagnose
Sammelbericht je Datenbank: Recovery-Modell, letzte DBCC CHECKDB, Backup-Zeiten (Full/Diff/Log), AutoGrowth-Ereignisse (Default Trace), VLF-Anzahl, Datenbankgröße, Status. Schreibt TXT + CSV.
▶ 4 Beispiele anzeigen
Standard-Health-Check
Get-mssDatabaseHealth
Inkl. Systemdatenbanken
Get-mssDatabaseHealth -SqlInstance "SQL01" -IncludeSystemDatabases -OutputPath "D:\Reports"
Datenbanken ohne aktuelles Backup finden
Get-mssDatabaseHealth -SqlInstance "SQL01" | 
Where-Object { $_.LastFullBackup -lt (Get-Date).AddDays(-2) } | 
Select-Object DatabaseName, LastFullBackup, RecoveryModel
Hohe VLF-Anzahl identifizieren
Get-mssDatabaseHealth -SqlInstance "SQL01" | 
Where-Object VlfCount -gt 1000 | 
Sort-Object VlfCount -Descending | 
Format-Table DatabaseName, VlfCount, LogSizeMB -AutoSize
Get-mssSQLInstanceCheck Diagnose
Best-Practice-Prüfungen: MAXDOP (kernbasierte Empfehlung), Max Server Memory, Cost Threshold for Parallelism (≥50), SA-Konto, xp_cmdshell, AutoGrowth-Einstellungen, TempDB-Dateien, Volume-Isolation, SQL-Version.
▶ 4 Beispiele anzeigen
Standard-Check lokale Instanz
Get-mssSQLInstanceCheck
Detaillierter Report
Get-mssSQLInstanceCheck -SqlInstance "SQL01\INSTANCE" -Detailed
Nur Warnungen anzeigen
Get-mssSQLInstanceCheck -SqlInstance "SQL01" | 
Where-Object Status -in 'Warning','Critical' | 
Format-Table Check, CurrentValue, RecommendedValue, Status -AutoSize
Alle SQL-Instanzen in der Umgebung prüfen
"SQL01","SQL02","SQL03","SQL04" | ForEach-Object { 
Get-mssSQLInstanceCheck -SqlInstance $_ -ContinueOnError 
} | Where-Object Status -eq 'Warning' | Format-Table SqlInstance, Check, CurrentValue
Get-mssTempDbRecommendation Performance
Analysiert TempDB-Konfiguration: Dateianzahl (CPU-Kerne, max 8), gleiche Größen, MB-basiertes AutoGrow, separate Laufwerke. Gibt strukturierte Empfehlungen zurück.
▶ 3 Beispiele anzeigen
TempDB-Analyse
Get-mssTempDbRecommendation -SqlInstance "SQL01"
Nur Warnungen ausgeben
Get-mssTempDbRecommendation -SqlInstance "SQL01" | 
Where-Object Status -ne 'OK' | 
Select-Object Status, Messages, Recommendations
Report in Datei schreiben
Get-mssTempDbRecommendation -SqlInstance "SQL01" -OutputPath "D:\Reports"
Get-mssDiskSpaceReport Kapazität
Freier Speicherplatz aller SQL-relevanten Volumes via sys.dm_os_volume_stats, AutoGrowth-Volumen (Default Trace), geschätzte Tage bis Erschöpfung, Warnung unter WarnThresholdPct.
▶ 4 Beispiele anzeigen
Standard-Bericht
Get-mssDiskSpaceReport
Mit angepasstem Warn-Schwellwert
Get-mssDiskSpaceReport -SqlInstance "SQL01" -WarnThresholdPct 15 -OutputPath "D:\Reports"
Kritische Volumes hervorheben
Get-mssDiskSpaceReport -SqlInstance "SQL01" | 
Where-Object Status -eq 'Warning' | 
Sort-Object DaysUntilFull | 
Format-Table VolumeName, FreeGB, DaysUntilFull, Status -AutoSize
Mehrere Instanzen täglich per Scheduled Task
"SQL01","SQL02","SQL03" | ForEach-Object { 
Get-mssDiskSpaceReport -SqlInstance $_ -WarnThresholdPct 10 -ContinueOnError 
} | Where-Object Status -eq 'Warning' | Export-Csv "D:\Reports\DiskWarnings.csv" -NoTypeInformation
Get-mssOperationStatus Monitoring
Zeigt Fortschritt und geschätzte Restdauer aktiver Backup-, Restore- und AutoSeed-Operationen (sys.dm_exec_requests, sys.dm_hadr_physical_seeding_stats).
▶ 4 Beispiele anzeigen
Alle aktiven Operationen
Get-mssOperationStatus
Nur AutoSeed-Vorgänge
Get-mssOperationStatus -SqlInstance "SQL01" -OperationType AutoSeed
Live-Aktualisierung alle 10 Sekunden
Get-mssOperationStatus -Continuous -RefreshSeconds 10
Backup-Fortschritt während Restore überwachen
while ($true) { 
$ops = Get-mssOperationStatus -SqlInstance "SQL01" -OperationType Restore 
if (-not $ops) { Write-Host "Restore abgeschlossen."; break } 
$ops | Format-Table Database, PercentComplete, EstimatedTimeRemaining -AutoSize 
Start-Sleep 15 
}
Get-mssSpnReport Diagnose
Prüft die gesetzten SPNs für alle SQL Server-Instanzen auf einem Computer. Ermittelt automatisch Dienstkonten und leitet daraus das AD-Konto ab. Prüft die vier erwarteten MSSQLSvc-SPNs (Hostname/FQDN mit Port bzw. Instanzname). Liefert fertige setspn.exe-Kommandos für fehlende SPNs. Schreibt TXT + CSV ins OutputPath.
▶ 4 Beispiele anzeigen
Lokalen Server prüfen
Get-mssSpnReport
Remote-Server analysieren
Get-mssSpnReport -ComputerName "SQL01" -OutputPath "D:\Reports"
Nur Standardinstanz prüfen
Get-mssSpnReport -ComputerName "SQL01" -InstanceFilter "MSSQLSERVER"
Mehrere Server – fehlende SPNs zusammenfassen
"SQL01","SQL02","SQL03" | ForEach-Object { 
Get-mssSpnReport -ComputerName $_ -ContinueOnError 
} | Where-Object Status -eq 'Missing' | 
Select-Object ComputerName, InstanceName, SpnValue, SetSpnCommand | 
Format-Table -AutoSize
Get-mssConnectionStats Diagnose
Analysiert aktive SQL Server Verbindungen und Verbindungsstatistiken. Liest sys.dm_exec_sessions, sys.dm_exec_requests und sys.dm_exec_connections. Gruppiert nach Application, Login, Host oder Database. Zeigt Verbindungsauslastung (% von max connections), aktive Requests, CPU-Nutzung, blockierte Sessions und aelteste Verbindungen. Optionaler CSV-Export. System-Verbindungen optional einschliessbar.
► 5 Beispiele anzeigen
Verbindungen nach Applikation gruppieren
Get-mssConnectionStats -SqlInstance "SQL01"
Top-10 Login-Verbindungen
Get-mssConnectionStats -SqlInstance "SQL01" -GroupBy Login -TopN 10
Verbindungen nach Datenbank inkl. System-Sessions
Get-mssConnectionStats -SqlInstance "SQL01" -GroupBy Database -IncludeSystemConnections
Blockierte Sessions anzeigen
$stats = Get-mssConnectionStats -SqlInstance "SQL01" 
$stats.Summary 
$stats.ActiveRequests | Where-Object BlockedBy -gt 0 | Format-Table
Mit CSV-Report
Get-mssConnectionStats -SqlInstance "SQL01" -GroupBy Host -OutputPath "D:\Reports"
Get-mssOrphanedFiles Diagnose
Findet MDF/LDF/NDF-Datenbankdateien, die keiner Datenbank zugeordnet sind. Liest alle registrierten Pfade aus sys.master_files und vergleicht diese mit den tatsaechlich vorhandenen Dateien im Dateisystem. Suchverzeichnisse werden automatisch aus sys.master_files und den SQL-Registry-Standardpfaden ermittelt oder explizit angegeben. Hinweis bei Remote-Instanzen: Dateisystemzugriff erfolgt vom lokalen Computer; UNC-Pfade empfohlen.
► 4 Beispiele anzeigen
Lokale Instanz pruefen
Get-mssOrphanedFiles -SqlInstance "SQL01"
Bestimmte Verzeichnisse rekursiv durchsuchen
Get-mssOrphanedFiles -SqlInstance "SQL01" -SearchPath "D:\SQLData","E:\SQLLog" -Recurse
Remote-Instanz mit UNC-Pfad
Get-mssOrphanedFiles -SqlInstance "SQL01" ` 
-SearchPath "\\SQL01\D$\SQLData","\\SQL01\E$\SQLLog"
Ergebnis auswerten und Groesse summieren
$orphans = Get-mssOrphanedFiles -SqlInstance "SQL01" 
Write-Host "$($orphans.OrphanedFiles) verwaiste Dateien, $($orphans.TotalOrphanedMB) MB gesamt" 
$orphans.Files | Sort-Object SizeMB -Descending | Format-Table FileName, SizeMB, LastModified
Invoke-mssPatchAnalysis Diagnose
Analysiert den Patch-Stand von SQL Server Instanzen anhand einer eingebetteten Build-Referenztabelle (SQL 2016–2022, alle CUs). Vergleicht die installierte Build-Nummer mit dem aktuell bekannten Stand und klassifiziert als: UpToDate, MinorUpdate (1–2 Builds), MajorUpdate (3–4), Critical (5+ Builds zurueck). Pipeline-faehig: mehrere Instanzen in einem Aufruf. Optionaler CSV-Export.
► 5 Beispiele anzeigen
Lokale Instanz pruefen
Invoke-mssPatchAnalysis
Mehrere Instanzen per Pipeline
"SQL01","SQL02","SQL03" | Invoke-mssPatchAnalysis
Nur kritische Instanzen anzeigen
"SQL01","SQL02","SQL03" | Invoke-mssPatchAnalysis | 
Where-Object PatchStatus -in @('Critical','MajorUpdate') | 
Select-Object SqlInstance, ProductVersion, LatestKnownLabel, BuildsBehind, PatchStatus
Mit Bericht-Export
Invoke-mssPatchAnalysis -SqlInstance "SQL01" -OutputPath "D:\Reports"
Alle Instanzen aus einer Liste
Get-Content "C:\Scripts\sql-instances.txt" | Invoke-mssPatchAnalysis -OutputPath "D:\Reports"

⚡ Performance

Get-mssMissingIndexes Performance
Fehlende Indizes aus dem DMV-Cache (sys.dm_db_missing_index_details): Impact-Score, Tabelle, empfohlene Spalten.
▶ 2 Beispiele anzeigen
Top-20 fehlende Indizes
Get-mssMissingIndexes -SqlInstance "SQL01" -TopN 20
Get-mssBlockingReport Performance
Aktuelle Blockierungsketten aus DMVs: Lead-Blocker, wartende Sessions, SQL-Text, Wartezeiten.
▶ 2 Beispiele anzeigen
Aktuelle Blocking-Ketten
Get-mssBlockingReport -SqlInstance "SQL01"
Get-mssDeadlockReport Performance
Deadlock-Ereignisse aus der System Health XEvent Session: Opfer, Ressource, SQL-Text, Zeitstempel.
▶ 2 Beispiele anzeigen
Alle Deadlocks der letzten Stunden
Get-mssDeadlockReport -SqlInstance "SQL01"
Get-mssLongRunningQueries Performance
Lang laufende Queries aus sys.dm_exec_requests: Session-ID, Laufzeit, CPU, Reads, Wait-Type, SQL-Text.
▶ 2 Beispiele anzeigen
Queries ab 30 Sekunden
Get-mssLongRunningQueries -SqlInstance "SQL01" -MinDurationSeconds 30
Get-mssIndexFragmentation Performance
Analysiert Index-Fragmentierung mit automatischer Empfehlung: 5–30 % → REORGANIZE, >30 % → REBUILD. Filterbar nach Datenbank, Tabelle, Mindest-Fragmentierung.
▶ 4 Beispiele anzeigen
Analyse einer Datenbank
Get-mssIndexFragmentation -Database "AdventureWorks" -MinFragmentationPercent 10
Nur REBUILD-Kandidaten
Get-mssIndexFragmentation -SqlInstance "SQL01" -Database "SalesDB" | 
Where-Object Recommendation -eq 'REBUILD' | 
Sort-Object FragmentationPercent -Descending | 
Select-Object TableName, IndexName, FragmentationPercent, Recommendation | 
Format-Table -AutoSize
Alle Datenbanken auf Instanz
Get-mssIndexFragmentation -SqlInstance "SQL01" -All -MinFragmentationPercent 30
Bestimmte Tabelle analysieren
Get-mssIndexFragmentation -SqlInstance "SQL01" -Database "Sales" -TableName "OrderDetails"
Invoke-mssUpdateStatistics Performance
UPDATE STATISTICS mit konfigurierbarem Sample-Prozentsatz, optional nur geänderte Statistiken. Einschränkbar auf Datenbank, Tabelle oder Statistik-Name.
▶ 3 Beispiele anzeigen
Datenbank mit 10 % Sample
Invoke-mssUpdateStatistics -Database "SalesDB" -SamplePercent 10
Alle User-DBs, nur geänderte Statistiken
Invoke-mssUpdateStatistics -SqlInstance "SQL01" -All -OnlyModified
FULLSCAN für kritische Tabelle
Invoke-mssUpdateStatistics -SqlInstance "SQL01" -Database "Sales" ` 
-TableName "OrderDetails" -FullScan
Get-mssAutoGrowthReport Kapazität
Liest AutoGrowth-Ereignisse aus dem Default Trace. Zeigt Datenbank, Datei, Datum, Wachstum in MB. Hilft bei der Planung von Dateigrößen und Autogrow-Einstellungen.
▶ 3 Beispiele anzeigen
AutoGrowth-Bericht letzte 7 Tage
Get-mssAutoGrowthReport -SqlInstance "SQL01" -HistoryDays 7
Häufigste AutoGrowth-Datenbanken
Get-mssAutoGrowthReport -SqlInstance "SQL01" | 
Group-Object DatabaseName | Sort-Object Count -Descending | 
Select-Object Name, Count | Format-Table -AutoSize
Gesamtwachstum pro DB berechnen
Get-mssAutoGrowthReport -SqlInstance "SQL01" | 
Group-Object DatabaseName | 
ForEach-Object { [PSCustomObject]@{ 
DB = $_.Name 
GrowthMB = ($_.Group | Measure-Object GrowthMB -Sum).Sum 
}} | Sort-Object GrowthMB -Descending
Invoke-mssQueryStore Performance
Umfassende Query Store Verwaltung fuer eine, mehrere oder alle Benutzerdatenbanken. -Configure aktiviert/konfiguriert den Query Store (ALTER DATABASE SET QUERY_STORE). -Query liest Top-N Queries nach Dauer, CPU, Reads oder Ausfuehrungsanzahl. -Diagnose erkennt automatisch 5 Problemklassen: READ_ONLY-Status, Speicherdruck, Plan-Regression, Forced-Plan-Fehler, hohe Laufzeitvarianz. Ohne Switch: Query + Diagnose (Report-Modus). Ergebnisse als CSV + TXT unter OutputPath\QueryStore.
► 5 Beispiele anzeigen
Report fuer alle Datenbanken (Query + Diagnose)
Invoke-mssQueryStore -SqlInstance "SQL01" -All
Query Store konfigurieren und sofort abfragen
Invoke-mssQueryStore -SqlInstance "SQL01" ` 
-Database "SalesDB","CRM" ` 
-Configure -Query -Diagnose ` 
-MaxStorageSizeMB 2000 -QueryCaptureMode AUTO
Top 50 Queries nach CPU, letzte 48 Stunden
Invoke-mssQueryStore -SqlInstance "SQL01" ` 
-Database "SalesDB" -Query ` 
-TopN 50 -OrderBy CPU -LookbackHours 48
Diagnose mit niedrigem Speicher-Schwellwert
Invoke-mssQueryStore -SqlInstance "SQL01" -All ` 
-Diagnose -StorageWarningPct 70 -OutputPath "D:\Reports\QS"
Query Store deaktivieren
Invoke-mssQueryStore -SqlInstance "SQL01" ` 
-Database "OldDB" -Configure -OperationMode OFF
Invoke-mssExtendedEvents Performance
Verwaltet Extended Events Sessions fuer die Performance-Analyse vollstaendig per PowerShell. -Create legt eine Session anhand eines Templates an (SlowQueries, Blocking, Waits, Deadlocks, AllInOne). -Start / -Stop steuern die Session. -Read liest Ereignisse aus RingBuffer oder XEL-Datei. -Diagnose aggregiert: Top Slow Queries, Top Wait Types, Lock Contention, CXPACKET-Druck, Blocking-Ketten, Deadlocks (XML je Deadlock). Ohne Switch: Read + Diagnose. Ergebnisse als CSV + TXT unter OutputPath\XEvents.
► 5 Beispiele anzeigen
AllInOne-Session erstellen und starten
Invoke-mssExtendedEvents -SqlInstance "SQL01" -Create -Start
Nur Slow Queries > 2s in Datei aufzeichnen
Invoke-mssExtendedEvents -SqlInstance "SQL01" ` 
-Template SlowQueries ` 
-SlowQueryThresholdMs 2000 ` 
-TargetType File -Create -Start
Session auslesen und Bericht erstellen
Invoke-mssExtendedEvents -SqlInstance "SQL01" ` 
-Read -Diagnose -LookbackMinutes 60 -TopN 25
Deadlock-Trace einrichten
Invoke-mssExtendedEvents -SqlInstance "SQL01" ` 
-SessionName "DeadlockCapture" ` 
-Template Deadlocks -TargetType File -Create -Start
Session stoppen und entfernen
Invoke-mssExtendedEvents -SqlInstance "SQL01" -Stop -Drop
Get-mssWaitStatistics Performance
Liest und analysiert SQL Server Wait Statistics aus sys.dm_os_wait_stats. Filtert automatisch 30+ Idle-Wait-Typen heraus. Kategorisiert 25+ bekannte Wait Types (CPU, IO, Locking, Memory, Network, TempDB, Log, Parallelism ...) und liefert Handlungsempfehlungen. Delta-Modus: Mit -SnapshotBefore und -SaveSnapshot lassen sich Intervall-Deltas berechnen - ideal zur Lastanalyse waehrend eines Fensters. Optionaler CSV-Export.
► 5 Beispiele anzeigen
Aktuelle Top-25 Wait Types
Get-mssWaitStatistics -SqlInstance "SQL01"
Inkl. Idle-Waits (alle Wait Types)
Get-mssWaitStatistics -SqlInstance "SQL01" -IncludeIdle -TopN 50
Delta-Messung ueber 5 Minuten
# Snapshot vorher 
$snap = Get-mssWaitStatistics -SqlInstance "SQL01" -SaveSnapshot 
Start-Sleep 300 
# Delta messen 
Get-mssWaitStatistics -SqlInstance "SQL01" -SnapshotBefore $snap.Snapshot
Nur Locking- und IO-Waits filtern
Get-mssWaitStatistics -SqlInstance "SQL01" | 
Select-Object -ExpandProperty WaitStats | 
Where-Object Category -in @('Locking','IO') | 
Sort-Object WaitTimeSec -Descending | Format-Table
Mit CSV-Export
Get-mssWaitStatistics -SqlInstance "SQL01" -OutputPath "D:\Reports"
Get-mssPerfCounters Performance
Liest die wichtigsten SQL Server Performance Counter aus sys.dm_os_performance_counters: Buffer Cache Hit Ratio, Page Life Expectancy, Batch Requests/sec, Kompilierungen, Lock Waits, Deadlocks, Speicher, Verbindungen, Scans und mehr. Interpretiert Werte automatisch und kennzeichnet auffaellige Werte mit CRITICAL/WARNING-Markierungen. Gibt ein Summary-Objekt mit den wichtigsten KPIs (PLE, BHR, User Connections, Anzahl Warnungen) zurueck.
► 5 Beispiele anzeigen
Alle Key-Counter lesen
Get-mssPerfCounters -SqlInstance "SQL01"
Nur Buffer- und Memory-Counter
Get-mssPerfCounters -SqlInstance "SQL01" -Category "Buffer","Memory"
Nur Warnungen ausgeben
$perf = Get-mssPerfCounters -SqlInstance "SQL01" 
$perf.Summary 
$perf.Counters | Where-Object Interpretation -ne '' | Format-Table CounterName, Value, Interpretation
PLE-Verlauf ueberwachen (Loop)
while ($true) { 
$s = (Get-mssPerfCounters -SqlInstance "SQL01").Summary 
Write-Host "$(Get-Date -f HH:mm:ss) PLE=$($s.PageLifeExpectancy) BHR=$($s.BufferCacheHitRatioPct)% Conn=$($s.UserConnections)" 
Start-Sleep 60 
}
Mit CSV-Export
Get-mssPerfCounters -SqlInstance "SQL01" -OutputPath "D:\Reports"
Invoke-mssPerfBaseline Performance
Erfasst und vergleicht SQL Server Performance-Baselines. Drei Aktionen: Capture speichert Wait Statistics + 15 Key-Perf-Counter als JSON-Snapshot. Compare laedt zwei Snapshots und berechnet Deltas: WaitDeltas (sortiert nach DeltaWaitSec) und CounterDeltas (sortiert nach absoluter Aenderung) - ideal fuer Before/After-Vergleiche nach Patches, Konfigurationsaenderungen oder Lastprofil-Analysen. List zeigt alle vorhandenen Baseline-Dateien mit Groesse und Zeitstempel.
► 5 Beispiele anzeigen
Baseline vor Aenderung erfassen
Invoke-mssPerfBaseline -SqlInstance "SQL01" -Action Capture ` 
-BaselineName "BeforePatch" -OutputPath "D:\Baselines"
Baseline nach Aenderung erfassen
Invoke-mssPerfBaseline -SqlInstance "SQL01" -Action Capture ` 
-BaselineName "AfterPatch" -OutputPath "D:\Baselines"
Zwei Baselines vergleichen
Invoke-mssPerfBaseline -Action Compare ` 
-BaselineA "D:\Baselines\PerfBaseline_SQL01_..._BeforePatch.json" ` 
-BaselineB "D:\Baselines\PerfBaseline_SQL01_..._AfterPatch.json"
Alle Baselines auflisten
Invoke-mssPerfBaseline -Action List -OutputPath "D:\Baselines"
Wait-Deltas nach Patch anzeigen
$cmp = Invoke-mssPerfBaseline -Action Compare -BaselineA $fileA -BaselineB $fileB 
$cmp.WaitDeltas | Select-Object -First 10 | Format-Table WaitType, DeltaWaitSec, Category, Recommendation

🔧 Ola Hallengren Wartung

Install-mssOlaMaintenanceSolution Wartung
Lädt Ola Hallengrens Maintenance Solution von GitHub, extrahiert und führt in korrekter Reihenfolge aus: CommandExecute → CommandLog → DatabaseBackup → DatabaseIntegrityCheck → IndexOptimize. Erstellt nur Objekte, keine Jobs.
▶ 3 Beispiele anzeigen
Erstinstallation
Install-mssOlaMaintenanceSolution -SqlInstance "SQL01"
Aktualisierung (bestehende Objekte überschreiben)
Install-mssOlaMaintenanceSolution -SqlInstance "SQL01" -Force
Kompletter Wartungs-Onboarding-Stack
# 1. Ola installieren 
Install-mssOlaMaintenanceSolution -SqlInstance "SQL01" 
 
# 2. Prüfen ob Installation ok 
Test-mssOlaInstallation -SqlInstance "SQL01" 
 
# 3. Maintenance-Jobs anlegen 
New-mssOlaMaintenanceJobs -SqlInstance "SQL01" -ScheduleTime "23:00" 
 
# 4. System-DB-Backup-Job anlegen 
New-mssOlaSysDbBackupJob -SqlInstance "SQL01" -ScheduleTime "20:00"
New-mssOlaMaintenanceJobs Wartung
Erstellt IndexOptimize (User-DBs) und IntegrityCheck (User- und System-DBs) als SQL Agent Jobs. Job-Namen aus Modulkonfiguration. Optimierte Standardparameter (FillFactor 90, SortInTempdb Y, etc.).
▶ 4 Beispiele anzeigen
Standard-Jobs erstellen
New-mssOlaMaintenanceJobs -SqlInstance "SQL01"
Mit angepassten Zeitplan und Operator
New-mssOlaMaintenanceJobs -SqlInstance "SQL01" ` 
-ScheduleTime "22:00" -ScheduleDay 64 -OperatorName "DBAs"
Mit angepassten Fragmentierungsschwellen
New-mssOlaMaintenanceJobs -SqlInstance "SQL01" ` 
-FragmentationLevel1 10 -FragmentationLevel2 40 ` 
-FillFactor 85 -MaxDOP 4
Vorhandene Jobs aktualisieren
New-mssOlaMaintenanceJobs -SqlInstance "SQL01" -Update
New-mssOlaSysDbBackupJob Backup
Erstellt SQL Agent Job für tägliches Full-Backup der Systemdatenbanken (master, model, msdb) via Ola DatabaseBackup. Ablage in <BackupDirectory>\Sys-db.
▶ 2 Beispiele anzeigen
Standard-Job
New-mssOlaSysDbBackupJob -SqlInstance "SQL01"
Mit Zeitplan und Operator
New-mssOlaSysDbBackupJob -SqlInstance "SQL01" -ScheduleTime "20:00" -OperatorName "DBAs"
New-mssOlaUsrDbBackupJob Backup
Erstellt separate SQL Agent Jobs für FULL-, DIFF- und LOG-Backup der User-Datenbanken via Ola DatabaseBackup. Jeder Typ erhält einen eigenen Zeitplan mit konfigurierbaren Wochentagen (-FullScheduleDays, -DiffScheduleDays, -LogScheduleDays) und Startzeit. Backup-Ziel: <BackupDirectory>\Usr-db. Job-Namen aus Modulkonfiguration (OlaJobNameFull / OlaJobNameDiff / OlaJobNameLog). Wochentage als Array; Kurzformen Weekdays, Weekend, EveryDay werden aufgelöst.
▶ 4 Beispiele anzeigen
Nur FULL-Job (sonntags)
New-mssOlaUsrDbBackupJob -SqlInstance "SQL01" -Full ` 
-FullScheduleDays @('Sunday') -FullScheduleTime "21:00"
Alle drei Typen mit individuellem Zeitplan
New-mssOlaUsrDbBackupJob -SqlInstance "SQL01" -Full -Diff -Log ` 
-FullScheduleDays @('Sunday') -FullScheduleTime "21:00" ` 
-DiffScheduleDays @('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') ` 
-DiffScheduleTime "21:00" ` 
-LogScheduleDays @('EveryDay') -LogScheduleTime "00:00" ` 
-OperatorName "DBAs"
LOG-Job für bestimmte Datenbanken
New-mssOlaUsrDbBackupJob -SqlInstance "SQL01" -Log ` 
-Databases "SalesDB,HRDB" ` 
-LogScheduleDays @('EveryDay') -LogScheduleTime "00:30"
Vorhandene Jobs aktualisieren
New-mssOlaUsrDbBackupJob -SqlInstance "SQL01" -Full -Diff -Log -Update
Invoke-mssFormatDrive64k Wartung
Prüft ein NTFS-Laufwerk auf 64 KB-Allokationseinheit (Microsoft-Empfehlung für SQL Server-Datendateien) und formatiert es bei Bedarf. Ablauf: Sicherheitsprüfungen (kein C:, NTFS, eine Partition) → Daten per robocopy sichern → Format-Volume mit 65536 Byte Clustergröße → Daten zurückspielen → Backup bereinigen. Laufwerke die von einem Prozess geöffnet sind, werden abgelehnt. C: ist hartkodiert gesperrt.
▶ 3 Beispiele anzeigen
Prüfen und bei Bedarf formatieren
Invoke-mssFormatDrive64k -DriveLetter D
Ohne Bestätigung, abweichender Backup-Pfad
Invoke-mssFormatDrive64k -DriveLetter E -BackupPath "C:\Backup\DriveTemp" -Force
Testlauf ohne Änderungen (WhatIf)
Invoke-mssFormatDrive64k -DriveLetter D -WhatIf
Test-mssSQLFirewall Diagnose
Testet TCP-Erreichbarkeit des SQL Servers durch Firewall und Netzwerk. Standard: Port 1433. Für benannte Instanzen wird der dynamische TCP-Port via SQL Browser (UDP 1434) ermittelt. Gibt je Server ein Objekt mit TcpReachable, DynamicPort, Status (OK / Failed / Error) und Detailmeldung zurück. Pipeline-fähig für mehrere Server.
▶ 3 Beispiele anzeigen
Standardinstanz testen (Port 1433)
Test-mssSQLFirewall -Server "SQL01"
Benannte Instanz – Port via SQL Browser
Test-mssSQLFirewall -Server "SQL01" -Instance "SAGE"
Mehrere Server per Pipeline
"SQL01","SQL02","SQL03" | Test-mssSQLFirewall -Instance "PROD" -TimeoutSeconds 3 | 
Format-Table Server, Port, TcpReachable, Status -AutoSize
Test-mssOlaInstallation Diagnose
Prüft ob Ola Hallengrens Maintenance Solution installiert ist (DatabaseBackup, CommandLog, DatabaseIntegrityCheck, IndexOptimize).
▶ 2 Beispiele anzeigen
Prüfung
Test-mssOlaInstallation -SqlInstance "SQL01"
Als Bedingung in einem Skript
if (-not (Test-mssOlaInstallation -SqlInstance "SQL01")) { 
Install-mssOlaMaintenanceSolution -SqlInstance "SQL01" 
}

⚙️ Konfiguration

Get-mssConfig Konfiguration
Liest die Modulkonfiguration (LogPath, OutputPath, CentralPath, Ola-Job-Namen, TSM-Management-Klassen). Ohne Parameter: komplette Hashtable. Mit -Key: einzelner Wert.
▶ 3 Beispiele anzeigen
Gesamte Konfiguration ausgeben
Get-mssConfig
Einzelnen Wert lesen
Get-mssConfig -Key 'OutputPath' 
Get-mssConfig -Key 'LogPath'
In Skript verwenden
$outPath = Get-mssConfig -Key 'OutputPath' 
$report = Get-mssDatabaseHealth -SqlInstance "SQL01" -OutputPath $outPath
Set-mssConfig Konfiguration
Setzt Konfigurationswerte dauerhaft (%APPDATA%\MSSQLTools\config.json). Pfade werden geprüft und erstellt.
▶ 4 Beispiele anzeigen
Pfade setzen
Set-mssConfig -LogPath "D:\Logs\SQL" -OutputPath "D:\Reports\SQL" -CentralPath "\\Fileserver\SQL"
Ola-Job-Namen anpassen
Set-mssConfig -OlaJobNameFull "PROD-FULL" -OlaJobNameIndexOpt "PROD-IndexOpt"
TSM-Management-Klassen setzen
Set-mssConfig -TsmManagementClasses @('MC_10','MC_30','MC_100')
Auto-Update deaktivieren
Set-mssConfig -AutoUpdate $false
Compare-mssServerConfiguration Konfiguration
Vergleicht sp_configure, Instanz-Eigenschaften (Collation, Version, MaxMemory) und optional Datenbank-Einstellungen zweier SQL Server-Instanzen. Ausgabe mit Alt/Neu-Werten.
▶ 3 Beispiele anzeigen
Zwei Server vergleichen
Compare-mssServerConfiguration -SourceInstance "SQL01" -TargetInstance "SQL02"
Nur Unterschiede anzeigen
Compare-mssServerConfiguration -SourceInstance "SQL01" -TargetInstance "SQL02" | 
Where-Object { $_.SourceValue -ne $_.TargetValue } | 
Format-Table Setting, SourceValue, TargetValue -AutoSize
Template-Server als Referenz für alle Instanzen
$targets = "SQL02","SQL03","SQL04" 
$targets | ForEach-Object { 
$diffs = Compare-mssServerConfiguration -SourceInstance "SQL01" -TargetInstance $_ | 
Where-Object { $_.SourceValue -ne $_.TargetValue } 
if ($diffs) { Write-Host "$_ hat $($diffs.Count) Abweichungen"; $diffs | Format-Table } 
}
Invoke-mssCollationChange Konfiguration
Ändert die Server-Collation via sqlservr.exe -m -T4022 -T3659 -q. Nur für lokale Standalone-Instanzen. 9-Schritt-Prozess inkl. Pre-Flight, optionales Backup, Stopp/Start-Dienst, Verifikation.
▶ 3 Beispiele anzeigen
Collation ändern
Invoke-mssCollationChange -NewCollation "Latin1_General_CI_AS"
Mit Backup vorher und User-DBs anpassen
Invoke-mssCollationChange -SqlInstance "SQL01\INST2" ` 
-NewCollation "German_CI_AS" ` 
-IncludeUserDatabases ` 
-BackupBeforeChange
Invoke-mssSetDatabaseRecoveryMode Konfiguration
Setzt Recovery-Modus (Simple/Full/BulkLogged) für alle oder ausgewählte Benutzerdatenbanken. Systemdatenbanken werden automatisch ausgeschlossen.
▶ 3 Beispiele anzeigen
Alle User-DBs auf Full
Invoke-mssSetDatabaseRecoveryMode -All -RecoveryMode Full
Einzelne DB auf Simple
Invoke-mssSetDatabaseRecoveryMode -Database "SalesDB" -RecoveryMode Simple -Confirm
Mehrere DBs per Pipeline
"DB1","DB2","DB3" | ForEach-Object { 
Invoke-mssSetDatabaseRecoveryMode -SqlInstance "SQL01" -Database $_ -RecoveryMode Full 
}
Get-mssServerSetting Konfiguration
Liest Server-Properties via SMO. Mit -Name einzelne Eigenschaft, mit -All alle Eigenschaften.
▶ 3 Beispiele anzeigen
BackupDirectory lesen
$backupPath = Get-mssServerSetting -Name "BackupDirectory"
Alle Eigenschaften ausgeben
Get-mssServerSetting -All
Remote-Instanz mit SQL-Auth
$cred = Get-Credential 
Get-mssServerSetting -SqlInstance "SQL01" -SqlCredential $cred -All

📋 Inventar & Suche

Invoke-mssInstanceInventory Inventar
Vollständige Inventarisierung: Instanz-Info, Datenbanken, Logins, Linked Server, SQL Agent Jobs, AlwaysOn-Konfiguration. Ausgabe als TXT + CSV. Optional Kopie in CentralPath.
▶ 3 Beispiele anzeigen
Lokale Instanz inventarisieren
Invoke-mssInstanceInventory
Mehrere Instanzen mit Fehlertoleranz
Invoke-mssInstanceInventory -SqlInstance "SQL01","SQL02","SQL03" -ContinueOnError
Als monatlicher Scheduled Task
# Alle SQL-Instanzen in der Umgebung inventarisieren 
$instances = Get-Content "C:\Admin\sql_instances.txt" 
Invoke-mssInstanceInventory -SqlInstance $instances -ContinueOnError 
# Ergebnis liegt in $OutputPath\InstanceInventory_*.txt
Export-mssDatabaseDocumentation Inventar
HTML- und CSV-Dokumentation aller Datenbanken: Tabellen, Indizes, Views, SPs, Recovery-Modell, Größe.
▶ 2 Beispiele anzeigen
Dokumentation erstellen
Export-mssDatabaseDocumentation -SqlInstance "SQL01" -OutputPath "D:\Reports"
Find-mssDatabaseObject Inventar
Durchsucht alle (oder ausgewählte) Datenbanken nach Tabellen, Sichten, Prozeduren, Funktionen, Triggern, Synonymen. Wildcard-Suche, optional auch SQL-Text-Suche.
▶ 4 Beispiele anzeigen
Prozedur suchen
Find-mssDatabaseObject -SqlInstance "SQL01" -ObjectName "sp_GetOrders"
Wildcard-Suche in bestimmten DBs
Find-mssDatabaseObject -SqlInstance "SQL01" -ObjectName "*log*" ` 
-ObjectType "TABLE","VIEW" -Database "Sales*"
Objekte nach Text im SQL-Body suchen
Find-mssDatabaseObject -SqlInstance "SQL01" -ObjectName "*" ` 
-SearchInDefinition -SearchText "OPENQUERY" | 
Format-Table Database, Schema, ObjectType, ObjectName -AutoSize
Alle Trigger finden
Find-mssDatabaseObject -SqlInstance "SQL01" -ObjectName "*" -ObjectType "TRIGGER" | 
Group-Object Database | Select-Object Name, Count
Get-mssLinkedServerUsage Inventar
Analysiert welche Prozeduren, Funktionen, Sichten, Trigger und SQL Agent Jobs auf Linked Server zugreifen. Durchsucht Definitionen aller Benutzerdatenbanken.
▶ 3 Beispiele anzeigen
Nutzung eines Linked Servers ermitteln
Get-mssLinkedServerUsage -SqlInstance "SQL01" -LinkedServer "PROD_SRV"
Alle Linked Server in Verwendung
Get-mssLinkedServerUsage -SqlInstance "SQL01" | 
Group-Object LinkedServer | Select-Object Name, Count | 
Sort-Object Count -Descending
Vor Abschaltung eines Linked Servers prüfen
$usage = Get-mssLinkedServerUsage -SqlInstance "SQL01" -LinkedServer "OLD_SRV" 
if ($usage) { 
Write-Warning "Linked Server wird noch verwendet!" 
$usage | Format-Table Database, Schema, ObjectType, ObjectName -AutoSize 
} else { 
Write-Host "Linked Server kann sicher entfernt werden." 
}
Get-mssAgentJobHistory Monitoring
Ausführungshistorie aller oder ausgewählter SQL Agent Jobs. Filter nach Jobnamen (Wildcard), Status (Erfolg/Fehler) und Zeitraum. Standard: letzte 7 Tage.
▶ 4 Beispiele anzeigen
Alle Job-Historien letzte 7 Tage
Get-mssAgentJobHistory
Nur fehlgeschlagene Backup-Jobs heute
Get-mssAgentJobHistory -JobName '*Backup*' -Status Failure ` 
-Since (Get-Date).AddDays(-1) | 
Format-Table JobName, RunDate, RunDuration, Message -AutoSize
Laufzeit-Statistik pro Job
Get-mssAgentJobHistory -SqlInstance "SQL01" -Since (Get-Date).AddDays(-30) | 
Group-Object JobName | ForEach-Object { 
$ok = @($_.Group | Where RunStatus -eq 'Success').Count 
$fail = @($_.Group | Where RunStatus -eq 'Failure').Count 
[PSCustomObject]@{ Job = $_.Name; Erfolg = $ok; Fehler = $fail } 
} | Sort-Object Fehler -Descending
Bestimmten Job überwachen
Get-mssAgentJobHistory -SqlInstance "SQL01" -JobName "FITS-SystemDatabases-FULL" | 
Select-Object -First 10 | Format-Table -AutoSize

🖥️ Cluster & Dienste

Get-mssClusterInfo Diagnose
Clustername, Knoten-Liste, Rollen inkl. IP-Adressen. Standardmäßig ohne Core-Cluster-Gruppe und Available Storage. Installiert RSAT-Clustering-Tools bei Bedarf automatisch.
▶ 3 Beispiele anzeigen
Cluster-Info abrufen
$info = Get-mssClusterInfo -ClusterName "MEINCLUSTER" 
$info.Nodes | Format-Table 
$info.Roles | Where-Object OwnerNode -eq "SQL01" | Select-Object Name, IPAddresses
Inkl. Core-Gruppe
Get-mssClusterInfo -IncludeCoreGroup
Fehlerbehandlung
$info = Get-mssClusterInfo -ClusterName "MEINCLUSTER" 
if (-not $info.Success) { Write-Error $info.ErrorMessage; return }
Install-mssSsrsReportServer Konfiguration
SSRS 2022 unattended installieren. Pfad über Set-mssConfig -SsrsInstallerPath voreinstellbar.
▶ 2 Beispiele anzeigen
Mit vorkonfiguriertem Installer-Pfad
Set-mssConfig -SsrsInstallerPath '\\srv-share\Software\SSRS2022\SQLServerReportingServices.exe' 
Install-mssSsrsReportServer
Set-mssSsrsConfiguration Konfiguration
Vollautomatische SSRS-Konfiguration (lokal/remote, Native Mode, AlwaysOn). Dienstkonto, Datenbank, URLs, Verschlüsselungsschlüssel. Bei AG: DB-Erstellung auf Primary, Verbindung auf Listener.
▶ 3 Beispiele anzeigen
Lokale Standardkonfiguration
Set-mssSsrsConfiguration
Remote mit AG-Listener
Set-mssSsrsConfiguration -ComputerName "SSRS01" -DatabaseServer "AG_Listener"
Testlauf
Set-mssSsrsConfiguration -ComputerName "SSRS01" -WhatIf
Invoke-mssSsisConfiguration Konfiguration
Vollautomatische SSIS-Konfiguration: Dienst, SSISDB-Katalog, AlwaysOn AG-Integration (SSISDB in AG, DMK-Restore, Cleanup-Job deaktivieren, sp_ssis_startup), Katalog-Ordner.
▶ 2 Beispiele anzeigen
Standalone-Konfiguration
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
Invoke-mssSsisConfiguration -SqlInstance "SQL01" -CatalogPassword $pwd
Mit AG-Integration
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
Invoke-mssSsisConfiguration -SqlInstance "SQL01" -AgName "AG_SSIS" -CatalogPassword $pwd
Test-mssSsasDirectoryPermissions Diagnose
Prüft und korrigiert NTFS-Berechtigungen für SSAS-Verzeichnisse (Data, Log, Temp, Backup) via Registry-Pfaderkennung. Idempotent.
▶ 2 Beispiele anzeigen
Standard-Instanz prüfen und korrigieren
Test-mssSsasDirectoryPermissions
Benannte Instanz, WhatIf
Test-mssSsasDirectoryPermissions -InstanceName "SSAS2019" -WhatIf

🔐 Zertifikate

Get-mssCertificateReport Sicherheit
SQL Server-Zertifikate: Ablaufdatum, Aussteller, Verwendungszweck. Warnung bei Ablauf in unter 90 Tagen.
▶ 2 Beispiele anzeigen
Alle Zertifikate anzeigen
Get-mssCertificateReport -SqlInstance "SQL01"
Install-mssCertificate Sicherheit
Zertifikat (selbstsigniert oder CA) für SQL Server TLS installieren. Setzt Registry-Key, Dienst-Neustart optional.
▶ 2 Beispiele anzeigen
Zertifikat von Pfad installieren
Install-mssCertificate -SqlInstance "SQL01" -CertificatePath "C:\Certs\SQL01.pfx" -CertPassword $cred
New-mssCertificateRequest Sicherheit
CSR und Bestelldatenblatt für ein SQL Server TLS-Zertifikat erstellen (INF + CSR für die CA-Einreichung).
▶ 2 Beispiele anzeigen
CSR für SQL01 erstellen
New-mssCertificateRequest -SqlInstance "SQL01" -OutputPath "C:\Certs"
New-mssSqlCertificate Sicherheit
Selbstsigniertes SQL Server-Zertifikat erneuern: Subject/SAN des bestehenden übernehmen, neue Laufzeit.
▶ 2 Beispiele anzeigen
Zertifikat erneuern (5 Jahre)
New-mssSqlCertificate -SqlInstance "SQL01" -ValidityYears 5

📼 TSM / IBM Spectrum Protect

Invoke-mssTsmConfiguration TSM
Konfiguriert dsm.opt: EXCLUDE für *.mdf/*.ndf/*.ldf, INCLUDE für Backup-Verzeichnisse, MANAGEMENTCLASS für Backup-Dateien. Automatisches Backup (dsm.opt.bak). Block begrenzt durch dtcSqlTools-Marker.
▶ 3 Beispiele anzeigen
Standard-Konfiguration
Invoke-mssTsmConfiguration -ManagementClass MC_B_NL.NL_42.42.NA
Remote-Server mit UseDiff
Invoke-mssTsmConfiguration -ComputerName "SQL01" -UseDiff
Mit zusätzlichen Pfaden
Invoke-mssTsmConfiguration -ComputerName "SQL01" -AdditionalIncludePaths "E:\Archive","F:\ExtraBackup"
Get-mssTsmConfiguration TSM
Liest die aktuelle TSM-Konfiguration aus dsm.opt und gibt die relevanten Einträge zurück.
▶ 2 Beispiele anzeigen
Konfiguration lesen
Get-mssTsmConfiguration
Remote-Server
Get-mssTsmConfiguration -ComputerName "SQL01"
Test-mssTsmConnection TSM
Testet die Verbindung zum TSM-Server via dsmc-Kommando. Gibt Verbindungsstatus und Server-Version zurück.
▶ 2 Beispiele anzeigen
Verbindungstest
Test-mssTsmConnection
Remote mit Fehlertoleranz
Test-mssTsmConnection -ComputerName "SQL01" -ContinueOnError

🔹 Sonstige

Set-mssSqlPolicyState Konfiguration
Aktiviert oder deaktiviert eine einzelne PBM-Policy via dbatools (Get-DbaPbmPolicy). Ändert nur die explizit benannte Policy, nicht den globalen PBM-Engine-Zustand.
▶ 3 Beispiele anzeigen
Policy deaktivieren
Set-mssSqlPolicyState -SqlInstance "SQL01" -Policy "xp_cmdshell must be disabled" -State Disable
Policy auf mehreren Instanzen aktivieren
"SQL01","SQL02" | Set-mssSqlPolicyState -Policy "Password Policy" -State Enable
Vor Restore deaktivieren, danach reaktivieren
Set-mssSqlPolicyState -SqlInstance "SQL01" -Policy "DefaultPolicy" -State Disable 
Invoke-mssRestoreDatabase -SqlInstance "SQL01" -BackupFile "D:\Backup\DB.bak" -DatabaseName "DB" 
Set-mssSqlPolicyState -SqlInstance "SQL01" -Policy "DefaultPolicy" -State Enable
Invoke-mssMonitoringKey Monitoring
Erstellt oder erneuert den Monitoring-Schlüssel für externe Überwachungstools (z. B. Zabbix, PRTG). Legt SQL-Login mit minimalen Rechten an.
▶ 2 Beispiele anzeigen
Standard-Monitoring-Key erstellen
Invoke-mssMonitoringKey -SqlInstance "SQL01"
Mehrere Instanzen
"SQL01","SQL02","SQL03" | ForEach-Object { 
Invoke-mssMonitoringKey -SqlInstance $_ -ContinueOnError 
}
Copy-mssToCentralPath Sonstige
Kopiert Report-Dateien aus dem lokalen OutputPath in den konfigurierten CentralPath (z. B. Fileserver-Share). Wird von anderen Funktionen intern genutzt.
▶ 2 Beispiele anzeigen
Alle Reports kopieren
Copy-mssToCentralPath
Explizite Quelle und Ziel
Copy-mssToCentralPath -SourcePath "D:\Reports" -CentralPath "\\Fileserver\SQL\Reports"
Install-mssAdModule Sonstige
Stellt sicher, dass das ActiveDirectory PowerShell-Modul (RSAT) installiert ist. Fallback-Kette: (1) Add-WindowsCapability, (2) Install-WindowsFeature, (3) dism.exe, (4) PSGallery. Erfordert lokale Administratorrechte. Wird automatisch von Copy-mssLogins und Invoke-mssLoginAudit aufgerufen wenn das AD-Modul fehlt.
▶ 3 Beispiele anzeigen
AD-Modul sicherstellen (Standard)
Install-mssAdModule
Re-Import erzwingen
Install-mssAdModule -SkipIfPresent $false
Als Bedingung vor AD-abhängigen Operationen
if (-not (Install-mssAdModule -ContinueOnError)) { 
Write-Warning "AD-Modul nicht verfügbar – Windows-Login-Prüfung wird übersprungen" 
}
Get-mssHpuAllowGroup Sonstige
HPU-Allow-Gruppe per Domain-Mapping ermitteln (Set-mssConfig -HpuDomainGroupMap). Intern von Audit- und Login-Funktionen genutzt.
▶ 2 Beispiele anzeigen
HPU-Gruppe für einen Server ermitteln
Get-mssHpuAllowGroup -ServerFqdn "SQL01.bayernlb.sfinance.net"

🚀 Quick Start

📁 Modulpfad: Das mssSQLTool-Modul sollte im PowerShell-Standardmodulverzeichnis abgelegt werden, damit es automatisch erkannt wird und kein manueller Pfad beim Import angegeben werden muss.
1
Modul im richtigen Verzeichnis ablegen
# Empfohlener Zielpfad (systemweit, alle Benutzer): 
C:\Program Files\WindowsPowerShell\Modules\mssSQLTool\ 
 
# Alternativ: nur fuer den aktuellen Benutzer 
$env:USERPROFILE\Documents\WindowsPowerShell\Modules\mssSQLTool\ 
 
# Alle konfigurierten Modulpfade anzeigen 
$env:PSModulePath -split ';' 
 
# Modul-Verzeichnis anlegen und Dateien kopieren 
$target = "C:\Program Files\WindowsPowerShell\Modules\mssSQLTool" 
Copy-Item -Path "C:\CCM\mssSQLTool" -Destination $target -Recurse -Force 
 
# Nach korrekter Ablage genuegt ein einfaches: 
Import-Module mssSQLTool
Nach der Ablage im Standardpfad wird das Modul bei Import-Module mssSQLTool automatisch gefunden. PowerShell Studio und ISE erkennen es zudem per Auto-Completion ohne weiteres Zutun.
2
Voraussetzungen installieren
# dbatools installieren (falls noch nicht vorhanden) 
Install-Module dbatools -Scope CurrentUser -Force 
 
# mssSQLTool-Modul laden 
Import-Module "C:\Pfad\zum\mssSQLTool\mssSQLTool.psd1"
3
Konfiguration setzen
Set-mssConfig ` 
-LogPath "C:\System\WinSrvLog\MSSQL" ` 
-OutputPath "C:\System\WinSrvLog\MSSQL" ` 
-CentralPath "\\Fileserver\SQL\Reports" 
 
# Konfiguration prüfen 
Get-mssConfig
4
Erstes Health-Dashboard
$instance = "SQL01" # Anpassen! 
 
Write-Host "=== Instance Check ===" -ForegroundColor Cyan 
Get-mssSQLInstanceCheck -SqlInstance $instance | 
Where-Object Status -ne 'OK' | Format-Table Check, CurrentValue, Status 
 
Write-Host "=== Database Health ===" -ForegroundColor Cyan 
Get-mssDatabaseHealth -SqlInstance $instance | 
Select-Object DatabaseName, Status, RecoveryModel, LastFullBackup, VlfCount | 
Format-Table -AutoSize 
 
Write-Host "=== Disk Space ===" -ForegroundColor Cyan 
Get-mssDiskSpaceReport -SqlInstance $instance | 
Format-Table VolumeName, FreeGB, DaysUntilFull, Status -AutoSize
5
Ola Hallengren Wartung einrichten (New Server Onboarding)
$instance = "SQL01" 
 
# Schritt 1: Ola installieren 
Install-mssOlaMaintenanceSolution -SqlInstance $instance 
 
# Schritt 2: Installation prüfen 
Test-mssOlaInstallation -SqlInstance $instance 
 
# Schritt 3: Index + Integrity Jobs anlegen 
New-mssOlaMaintenanceJobs -SqlInstance $instance -ScheduleTime "23:00" -OperatorName "DBAs" 
 
# Schritt 4: System-DB-Backup-Job 
New-mssOlaSysDbBackupJob -SqlInstance $instance -ScheduleTime "20:00" -OperatorName "DBAs" 
 
# Schritt 5: User-DB-Backup-Jobs (FULL/DIFF/LOG) 
New-mssOlaUsrDbBackupJob -SqlInstance $instance -Full -Diff -Log ` 
-FullScheduleDays @('Sunday') -FullScheduleTime "21:00" ` 
-DiffScheduleDays @('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') ` 
-DiffScheduleTime "21:00" ` 
-LogScheduleDays @('EveryDay') -LogScheduleTime "00:00" ` 
-OperatorName "DBAs"
6
Security Hardening (SA-Konto, Sysadmin-Audit)
$instance = "SQL01" 
 
# SA-Konto verschleiern 
$r = Invoke-mssSaObfuscation -SqlInstance $instance 
Write-Host "Neuer SA-Name: $($r.NewLoginName)" 
$r.GeneratedPassword | Out-File "C:\Secure\sa_pw_$(Get-Date -f 'yyyyMMdd').txt" 
 
# Sysadmin-Audit 
Get-mssSysadminAccounts -SqlInstance $instance -ExcludeSysAccounts | 
Where-Object Status -eq 'Unexpected' | Format-Table LoginName, LoginType
7
AlwaysOn AG – Datenbank hinzufügen & Nodes synchronisieren
$instance = "SQL01" 
$ag = "AG_Prod" 
 
# Datenbank hinzufügen 
Invoke-mssAddDatabaseToAvailabilityGroup -SqlInstance $instance ` 
-AvailabilityGroup $ag -Database "NeueDB" 
 
# AG-Nodes synchronisieren (Logins, Jobs, Linked Server) 
Sync-mssAgNode -SqlInstance $instance -AvailabilityGroup $ag 
 
# Health-Report prüfen 
Get-mssAgHealthReport -SqlInstance $instance | 
Where-Object OverallStatus -ne 'Healthy' | Format-Table -AutoSize

⚙️ Modul-Konfiguration

Die Konfiguration wird dauerhaft als JSON im Benutzerprofil gespeichert (%APPDATA%\MSSQLTools\config.json) und beim Modulimport automatisch geladen. Änderungen greifen sofort — kein Neuimport nötig.

Konfigurationsschlüssel

SchlüsselStandardBeschreibung
LogPathC:\System\WinSrvLog\MSSQLPfad für Log-Dateien
OutputPathC:\System\WinSrvLog\MSSQLPfad für Report-Ausgaben (TXT/CSV)
CentralPathC:\System\WinSrvLog\MSSQLZentraler Pfad (z. B. Fileserver)
OlaJobNameFullFITS-UserDatabases-FULLJob-Name für Ola Full-Backup
OlaJobNameDiffFITS-UserDatabases-DIFFJob-Name für Ola Diff-Backup
OlaJobNameLogFITS-UserDatabases-LOGJob-Name für Ola Log-Backup
OlaJobNameIndexOptFITS-UserDatabases-IndexOptimizeJob-Name für Ola IndexOptimize
OlaJobNameIntUserDbFITS-UserDatabases-IntegrityCheckJob-Name für Ola IntegrityCheck User
OlaJobNameIntSysDbFITS-SystemDatabases-IntegrityCheckJob-Name für Ola IntegrityCheck System
OlaJobNameSysDbBackupFITS-SystemDatabases-FULLJob-Name für System-DB-Backup
TsmManagementClasses[]TSM Management-Klassen-Liste
HpuDomainGroupMap[]Domain→Gruppen-Mapping für Get-mssHpuAllowGroup
SsrsInstallerPath""Pfad zur SSRS-Installationsdatei für Install-mssSsrsReportServer.
AutoUpdate$falseAutomatisches Modul-Update beim Import
UpdateRepository""PSRepository-Name für Auto-Update
DefaultPolicy""PBM-Policy die bei Restore temp. deaktiviert wird
Languagede-DEAusgabe-Sprache. de-DE (Standard) · en-US.

Beispiel-Konfiguration

# Komplette Initialkonfiguration für Produktivumgebung 
Set-mssConfig ` 
-LogPath "D:\Logs\SQL" ` 
-OutputPath "D:\Reports\SQL" ` 
-CentralPath "\\Fileserver01\SQL\Reports" ` 
-OlaJobNameFull "PROD-UserDB-FULL" ` 
-OlaJobNameIndexOpt "PROD-UserDB-IndexOpt" ` 
-OlaJobNameSysDbBackup "PROD-SysDB-FULL" ` 
-TsmManagementClasses @('MC_B_NL.NL_42.42.NA') ` 
-SsrsInstallerPath '\\srv-share\Software\SSRS2022\SQLServerReportingServices.exe' ` 
-DefaultPolicy "DBA-StandardPolicy" ` 
-Language de-DE ` 
-AutoUpdate $false
Hinweis: Pfade werden beim Setzen auf Existenz und Schreibrecht geprüft. Nicht vorhandene Verzeichnisse werden automatisch erstellt. Bei fehlenden Schreibrechten wird eine Fehlermeldung ausgegeben und der Wert nicht gesetzt.

Spracheinstellungen

Lokalisierung: de-DE (Standard) · en-US. Sprachdateien: Private\Strings\{lang}.psd1.
Set-mssConfig -Language en-US 
Set-mssConfig -Language de-DE