🛢 mssSQLTool
PowerShell SQL Admin Toolset · dtcSoftware · Janke
📖 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 -AutoSizeBei 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, RecoveryModelHohe 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, PatchStatusMit 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-TableMit 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 -AutoSizeTemplate-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 -DescendingBestimmten 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üssel | Standard | Beschreibung |
|---|---|---|
LogPath | C:\System\WinSrvLog\MSSQL | Pfad für Log-Dateien |
OutputPath | C:\System\WinSrvLog\MSSQL | Pfad für Report-Ausgaben (TXT/CSV) |
CentralPath | C:\System\WinSrvLog\MSSQL | Zentraler Pfad (z. B. Fileserver) |
OlaJobNameFull | FITS-UserDatabases-FULL | Job-Name für Ola Full-Backup |
OlaJobNameDiff | FITS-UserDatabases-DIFF | Job-Name für Ola Diff-Backup |
OlaJobNameLog | FITS-UserDatabases-LOG | Job-Name für Ola Log-Backup |
OlaJobNameIndexOpt | FITS-UserDatabases-IndexOptimize | Job-Name für Ola IndexOptimize |
OlaJobNameIntUserDb | FITS-UserDatabases-IntegrityCheck | Job-Name für Ola IntegrityCheck User |
OlaJobNameIntSysDb | FITS-SystemDatabases-IntegrityCheck | Job-Name für Ola IntegrityCheck System |
OlaJobNameSysDbBackup | FITS-SystemDatabases-FULL | Job-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 | $false | Automatisches Modul-Update beim Import |
UpdateRepository | "" | PSRepository-Name für Auto-Update |
DefaultPolicy | "" | PBM-Policy die bei Restore temp. deaktiviert wird |
Language | de-DE | Ausgabe-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