dtcSoftware - SQLBlog
  1. Aktuelle Seite:  
  2. Startseite

Home

dtcSqlTools

PowerShell-Modul für SQL Server Administration · dtcSoftware (Janke)

🔢 Version 1.19.16⚙️ 39 Funktionen📦 Requires: dbatools💻 PowerShell 5.1 / 7.x🖷️ SQL Server 2016+
📋 Übersicht
📖 Funktionsreferenz
⚙️ Konfiguration
🚀 Installation
📅 Versionsverlauf

dtcSqlTools kapselt wiederkehrende SQL Server Administrations- und Automatisierungsaufgaben in 39 strukturierte PowerShell-Funktionen. Es baut auf dbatools auf und ergänzt es um dtcSoftware-spezifische Workflows rund um AlwaysOn, Sicherheit, Diagnose und Backup-Automation.

39
Exportierte Funktionen
6
Private Hilfsfunktionen
224
Beispiel-Aufrufe
15
Funktionskategorien

Funktionen im Überblick

Kategorie#Funktionen
🔄 AlwaysOn6Add-dtcAgDatabase, Enable-dtcAgAutoSeed, Get-dtcAgHealthReport, Invoke-dtcAgFailoverCheck, New-dtcAgRepairJob, Sync-dtcAgNode
🔁 Restore2Restore-dtcAlwaysOnDB, Invoke-dtcDatabaseRestore
🔒 Sicherheit6Invoke-dtcSaObfuscation, Get-dtcSysadminAccounts, Invoke-dtcLoginAudit, Test-dtcSqlConfiguration, Test-dtcSsasPermissions, Set-dtcSqlPolicyState
🔍 Diagnose1Get-dtcDatabaseHealth
⚡ Performance1Get-dtcWaitStatReport
📊 Kapazität2Get-dtcAutoGrowthReport, Get-dtcDiskSpaceReport
📡 Monitoring1Get-dtcOperationProgress
💾 Backup1Test-dtcBackupCoverage
⚙️ SQL Agent1Invoke-dtcAgentJobAudit
🔧 Wartung6New-dtcOlaBackupJobs, New-dtcOlaSysDbBackupJob, New-dtcOlaMaintenanceJobs, Invoke-dtcDatabaseUserCleanup, Invoke-dtcCollationChange, Invoke-dtcLogShrink
⚙️ Konfiguration4Set-dtcSsrsConfiguration, Set-dtcSqlToolsConfig, Set-dtcTsmConfiguration, Set-dtcSsisConfiguration
🌐 Netzwerk1Test-dtcSqlSpn
📋 Dokumentation1Export-dtcInstanceInventory
🔄 Auto-Update2Set-dtcSqlToolsSharePath, Update-dtcSqlTools
📦 Sonstige2Remove-dtcAgDatabase / Reset-dtcAgDatabase / Repair-dtcAgDatabase, Set-dtcMonitoringKey / Get-dtcMonitoringKey
🔄 AlwaysOn6
  • Add-dtcAgDatabase
  • Enable-dtcAgAutoSeed
  • Get-dtcAgHealthReport
  • Invoke-dtcAgFailoverCheck
  • New-dtcAgRepairJob
  • Sync-dtcAgNode
🔁 Restore2
  • Restore-dtcAlwaysOnDB
  • Invoke-dtcDatabaseRestore
🔒 Sicherheit6
  • Invoke-dtcSaObfuscation
  • Get-dtcSysadminAccounts
  • Invoke-dtcLoginAudit
  • Test-dtcSqlConfiguration
  • Test-dtcSsasPermissions
  • Set-dtcSqlPolicyState
🔍 Diagnose1
  • Get-dtcDatabaseHealth
⚡ Performance1
  • Get-dtcWaitStatReport
📊 Kapazität2
  • Get-dtcAutoGrowthReport
  • Get-dtcDiskSpaceReport
📡 Monitoring1
  • Get-dtcOperationProgress
💾 Backup1
  • Test-dtcBackupCoverage
⚙️ SQL Agent1
  • Invoke-dtcAgentJobAudit
🔧 Wartung6
  • New-dtcOlaBackupJobs
  • New-dtcOlaSysDbBackupJob
  • New-dtcOlaMaintenanceJobs
  • Invoke-dtcDatabaseUserCleanup
  • Invoke-dtcCollationChange
  • Invoke-dtcLogShrink
⚙️ Konfiguration4
  • Set-dtcSsrsConfiguration
  • Set-dtcSqlToolsConfig
  • Set-dtcTsmConfiguration
  • Set-dtcSsisConfiguration
🌐 Netzwerk1
  • Test-dtcSqlSpn
📋 Dokumentation1
  • Export-dtcInstanceInventory
🔄 Auto-Update2
  • Set-dtcSqlToolsSharePath
  • Update-dtcSqlTools
📦 Sonstige2
  • Remove-dtcAgDatabase / Reset-dtcAgDatabase / Repair-dtcAgDatabase
  • Set-dtcMonitoringKey / Get-dtcMonitoringKey

🔄 AlwaysOn

Add-dtcAgDatabaseAlwaysOn
Fügt eine oder mehrere Datenbanken per Automatic Seeding zu einer Verfügbarkeitsgruppe hinzu. Prüft und aktiviert AutoSeed automatisch, sofern nicht mit -SkipAutoSeedCheck deaktiviert.
► 6 Beispiele anzeigen
Einzelne Datenbank in bestimmte AG aufnehmen
Add-dtcAgDatabase -PrimaryInstance "SQL01" -DatabaseName "MyApp" ` 
-AvailabilityGroup "AG_Prod"
Mehrere Datenbanken gleichzeitig aufnehmen
Add-dtcAgDatabase -PrimaryInstance "SQL01" ` 
-DatabaseName "MyApp","AppLog","AppAudit" ` 
-AvailabilityGroup "AG_Prod"
Alle Datenbanken der Instanz aufnehmen
Add-dtcAgDatabase -PrimaryInstance "SQL01" -All ` 
-AvailabilityGroup "AG_Prod"
Wildcard-Auswahl von Datenbanken
Add-dtcAgDatabase -PrimaryInstance "SQL01" ` 
-DatabaseName "App_*" ` 
-AvailabilityGroup "AG_Prod"
AutoSeed-Prüfung überspringen (bereits konfiguriert)
Add-dtcAgDatabase -PrimaryInstance "SQL01" -DatabaseName "MyApp" ` 
-AvailabilityGroup "AG_Prod" -SkipAutoSeedCheck
Testlauf (WhatIf)
Add-dtcAgDatabase -PrimaryInstance "SQL01" -DatabaseName "MyApp" ` 
-AvailabilityGroup "AG_Prod" -WhatIf
Enable-dtcAgAutoSeedAlwaysOn
Aktiviert Automatic Seeding auf AG-Ebene (SeedingMode = Automatic) und auf Instanz-Ebene (GRANT CREATE ANY DATABASE) für Primary und alle konfigurierten Secondaries.
► 4 Beispiele anzeigen
AutoSeed für eine AG aktivieren
Enable-dtcAgAutoSeed -PrimaryInstance "SQL01" -AvailabilityGroup "AG_Prod"
Prüfen was gemacht würde (WhatIf)
Enable-dtcAgAutoSeed -PrimaryInstance "SQL01" -AvailabilityGroup "AG_Prod" -WhatIf
Für alle AGs auf der Instanz
Get-DbaAvailabilityGroup -SqlInstance "SQL01" | 
ForEach-Object { 
Enable-dtcAgAutoSeed -PrimaryInstance "SQL01" ` 
-AvailabilityGroup $_.Name -Verbose 
}
Mit Credential für SQL-Auth
$cred = Get-Credential 
Enable-dtcAgAutoSeed -PrimaryInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" -Credential $cred
Get-dtcAgHealthReportAlwaysOn
Vollständiger Zustandsbericht aller AGs: Synchronisierungsstatus, Redo/Send-Queue pro Replikat und Datenbank, Verbindungsstatus, laufende AutoSeed-Vorgänge. Schreibt AgHealthReport_*.txt und *.csv ins LogDir.
► 6 Beispiele anzeigen
Einfacher Health-Report lokale Instanz
Get-dtcAgHealthReport
Bestimmte Instanz mit angepassten Schwellwerten
Get-dtcAgHealthReport -SqlInstance "SQL01" ` 
-MaxRedoQueueMB 50 -MaxSendQueueMB 20
Mehrere AG-Nodes gleichzeitig prüfen
Get-dtcAgHealthReport -SqlInstance "SQL01","SQL02","SQL03" ` 
-ContinueOnError
Nur kritische Probleme auf der Konsole anzeigen
Get-dtcAgHealthReport -SqlInstance "SQL01" | 
Where-Object OverallStatus -eq 'Critical' | 
Format-Table AgName, ReplicaName, Database, DbSyncState, RedoQueueMB -AutoSize
Redo-Queue aller Datenbanken sortiert anzeigen
Get-dtcAgHealthReport -SqlInstance "SQL01" | 
Where-Object Role -eq 'SECONDARY' | 
Sort-Object RedoQueueMB -Descending | 
Select-Object AgName, Database, ReplicaName, RedoQueueMB, SendQueueMB | 
Format-Table -AutoSize
AutoSeed-Vorgänge überwachen
# Alle 30 Sekunden aktuellen Status anzeigen 
while ($true) { 
Clear-Host 
Get-dtcAgHealthReport -SqlInstance "SQL01" | 
Where-Object Role -eq 'SEEDING' | 
Select-Object Database, DbSyncState | 
Format-Table -AutoSize 
Start-Sleep 30 
}
Invoke-dtcAgFailoverCheckAlwaysOn
Pre-Failover Go/No-Go Prüfung. Führt 6 Checks durch und gibt GO / GO-WITH-WARNING / NO-GO zurück. Schreibt Protokoll ins LogDir.
► 5 Beispiele anzeigen
Standard-Prüfung vor geplantem Failover
Invoke-dtcAgFailoverCheck -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod"
Prüfung mit explizitem Ziel-Replikat
Invoke-dtcAgFailoverCheck -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" ` 
-TargetReplica "SQL02"
Mit SPN-Prüfung (Kerberos-Sicherheit)
Invoke-dtcAgFailoverCheck -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" ` 
-CheckSpn
Ergebnis auswerten und bei NO-GO stoppen
$check = Invoke-dtcAgFailoverCheck -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" 
 
switch ($check.GoNoGo) { 
'GO' { Write-Host "Failover kann durchgeführt werden" -ForegroundColor Green } 
'GO-WITH-WARNING' { 
Write-Warning "Failover möglich aber mit Einschränkungen:" 
$check.CheckDetails | Where-Object Status -eq 'WARN' | Format-Table Check, Detail 
} 
'NO-GO' { 
Write-Error "Failover NICHT empfohlen!" 
$check.CheckDetails | Where-Object Status -eq 'FAIL' | Format-Table Check, Detail 
return 
} 
}
Alle AGs auf einer Instanz prüfen
Get-DbaAvailabilityGroup -SqlInstance "SQL01" | 
ForEach-Object { 
Invoke-dtcAgFailoverCheck -SqlInstance "SQL01" ` 
-AvailabilityGroup $_.Name 
} | Select-Object AvailabilityGroup, GoNoGo, Passed, Warnings, Failed | 
Format-Table -AutoSize
New-dtcAgRepairJobAlwaysOn
Erstellt einen SQL Agent Job der Repair-dtcAgDatabase periodisch ausführt. Der Job überwacht AG-Synchronisation, erkennt out-of-sync Datenbanken und repariert sie automatisch via Reset-dtcAgDatabase. Konfigurierbar mit Zeitplan, AG-Filter und Operator-Benachrichtigung.
► 9 Beispiele anzeigen
Job für alle AGs, täglich 02:00
New-dtcAgRepairJob -SqlInstance "SQL01"
Job für eine bestimmte AG
New-dtcAgRepairJob -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod"
Abweichende Startzeit mit Operator-Benachrichtigung
New-dtcAgRepairJob -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" ` 
-ScheduleType Daily -ScheduleTime "03:30" ` 
-OperatorName "DBA-Team"
Alle 30 Minuten prüfen
New-dtcAgRepairJob -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" ` 
-ScheduleType EveryNMin -IntervalMinutes 30
Job auf allen AG-Nodes erstellen
"SQL01","SQL02","SQL03" | ForEach-Object { 
New-dtcAgRepairJob -SqlInstance $_ ` 
-AvailabilityGroup "AG_Prod" ` 
-ScheduleType Daily -ScheduleTime "02:00" ` 
-OperatorName "DBA-Team" 
} | Select-Object SqlInstance, JobName, Status, ScheduleDesc | Format-Table
Vorhandenen Job aktualisieren
New-dtcAgRepairJob -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" ` 
-ScheduleType Daily -ScheduleTime "04:00" ` 
-Update
Job ohne Zeitplan (nur manuell)
New-dtcAgRepairJob -SqlInstance "SQL01" -ScheduleType Manual
EventLog-Quelle registrieren und Job erstellen
# Einmalig mit Admin-Rechten (z. B. im Onboarding-Skript): 
New-EventLog -Source 'dtcSqlTools' -LogName Application 
 
# Job erstellen - EventLog wird automatisch erkannt und verwendet 
New-dtcAgRepairJob -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod"
Vorschau (WhatIf)
New-dtcAgRepairJob -SqlInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" ` 
-ScheduleType Daily -ScheduleTime "02:00" -WhatIf
Sync-dtcAgNodeAlwaysOn
Synchronisiert Logins, SQL Agent Jobs, Linked Server, Operatoren und Alerts von Primary zu allen Secondaries einer AG. Erkennt Primary und alle AGs automatisch.
► 6 Beispiele anzeigen
Vollautomatische Synchronisation (kein Parameter nötig)
Sync-dtcAgNode
Bestimmte Instanz als Einstiegspunkt
Sync-dtcAgNode -Instance "SQL01"
Nur bestimmte Objekttypen synchronisieren
# Nur Logins 
Sync-dtcAgNode -Instance "SQL01" -ExcludeType Jobs,LinkedServers,Operators,Alerts 
 
# Nur Jobs und Logins 
Sync-dtcAgNode -Instance "SQL01" -ExcludeType LinkedServers,Operators,Alerts
Nur bestimmte AG synchronisieren
Sync-dtcAgNode -Instance "SQL01" -AvailabilityGroup "AG_Prod"
Ergebnis auswerten
$r = Sync-dtcAgNode -Instance "SQL01" -Verbose 
$r | Group-Object ObjectType | 
ForEach-Object { 
"$($_.Name): $(@($_.Group|Where Status -eq 'Success').Count) OK, " + 
"$(@($_.Group|Where Status -eq 'Failed').Count) Fehler" 
}
System-Objekte ausschließen
Sync-dtcAgNode -Instance "SQL01" -ExcludeSystemObjects

🔁 Restore

Restore-dtcAlwaysOnDBRestore
Vollständige DB-Wiederherstellung in einer AG. 12 definierte Schritte: Pre-Backup (optional), AG-Austrag, Policy, Login-Export, Secondary-Bereinigung, Restore, SA-Owner, Login-Import, AG-Wiederaufnahme, Policy-Reaktivierung.
► 6 Beispiele anzeigen
Einfacher AG-Restore mit Standardeinstellungen
Restore-dtcAlwaysOnDB -Database "MyApp" ` 
-RestoreDir "F:\DB_Transfer_Prod"
Explizite Backup-Datei und benannte Instanz
Restore-dtcAlwaysOnDB -Database "MyApp" ` 
-RestoreDir "F:\Backup" ` 
-DatabaseFile "MyApp_20260417.bak" ` 
-SQLInstance "SQL01\PROD"
Mit Pre-Restore-Backup (Rollback-Sicherheit)
Restore-dtcAlwaysOnDB -Database "MyApp" ` 
-RestoreDir "F:\Transfer" ` 
-PreRestoreBackup
Pre-Backup in explizites Verzeichnis
Restore-dtcAlwaysOnDB -Database "MyApp" ` 
-RestoreDir "F:\Transfer" ` 
-PreRestoreBackup ` 
-PreRestoreBackupDir "G:\Rollback_Backups"
Fehler beim Login-Import tolerieren
Restore-dtcAlwaysOnDB -Database "MyApp" ` 
-RestoreDir "F:\Transfer" ` 
-ContinueOnLoginError
Testlauf (WhatIf)
Restore-dtcAlwaysOnDB -Database "MyApp" ` 
-RestoreDir "F:\Transfer" -WhatIf
Invoke-dtcDatabaseRestoreRestore
Standalone-Restore ohne AG. Unterstützt Umbenennung, vollständiges User-Handling (Windows-User ohne Server-Login werden automatisch erkannt und entfernt), Pre-Restore-Backup. Single-User-Modus wird im finally-Block garantiert aufgehoben.
► 9 Beispiele anzeigen
Einfacher Restore mit Standardeinstellungen
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\MyApp.bak"
Datenbank unter neuem Namen wiederherstellen
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\MyApp.bak" ` 
-TargetDatabase "MyApp_Test"
Full + Differenz-Backup einspielen
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\MyApp_Full.bak" ` 
-DiffBackupFile "F:\Backup\MyApp_Diff.bak"
Gestaffelte Differenz-Backups
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\MyApp_Full.bak" ` 
-DiffBackupFile @("F:\Backup\MyApp_Diff1.bak","F:\Backup\MyApp_Diff2.bak")
Restore mit automatischer User-Bereinigung
# Windows-User ohne Server-Login auf der Zielinstanz werden automatisch entfernt. 
# Kein Parameter nötig - die Erkennung erfolgt über Get-DbaLogin. 
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\ProdDB.bak" ` 
-PreRestoreBackup
Explizite Dateipfade (Relocate)
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\MyApp.bak" ` 
-RelocateDataPath "E:\SQLData" ` 
-RelocateLogPath "F:\SQLLogs"
Originalpfade beibehalten (gleiche Infrastruktur)
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\MyApp.bak" ` 
-KeepOriginalPaths
Mehrere Backup-Dateien per Pipeline
$results = "F:\Bak\DB1.bak","F:\Bak\DB2.bak","F:\Bak\DB3.bak" | 
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-ContinueOnError 
 
$results | Format-Table TargetDatabase, UsersRestored, UsersRemoved, Status
Pre-Backup in Standard-Unterordner \\PreRestore
Invoke-dtcDatabaseRestore -SqlInstance "SQL01" ` 
-BackupFile "F:\Backup\MyApp.bak" ` 
-PreRestoreBackup 
# Backup landet automatisch in: <SQLBackupDir>\PreRestore\MyApp_PreRestore_<datum>.bak

🔒 Sicherheit

Invoke-dtcSaObfuscationSicherheit
Verschleiert das SA-Konto: umbenennen, deaktivieren, Zufallskennwort setzen (kryptographisch sicher, Fisher-Yates-Shuffle). Abbruch wenn kein weiteres aktives sysadmin-Konto vorhanden (Status: AbortedNoSysadmin).
► 6 Beispiele anzeigen
Standardverschleierung (Name: msssa, 18 Zeichen)
$r = Invoke-dtcSaObfuscation -SqlInstance "SQL01" 
Write-Host "Neuer Name : $($r.NewLoginName)" 
Write-Host "Kennwort : $($r.GeneratedPassword)" # SOFORT sicher verwahren! 
Write-Host "Sysadmins : $($r.SysadminAccounts -join ', ')"
Eigener Login-Name
$r = Invoke-dtcSaObfuscation -SqlInstance "SQL01" -NewName "dbsvc_system"
Längeres Kennwort (24 Zeichen)
$r = Invoke-dtcSaObfuscation -SqlInstance "SQL01" ` 
-NewName "msssa" -PasswordLength 24
Kennwort sofort sicher in Datei schreiben
$r = Invoke-dtcSaObfuscation -SqlInstance "SQL01" 
if ($r.Status -eq 'Success') { 
$r.GeneratedPassword | Out-File "C:\Secure\sa_pw_$(Get-Date -f 'yyyyMMdd').txt" ` 
-Encoding UTF8 
Write-Host "Kennwort gesichert." 
}
Mehrere Instanzen mit Fehlertoleranz
$instances = "SQL01","SQL02","SQL03" 
$results = $instances | ForEach-Object { 
Invoke-dtcSaObfuscation -SqlInstance $_ -ContinueOnError 
} 
$results | Select-Object SqlInstance, OriginalLoginName, NewLoginName, 
SysadminCheck, Status | Format-Table -AutoSize
Testlauf (WhatIf) – zeigt was gemacht würde
Invoke-dtcSaObfuscation -SqlInstance "SQL01" -WhatIf
Get-dtcSysadminAccountsSicherheit
Ermittelt alle sysadmin-Logins. Bekannte Konten per -ExcludeLogin (Wildcard) als "Excluded" markieren. Schreibt SysadminAccounts_*.txt und *.csv ins LogDir.
► 9 Beispiele anzeigen
Alle sysadmin-Konten auflisten
Get-dtcSysadminAccounts -SqlInstance "SQL01"
Systemkonten automatisch ausschließen (-ExcludeSysAccounts)
Get-dtcSysadminAccounts -SqlInstance "SQL01" -ExcludeSysAccounts
BUILTIN\\Administrators-Befunde auswerten
$r = Get-dtcSysadminAccounts -SqlInstance "SQL01" -ExcludeSysAccounts 
# BUILTIN\Administrators immer separat prüfen 
$r | Where-Object Status -eq 'BuiltinAdmins' | Format-Table SqlInstance, LoginName, IsEnabled 
# Alle Befunde die Aufmerksamkeit erfordern 
$r | Where-Object Status -in 'BuiltinAdmins','Unexpected' | Format-Table
Systemkonten + manuelle Ausschlüsse kombinieren
Get-dtcSysadminAccounts -SqlInstance "SQL01" ` 
-ExcludeSysAccounts ` 
-ExcludeLogin "DOMAIN\DBA_Admins","msssa"
Bekannte Konten ausschließen (empfohlener Standardaufruf)
Get-dtcSysadminAccounts -SqlInstance "SQL01" ` 
-ExcludeLogin "NT SERVICE\*","NT AUTHORITY\*","DOMAIN\DBA_Admins","msssa"
Mehrere Instanzen mit gleichen Ausschlüssen
$exclude = "NT SERVICE\*","NT AUTHORITY\*","CONTOSO\SQLAdmins","msssa" 
Get-dtcSysadminAccounts -SqlInstance "SQL01","SQL02","SQL03" ` 
-ExcludeLogin $exclude -ContinueOnError
Nur unerwartete Konten auf der Konsole anzeigen
$r = Get-dtcSysadminAccounts -SqlInstance "SQL01" ` 
-ExcludeLogin "NT SERVICE\*","msssa" 
$r | Where-Object Status -eq 'Unexpected' | 
Format-Table LoginName, LoginType, IsEnabled, CreateDate, LastLogin
Deaktivierte Konten mit Sysadmin-Rechten finden
$r = Get-dtcSysadminAccounts -SqlInstance "SQL01" 
$r | Where-Object Status -eq 'Disabled' | 
Select-Object LoginName, LoginType, CreateDate | 
Format-Table -AutoSize
Zusammenfassung über alle Instanzen
$allInst = "SQL01","SQL02","SQL03","SQL04" 
$all = Get-dtcSysadminAccounts -SqlInstance $allInst -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-dtcLoginAuditSicherheit
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.
► 6 Beispiele anzeigen
Standard-Audit ohne Ausschlüsse
Invoke-dtcLoginAudit -SqlInstance "SQL01"
Mit angepassten Schwellwerten und Ausschlüssen
Invoke-dtcLoginAudit -SqlInstance "SQL01" ` 
-ExcludeLogin "NT SERVICE\*","NT AUTHORITY\*","msssa" ` 
-InactivityThresholdDays 60 ` 
-MaxPasswordAgeDays 90
Mit AD-Orphan-Prüfung (erfordert RSAT)
Invoke-dtcLoginAudit -SqlInstance "SQL01" ` 
-ExcludeLogin "NT SERVICE\*" ` 
-CheckAdOrphans
Nur Policy-Verstöße ausgeben
$r = Invoke-dtcLoginAudit -SqlInstance "SQL01" -ExcludeLogin "NT SERVICE\*" 
$r | Where-Object Category -eq 'Policy' | 
Format-Table LoginName, FindingType, Detail
Inaktive SQL-Logins identifizieren
$r = Invoke-dtcLoginAudit -SqlInstance "SQL01" 
$r | Where-Object FindingType -in 'Inactive','NeverUsed' | 
Sort-Object { $_.Detail } | 
Format-Table LoginName, LoginType, IsEnabled, Detail
Mehrere Instanzen und Ergebnis exportieren
Invoke-dtcLoginAudit -SqlInstance "SQL01","SQL02" ` 
-ExcludeLogin "NT SERVICE\*","msssa" ` 
-ContinueOnError | 
Where-Object FindingType -ne 'Clean' | 
Export-Csv "C:\Reports\LoginAudit_$(Get-Date -f 'yyyyMMdd').csv" ` 
-Encoding UTF8 -NoTypeInformation
Test-dtcSqlConfigurationSicherheit
Prüft sp_configure und Instanz-Eigenschaften gegen Best-Practice-Werte. Liefert für jede Abweichung direkt das korrigierende T-SQL-Statement. Schreibt SqlConfiguration_*.txt und *.csv.
► 7 Beispiele anzeigen
Standard-Prüfung mit allen Checks
Test-dtcSqlConfiguration -SqlInstance "SQL01"
CLR und Database Mail erlauben (explizit dokumentiert)
Test-dtcSqlConfiguration -SqlInstance "SQL01" ` 
-AllowCLR -AllowDatabaseMail
Mixed-Mode-Auth als akzeptabel markieren
Test-dtcSqlConfiguration -SqlInstance "SQL01" ` 
-AllowMixedMode
Strengeren Parallelismus-Schwellwert prüfen
Test-dtcSqlConfiguration -SqlInstance "SQL01" ` 
-MinCostThresholdParallelism 50
Nur Warnungen auf der Konsole anzeigen
$r = Test-dtcSqlConfiguration -SqlInstance "SQL01" 
$r | Where-Object Status -eq 'Warning' | 
Format-Table Setting, CurrentValue, ExpectedValue, Detail
Korrektur-Skript für alle Warnungen generieren
$r = Test-dtcSqlConfiguration -SqlInstance "SQL01" 
$fixes = $r | Where-Object { $_.Status -in 'Warning','Info' -and $_.FixScript } 
$fixes | ForEach-Object { 
"-- $($_.Setting) (aktuell: $($_.CurrentValue))" 
$_.FixScript 
"" 
} | Out-File "C:\Temp\SQL01_Config_Fix.sql" -Encoding UTF8
Mehrere Instanzen vergleichen
$instances = "SQL01","SQL02","SQL03" 
$all = Test-dtcSqlConfiguration -SqlInstance $instances -ContinueOnError 
$all | Group-Object SqlInstance | ForEach-Object { 
$w = @($_.Group|Where Status -eq 'Warning').Count 
"$($_.Name): $w Warnungen" 
}
Test-dtcSsasPermissionsSicherheit
Prüft die NTFS-Dateisystemberechtigungen aller SSAS-Datenpfade (Data, Backup, Temp, Log, MasterData, MasterIndex). Unterstützt Multidimensional, Tabular und PowerPivot – automatische Erkennung aus der Registry. Mit -Fix werden fehlende Berechtigungen gesetzt. Lokal und Remote. Schreibt SsasPermissions_*.txt und *.csv ins LogDir.
► 8 Beispiele anzeigen
Lokale SSAS-Instanz prüfen (Read-Only)
Test-dtcSsasPermissions
Fehlende Berechtigungen automatisch setzen
Test-dtcSsasPermissions -Fix
Remote-Rechner prüfen und korrigieren
Test-dtcSsasPermissions -ComputerName "SSAS01" -Fix
Mehrere Rechner mit zusätzlichem Admin-Konto
Test-dtcSsasPermissions -ComputerName "SSAS01","SSAS02" -Fix ` 
-AdditionalAccounts "DOMAIN\DBA_Admins","DOMAIN\SSAS_Backup"
Bestimmte SSAS-Instanz prüfen
Test-dtcSsasPermissions -ComputerName "SSAS01" -InstanceName "TABULAR" -Fix
Nur Probleme anzeigen
Test-dtcSsasPermissions -ComputerName "SSAS01" | 
Where-Object Status -in 'Missing','PathNotFound','Error' | 
Format-Table ComputerName, Instance, InstanceType, PathType, Path, MissingAccounts -AutoSize
Mit eingeschränkten Rechten statt FullControl
Test-dtcSsasPermissions -ComputerName "SSAS01" ` 
-RequiredRights Modify -Fix
Pipeline – mehrere Rechner
"SSAS01","SSAS02","SSAS03" | Test-dtcSsasPermissions -Fix | 
Group-Object ComputerName | 
ForEach-Object { 
$ok = @($_.Group | Where-Object Status -eq 'OK').Count 
$fix = @($_.Group | Where-Object Status -eq 'Fixed').Count 
$err = @($_.Group | Where-Object Status -in 'Missing','Error').Count 
"$($_.Name): $ok OK, $fix gesetzt, $err Problem(e)" 
}
Set-dtcSqlPolicyStateSicherheit
Aktiviert oder deaktiviert eine benannte PBM-Policy (Policy-Based Management) auf einer oder mehreren SQL Server-Instanzen.
► 4 Beispiele anzeigen
Policy deaktivieren (Modul-Standard)
Set-dtcSqlPolicyState -SqlInstance "SQL01" -State Disable
Explizite Policy angeben
Set-dtcSqlPolicyState -SqlInstance "SQL01" ` 
-Policy "xp_cmdshell must be disabled" -State Disable
Policy auf mehreren Instanzen aktivieren
"SQL01","SQL02","SQL03" | 
Set-dtcSqlPolicyState -State Enable
Policy-Status prüfen und bei Bedarf korrigieren
$pol = Get-DbaPolicy -SqlInstance "SQL01" -Policy "New Login_Enforce Passwort Policy" 
if (-not $pol.Enabled) { 
Set-dtcSqlPolicyState -SqlInstance "SQL01" -State Enable 
Write-Host "Policy reaktiviert." 
}

🔍 Diagnose

Get-dtcDatabaseHealthDiagnose
Sammelbericht pro Datenbank: DBCC CHECKDB-Alter, VLF-Anzahl, AutoGrowth-Ereignisse, letzte Backups, Datenbankgröße. Schreibt DatabaseHealth_*.txt und *.csv.
► 6 Beispiele anzeigen
Standard Health-Report
Get-dtcDatabaseHealth -SqlInstance "SQL01"
Strengere CHECKDB-Prüfung (wöchentlich)
Get-dtcDatabaseHealth -SqlInstance "SQL01" ` 
-MaxCheckDbAgeDays 7 -MaxVlfCount 100
System-Datenbanken einbeziehen
Get-dtcDatabaseHealth -SqlInstance "SQL01" -IncludeSystemDatabases $true
Bestimmte Datenbanken ausschließen
Get-dtcDatabaseHealth -SqlInstance "SQL01" ` 
-ExcludeDatabase "ReportServer*","tempdb"
Nur Probleme anzeigen
Get-dtcDatabaseHealth -SqlInstance "SQL01" | 
Where-Object OverallStatus -ne 'OK' | 
Sort-Object OverallStatus, Database | 
Format-Table Database, OverallStatus, CheckDbAgeDays, VlfCount, AutoGrowthEvents -AutoSize
VLF-Probleme gezielt finden
Get-dtcDatabaseHealth -SqlInstance "SQL01" | 
Where-Object { $_.VlfCount -gt 500 } | 
Sort-Object VlfCount -Descending | 
Select-Object Database, VlfCount, SizeMB, RecoveryModel | 
Format-Table -AutoSize

⚡ Performance

Get-dtcWaitStatReportPerformance
Wertet sys.dm_os_wait_stats aus. Filtert Idle-Waits heraus und liefert priorisierte Wait-Typen mit Kategorie und konkreter Handlungsempfehlung. Optional Delta-Messung für Echtzeit-Diagnose.
► 6 Beispiele anzeigen
Kumulierte Wait Stats seit SQL-Start
Get-dtcWaitStatReport -SqlInstance "SQL01"
60-Sekunden Delta-Messung unter Last
Get-dtcWaitStatReport -SqlInstance "SQL01" ` 
-DeltaMeasurementSeconds 60
Nur kritische Wait-Typen (≥ 10%)
Get-dtcWaitStatReport -SqlInstance "SQL01" ` 
-MinWaitTimePct 10 -TopN 5
Kategorie-Zusammenfassung für schnellen Überblick
$r = Get-dtcWaitStatReport -SqlInstance "SQL01" 
$r | Group-Object Category | 
ForEach-Object { 
$ms = ($_.Group | Measure-Object WaitTimeMs -Sum).Sum 
[PSCustomObject]@{ 
Kategorie = $_.Name 
WaitTimeMs = $ms 
WaitTypes = $_.Count 
} 
} | Sort-Object WaitTimeMs -Descending | Format-Table -AutoSize
Mehrere Instanzen gleichzeitig vergleichen
Get-dtcWaitStatReport -SqlInstance "SQL01","SQL02" -ContinueOnError | 
Where-Object Status -in 'Critical','Warning' | 
Select-Object SqlInstance, WaitType, Category, PctOfTotal, Recommendation | 
Format-Table -AutoSize
Laufende Diagnose mit Wiederholung
# Alle 2 Minuten einen neuen 30-Sekunden-Snapshot 
for ($i=0; $i -lt 10; $i++) { 
Write-Host "=== Messung $($i+1) - $(Get-Date -f 'HH:mm:ss') ===" -ForegroundColor Cyan 
Get-dtcWaitStatReport -SqlInstance "SQL01" ` 
-DeltaMeasurementSeconds 30 -TopN 5 -MinWaitTimePct 5 | 
Format-Table WaitType, Category, PctOfTotal, AvgWaitMs, Status -AutoSize 
Start-Sleep 90 
}

📊 Kapazität

Get-dtcAutoGrowthReportKapazität
Wertet AutoGrowth-Ereignisse (EventClass 92/93) aus dem Default Trace aus. Zeigt pro Datenbankdatei Anzahl, Volumen, Dauer und empfohlene neue Anfangsgröße.
► 5 Beispiele anzeigen
Standard AutoGrowth-Report (30 Tage)
Get-dtcAutoGrowthReport -SqlInstance "SQL01"
Nur letzten 14 Tage, mindestens 5 Ereignisse
Get-dtcAutoGrowthReport -SqlInstance "SQL01" ` 
-HistoryDays 14 -MinGrowthEvents 5
Datenbanken ausschließen
Get-dtcAutoGrowthReport -SqlInstance "SQL01" ` 
-ExcludeDatabase "ReportServer*","model"
Empfohlene ALTER DATABASE Befehle generieren
$r = Get-dtcAutoGrowthReport -SqlInstance "SQL01" 
$r | Where-Object Status -in 'Critical','Warning' | 
ForEach-Object { 
"-- $($_.Database) | $($_.FileName)" 
"-- Aktuelle Größe: $($_.CurrentSizeMB) MB | Wachstum: $($_.TotalGrowthMB) MB | Empfehlung: $($_.RecommendedSizeMB) MB" 
"ALTER DATABASE [$($_.Database)] MODIFY FILE (NAME = '<LogicalName>', SIZE = $($_.RecommendedSizeMB)MB);" 
"" 
}
Log-Dateien separat analysieren
Get-dtcAutoGrowthReport -SqlInstance "SQL01" | 
Where-Object FileType -eq 'Log' | 
Sort-Object GrowthEventCount -Descending | 
Format-Table Database, GrowthEventCount, TotalGrowthMB, AvgGrowthDurationMs, Status
Get-dtcDiskSpaceReportKapazität
Ermittelt freien Speicherplatz aller SQL-relevanten Volumes und schätzt Tage bis zur Erschöpfung basierend auf AutoGrowth-Wachstumsrate.
► 5 Beispiele anzeigen
Standard-Freispeicher-Report
Get-dtcDiskSpaceReport -SqlInstance "SQL01"
Engere Schwellwerte
Get-dtcDiskSpaceReport -SqlInstance "SQL01" ` 
-WarnThresholdPct 30 -CriticalThresholdPct 15
Kürzerer Analysezeitraum für Wachstumsprognose
Get-dtcDiskSpaceReport -SqlInstance "SQL01" -HistoryDays 7
Nur kritische Laufwerke anzeigen
Get-dtcDiskSpaceReport -SqlInstance "SQL01" | 
Where-Object Status -in 'Critical','Warning' | 
Format-Table MountPoint, TotalGB, FreeGB, FreePct, DaysUntilFull, Message
Mehrere Instanzen – alle Laufwerke im Überblick
Get-dtcDiskSpaceReport -SqlInstance "SQL01","SQL02","SQL03" -ContinueOnError | 
Sort-Object FreePct | 
Format-Table SqlInstance, MountPoint, FreeGB, FreePct, DaysUntilFull, Status

📡 Monitoring

Get-dtcOperationProgressMonitoring
Zeigt Fortschritt und ETA laufender Restore-, Backup- und AutoSeed-Vorgänge. Datenquelle: sys.dm_exec_requests und sys.dm_hadr_automatic_seeding.
► 5 Beispiele anzeigen
Einmalige Abfrage aller laufenden Vorgänge
Get-dtcOperationProgress -SqlInstance "SQL01"
Nur Restore-Vorgänge überwachen
Get-dtcOperationProgress -SqlInstance "SQL01" -OperationType Restore
Kontinuierliche Überwachung alle 30 Sekunden
Get-dtcOperationProgress -SqlInstance "SQL01" ` 
-OperationType Restore -Loop -IntervalSeconds 30
Bestimmte Datenbank beobachten
Get-dtcOperationProgress -SqlInstance "SQL01" -Database "MyApp" -Loop
AutoSeed-Fortschritt während AG-Einbindung
# Parallel zu Add-dtcAgDatabase ausführen 
Get-dtcOperationProgress -SqlInstance "SQL01" ` 
-OperationType AutoSeed -Loop -IntervalSeconds 15

💾 Backup

Test-dtcBackupCoverageBackup
Prüft für alle Datenbanken ob innerhalb konfigurierter Zeitfenster gültige Backups existieren. Bei FULL/BULK_LOGGED-Recovery-Modell wird Log-Backup separat geprüft.
► 6 Beispiele anzeigen
Standard-Backup-Prüfung
Test-dtcBackupCoverage -SqlInstance "SQL01"
Strenge Backup-Policy (täglich Full, stündlich Log)
Test-dtcBackupCoverage -SqlInstance "SQL01" ` 
-MaxFullBackupAgeDays 1 -MaxLogBackupAgeHours 1
Mit Diff-Backup-Prüfung
Test-dtcBackupCoverage -SqlInstance "SQL01" ` 
-MaxFullBackupAgeDays 7 ` 
-MaxDiffBackupAgeDays 1 ` 
-MaxLogBackupAgeHours 2
Bestimmte Datenbanken ausschließen
Test-dtcBackupCoverage -SqlInstance "SQL01" ` 
-ExcludeDatabase "ReportServer*","AutomatedTest_*"
Nur kritische Probleme melden
Test-dtcBackupCoverage -SqlInstance "SQL01" | 
Where-Object Status -in 'Critical','Missing' | 
Select-Object Database, BackupType, LastBackup, AgeHours, Message | 
Format-Table -AutoSize
Mehrere Instanzen überwachen
$issues = "SQL01","SQL02","SQL03" | 
ForEach-Object { 
Test-dtcBackupCoverage -SqlInstance $_ -ContinueOnError 
} | Where-Object Status -in 'Critical','Missing' 
 
if ($issues) { 
Write-Warning "$(@($issues).Count) Backup-Probleme gefunden!" 
$issues | Format-Table SqlInstance, Database, BackupType, AgeHours, Message 
}

⚙️ SQL Agent

Invoke-dtcAgentJobAuditSQL Agent
Vollständiger Audit aller SQL Agent Jobs: Owner-Fix (SA via SID 0x01), Zeitkonflikte, deaktivierte Jobs, fehlende Schedules, Laufzeiten, Fehlschläge. Schreibt AgentJobAudit_*.txt und *.csv.
► 7 Beispiele anzeigen
Vollständiger Audit mit Owner-Fix
Invoke-dtcAgentJobAudit -SqlInstance "SQL01"
Nur Diagnose ohne Änderungen
Invoke-dtcAgentJobAudit -SqlInstance "SQL01" -NoFix
Bestimmte Jobs von Disabled-Prüfung ausnehmen
Invoke-dtcAgentJobAudit -SqlInstance "SQL01" ` 
-ExcludeDisabledCheck "syspolicy_*","DatabaseBackup_*","IndexOptimize_*"
Owner-Fix für bestimmte Jobs unterdrücken
Invoke-dtcAgentJobAudit -SqlInstance "SQL01" ` 
-ExcludeOwnerFix "ThirdPartyApp_*","Monitoring_*"
Kürzeren History-Zeitraum auswerten
Invoke-dtcAgentJobAudit -SqlInstance "SQL01" -HistoryDays 7
Nur fehlgeschlagene Jobs anzeigen
$r = Invoke-dtcAgentJobAudit -SqlInstance "SQL01" -NoFix 
$r | Where-Object FindingType -eq 'Failed' | 
Sort-Object Value -Descending | 
Select-Object JobName, Value, Detail | 
Format-Table -AutoSize
Top-5 langsamste Jobs
$r = Invoke-dtcAgentJobAudit -SqlInstance "SQL01" -NoFix 
$r | Where-Object FindingType -eq 'AvgRuntime' | 
Sort-Object { [int]($_.Detail -replace 'Läufe.*Ø\s*','') -replace '[^0-9].*','' } -Descending | 
Select-Object -First 5 JobName, Value, Detail | 
Format-Table -AutoSize

🔧 Wartung

New-dtcOlaBackupJobsWartung
Erstellt drei SQL Agent Jobs für Ola Hallengrens DatabaseBackup-Lösung: Full, Diff und Log für User-Datenbanken. User-DBs werden in <BackupDirectory>\\User-db gesichert. Ausgabe-Log via OutputFile-Token (kein xp_cmdshell). Mit -UseDiff: Full nur samstags, Diff Mo-Fr+So. Job-Namen global über Set-dtcSqlToolsConfig konfigurierbar.
► 7 Beispiele anzeigen
Standard – alle Defaults
New-dtcOlaBackupJobs -SqlInstance "SQL01"
Mit Diff-Strategie (-UseDiff)
New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff
Explicit Backup-Verzeichnis + Cleanup + Operator
New-dtcOlaBackupJobs -SqlInstance "SQL01" ` 
-BackupDirectory "E:\SQLBackup" ` 
-CleanupTime 72 ` 
-OperatorName "DBA-Team" ` 
-UseDiff
Job-Namen global konfigurieren (einmalig)
Set-dtcSqlToolsConfig ` 
-OlaJobNameFull "Prod-DB-FULL" ` 
-OlaJobNameDiff "Prod-DB-DIFF" ` 
-OlaJobNameLog "Prod-DB-LOG" 
 
New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff
Nur bestimmte Datenbanken
New-dtcOlaBackupJobs -SqlInstance "SQL01" ` 
-Databases "AppDB,ReportDB" ` 
-LogIntervalMinutes 15 ` 
-CleanupTime 0
Jobs aktualisieren
New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff -Update
Ergebnis auswerten
$r = New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff 
Write-Host "FULL : $($r.FullJobStatus)" 
Write-Host "DIFF : $($r.DiffJobStatus)" 
Write-Host "LOG : $($r.LogJobStatus)" 
Write-Host "Dir : $($r.BackupDirectory)"
New-dtcOlaSysDbBackupJobWartung
Erstellt einen SQL Agent Job für das tägliche Full-Backup der SQL Server System-Datenbanken (master, model, msdb) via Ola Hallengrens DatabaseBackup. Backups werden in <BackupDirectory>\\Sys-db gesichert. Ausgabe-Log via OutputFile-Token (kein xp_cmdshell). Job-Name über Set-dtcSqlToolsConfig -OlaJobNameSysDbBackup konfigurierbar.
► 5 Beispiele anzeigen
Standard – alle Defaults
New-dtcOlaSysDbBackupJob -SqlInstance "SQL01"
Alle Ola-Jobs gemeinsam einrichten
# User-Datenbanken (Full/Diff/Log) 
New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff -OperatorName "DBA-Team" 
# System-Datenbanken (täglich Full) 
New-dtcOlaSysDbBackupJob -SqlInstance "SQL01" -OperatorName "DBA-Team"
Explizites Verzeichnis + Cleanup
New-dtcOlaSysDbBackupJob -SqlInstance "SQL01" ` 
-BackupDirectory "E:\SQLBackup" ` 
-ScheduleTime "20:00" ` 
-CleanupTime 72 ` 
-OperatorName "DBA-Team"
Job-Name konfigurieren
Set-dtcSqlToolsConfig -OlaJobNameSysDbBackup "Prod-SysDB-FULL" 
New-dtcOlaSysDbBackupJob -SqlInstance "SQL01"
Job aktualisieren
New-dtcOlaSysDbBackupJob -SqlInstance "SQL01" -ScheduleTime "22:00" -Update
New-dtcOlaMaintenanceJobsWartung
Erstellt drei SQL Agent Jobs für Ola Hallengrens Wartungslösung: IndexOptimize und DatabaseIntegrityCheck (User + System). Alle Jobs laufen standardmäßig wöchentlich sonntags um 23:00. IndexOptimize wird mit produktionsoptimierten Parametern konfiguriert: Fragmentierungsschwellen 5%/30%, MinPages 1000, FillFactor 90%, SortInTempdb, UpdateStatistics ALL. Job-Namen global über Set-dtcSqlToolsConfig konfigurierbar. Schreibt Protokoll in <LogPath>\\MaintenanceLog\\.
► 7 Beispiele anzeigen
Standard – alle Defaults
New-dtcOlaMaintenanceJobs -SqlInstance "SQL01"
Abweichende Zeit und Tag (Samstag 22:00)
New-dtcOlaMaintenanceJobs -SqlInstance "SQL01" ` 
-ScheduleTime "22:00" ` 
-ScheduleDay 64
Strengere Fragmentierungsschwellen + kleinerer FillFactor
New-dtcOlaMaintenanceJobs -SqlInstance "SQL01" ` 
-FragmentationLevel1 10 ` 
-FragmentationLevel2 40 ` 
-FillFactor 85 ` 
-OperatorName "DBA-Team"
Schneller IntegrityCheck (PhysicalOnly)
New-dtcOlaMaintenanceJobs -SqlInstance "SQL01" -PhysicalOnly Y
Job-Namen global konfigurieren
Set-dtcSqlToolsConfig ` 
-OlaJobNameIndexOpt "Prod-IndexOpt" ` 
-OlaJobNameIntUserDb "Prod-Integrity-User" ` 
-OlaJobNameIntSysDb "Prod-Integrity-System" 
New-dtcOlaMaintenanceJobs -SqlInstance "SQL01"
Alle Ola-Jobs auf einer Instanz einrichten
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
# Backup-Jobs 
New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff -OperatorName "DBA-Team" 
# Wartungs-Jobs 
New-dtcOlaMaintenanceJobs -SqlInstance "SQL01" -OperatorName "DBA-Team"
Ergebnis auswerten
$r = New-dtcOlaMaintenanceJobs -SqlInstance "SQL01" 
Write-Host "IndexOpt : $($r.IndexOptStatus)" 
Write-Host "Int User : $($r.IntUserDbStatus)" 
Write-Host "Int Sys : $($r.IntSysDbStatus)" 
Write-Host "Status : $($r.OverallStatus)"
Invoke-dtcDatabaseUserCleanupWartung
Bereinigt Datenbankbenutzer einer SQL Server-Datenbank: entfernt User ohne korrespondierenden Server-Login, reimportiert zuvor gesicherte User, repariert Orphaned Users. Kann eigenständig oder als Baustein in eigenen Restore-Workflows verwendet werden.
► 6 Beispiele anzeigen
Nur User exportieren (vor einem Restore)
$export = Invoke-dtcDatabaseUserCleanup -SqlInstance "SQL01" ` 
-Database "MyApp" -ExportOnly 
$export.ExportedUsers | Format-Table UserName, LoginName, Roles
Bereinigung nach einem Restore
Invoke-dtcDatabaseUserCleanup -SqlInstance "SQL01" -Database "MyApp"
Export + Restore als zweistufiger Workflow
# Schritt 1: vor dem Restore exportieren 
$export = Invoke-dtcDatabaseUserCleanup -SqlInstance "SQL01" ` 
-Database "MyApp" -ExportOnly 
 
# ... eigener Restore-Vorgang ... 
 
# Schritt 2: nach dem Restore bereinigen und reimportieren 
$result = Invoke-dtcDatabaseUserCleanup -SqlInstance "SQL01" ` 
-Database "MyApp" -SavedUsers $export.ExportedUsers 
Write-Host "$($result.UsersRemoved) entfernt, $($result.UsersRestored) wiederhergestellt"
Nur reimportieren ohne Bereinigung
Invoke-dtcDatabaseUserCleanup -SqlInstance "SQL01" ` 
-Database "MyApp" -SavedUsers $savedUsers -SkipCleanup
Mehrere Datenbanken bereinigen
'AppDB','LogDB','AuditDB' | ForEach-Object { 
Invoke-dtcDatabaseUserCleanup -SqlInstance "SQL01" -Database $_ -Verbose 
} | Select-Object Database, UsersRemoved, Status | Format-Table
Ohne abschließende Orphan-Reparatur
Invoke-dtcDatabaseUserCleanup -SqlInstance "SQL01" ` 
-Database "MyApp" -SkipOrphanRepair
Invoke-dtcCollationChangeWartung
Stellt die Server-Collation einer lokalen SQL Server-Instanz automatisch um. Verwendet die Methode sqlservr.exe -m -T4022 -T3659 -q "<Collation>" die das Collation-Flag der Systemdatenbanken direkt umschreibt ohne ein vollständiges Setup-Rebuild zu benötigen. Inklusive Pre-Flight-Check, WhatIf-Modus und Rollback-Dokumentation.
► 8 Beispiele anzeigen
Collation einer Standalone-Instanz ändern
Invoke-dtcCollationChange -SqlInstance "SQL01" ` 
-NewCollation "Latin1_General_CI_AS"
WhatIf – alle Schritte anzeigen ohne Ausführung
Invoke-dtcCollationChange -SqlInstance "SQL01" ` 
-NewCollation "Latin1_General_CI_AS" -WhatIf
Instanz + alle User-DBs umstellen
Invoke-dtcCollationChange -SqlInstance "SQL01" ` 
-NewCollation "Latin1_General_CI_AS" ` 
-IncludeUserDatabases
User-DBs umstellen mit Ausnahmen
Invoke-dtcCollationChange -SqlInstance "SQL01" ` 
-NewCollation "Latin1_General_CI_AS" ` 
-IncludeUserDatabases ` 
-ExcludeDatabase "ReportServer*","ThirdPartyApp"
Mit Backup vor der Änderung
Invoke-dtcCollationChange -SqlInstance "SQL01" ` 
-NewCollation "SQL_Latin1_General_CP1_CI_AS" ` 
-BackupBeforeChange ` 
-IncludeUserDatabases
Benannte Instanz
Invoke-dtcCollationChange -SqlInstance "SQL01\INST2" ` 
-NewCollation "Latin1_General_CI_AS"
Rückgabeobjekt auswerten
$r = Invoke-dtcCollationChange -SqlInstance "SQL01" ` 
-NewCollation "Latin1_General_CI_AS" ` 
-IncludeUserDatabases 
 
switch ($r.Status) { 
'Success' { 
Write-Host "Erfolgreich: $($r.OldCollation) → $($r.NewCollation)" 
Write-Host "User-DBs geändert: $($r.UserDatabasesChanged)" 
if ($r.ColumnScriptPath) { 
Write-Warning "Spalten-Skript prüfen: $($r.ColumnScriptPath)" 
} 
} 
'AlreadySet' { Write-Host "Bereits korrekt gesetzt." } 
'AgDetected' { Write-Error "AG erkannt – manuell austragen: $($r.Message)" } 
'WhatIf' { Write-Host "WhatIf-Modus – keine Änderungen." } 
default { Write-Error "Fehler: $($r.Status) – $($r.Message)" } 
}
Rollback: alte Collation wiederherstellen
# Rollback-Datei zeigt den exakten Befehl: 
Get-Content "C:\System\WinSrvLog\MSSQL\CollationChange_Rollback_SQL01_2026-04-17.txt" 
 
# Rollback ausführen: 
Invoke-dtcCollationChange -SqlInstance "SQL01" ` 
-NewCollation "SQL_Latin1_General_CP1_CI_AS"
Invoke-dtcLogShrinkWartung
Shrinkted die Transaktions-Logdatei (LDF) auf einen konfigurierbaren prozentualen Zielwert. Gibt empfohlene Initial-Dateigröße zurück. Bei AG: automatischer Redirect zum Primary.
► 5 Beispiele anzeigen
Log auf Standardzielwert shrinken (10%)
Invoke-dtcLogShrink -SqlInstance "SQL01" -Database "MyApp"
Aggressiveres Shrink-Ziel
Invoke-dtcLogShrink -SqlInstance "SQL01" -Database "MyApp" ` 
-ShrinkTargetPercent 5 -MinTargetMB 128
Alle Datenbanken einer Instanz shrinken
Invoke-dtcLogShrink -SqlInstance "SQL01" -All
Bestimmte Datenbanken mit Array
Invoke-dtcLogShrink -SqlInstance "SQL01" ` 
-Database "MyApp","AppLog","AppAudit"
Ergebnis mit Größenvergleich ausgeben
$r = Invoke-dtcLogShrink -SqlInstance "SQL01" -All 
$r | Select-Object Database, LogSizeMBBefore, LogSizeMBAfter, 
FreedMB, TargetMB, Status | 
Format-Table -AutoSize

⚙️ Konfiguration

Set-dtcSsrsConfigurationKonfiguration
Konfiguriert SQL Server Reporting Services vollautomatisch via WMI-Provider. Unterstützt lokale und Remote-Installation sowie AlwaysOn AG (DB auf Listener). Konfiguriert Datenbank, URLs, Dienstkonto und Encryption Key Backup. Lokal: kein WinRM nötig. Remote: WsMan CIM-Session. AG: automatische Primary-Erkennung, DB-Erstellung auf Primary, SetDatabaseConnection auf Listener.
► 7 Beispiele anzeigen
Lokal – alle Standardwerte
Set-dtcSsrsConfiguration
Remote
Set-dtcSsrsConfiguration ` 
-ComputerName "SSRS01" ` 
-DatabaseServer "SQL01" ` 
-Credential (Get-Credential)
AG-Szenario: DB auf Listener
Set-dtcSsrsConfiguration ` 
-ComputerName "SSRS01" ` 
-DatabaseServer "AG_SSRS_Listener" ` 
-DatabaseName "ReportServer"
AG + Dienstkonto + Encryption Key
$svcPwd = Read-Host "Dienstkonto-Kennwort" -AsSecureString 
$keyPwd = Read-Host "Schluessel-Kennwort" -AsSecureString 
Set-dtcSsrsConfiguration ` 
-ComputerName "SSRS01" ` 
-DatabaseServer "AG_SSRS_Listener" ` 
-ServiceAccount "DOMAIN\svc_ssrs" ` 
-ServiceAccountPassword $svcPwd ` 
-EncryptionKeyFile "\\FileServer\Backup\SSRS_Key.snk" ` 
-EncryptionKeyPassword $keyPwd
SQL-Auth für DB-Verbindung
Set-dtcSsrsConfiguration ` 
-ComputerName "SSRS01" ` 
-DatabaseServer "SQL01" ` 
-DatabaseAuthType SQL ` 
-DatabaseCredential (Get-Credential -Message "SQL-Login ReportServer-DB")
Nur URLs aktualisieren
Set-dtcSsrsConfiguration ` 
-ComputerName "SSRS01" ` 
-ReportServerUrl "http://+:8080/ReportServer" ` 
-ReportsUrl "http://+:8080/Reports" ` 
-SkipDatabase -SkipServiceAccount -SkipEncryptionKeyBackup
Ergebnis mit AG-Infos auswerten
$r = Set-dtcSsrsConfiguration ` 
-ComputerName "SSRS01" -DatabaseServer "AG_SSRS_Listener" 
Write-Host "Modus : $($r.SsrsMode)" 
Write-Host "DB-Server : $($r.DatabaseServer)" 
Write-Host "AG-Listener: $($r.IsAgListener) | Primary: $($r.AgPrimaryNode)" 
Write-Host "Status : $($r.OverallStatus)" 
Write-Host "Bericht : $($r.ReportPath)"
Set-dtcSqlToolsConfigKonfiguration
Setzt modulweite Standardwerte für die aktuelle Session: LogPath, CentralLogPath, KeyPath, LoginExportDir, DefaultPolicy sowie alle Ola Job-Namen. Gibt die aktuelle Konfiguration als PSCustomObject zurück.
► 3 Beispiele anzeigen
Zentrale Pfade konfigurieren
Set-dtcSqlToolsConfig ` 
-CentralLogPath "W:\75084-Datenbanken\MSSQL\dtc\Log" ` 
-KeyPath "W:\75084-Datenbanken\MSSQL\dtc\Keys"
Ola Job-Namen anpassen
Set-dtcSqlToolsConfig ` 
-OlaJobNameFull "Prod-FULL" ` 
-OlaJobNameDiff "Prod-DIFF" ` 
-OlaJobNameLog "Prod-LOG"
Aktuelle Konfiguration anzeigen
Set-dtcSqlToolsConfig | Format-List
Set-dtcTsmConfigurationKonfiguration
Konfiguriert die IBM Spectrum Protect (TSM) Client-Optionsdatei dsm.opt für SQL Server-Umgebungen. Fügt EXCLUDE-Einträge für DB-Dateien (*.ldf, *.mdf, *.ndf), INCLUDE-Einträge für Backup-Verzeichnisse und eine Management-Klasse hinzu. Lokal und Remote (UNC). Vor jeder Änderung automatisches Backup als dsm.opt.bak. Bei -UseDiff wird MC_B_NL.NL_42.42.NA erzwungen.
► 7 Beispiele anzeigen
Minimal – lokal, Diff-Strategie
Set-dtcTsmConfiguration -UseDiff
Mit expliziter Management-Klasse (kein Diff)
Set-dtcTsmConfiguration -ManagementClass MC_B_NL.NL_62.62.NA
Remote-Server
Set-dtcTsmConfiguration ` 
-ComputerName "SQL01" ` 
-ManagementClass MC_B_NL.NL_42.42.NA
Explizites Backup-Verzeichnis + zusätzliche Include-Pfade
Set-dtcTsmConfiguration ` 
-ComputerName "SQL01" ` 
-BackupDirectory "E:\SQLBackup" ` 
-ManagementClass MC_B_NL.NL_42.42.NA ` 
-AdditionalIncludePaths @("E:\SQLBackup\Archive","F:\TSMLogs")
Expliziter dsm.opt-Pfad
Set-dtcTsmConfiguration ` 
-DsmOptPath "C:\TSM\config\dsm.opt" ` 
-ManagementClass MC_B_NL.NL_35.35.NA
Ola + TSM vollständig einrichten
# 1. Ola Backup-Jobs anlegen 
New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff 
New-dtcOlaSysDbBackupJob -SqlInstance "SQL01" 
 
# 2. TSM für dieselben Backup-Verzeichnisse konfigurieren 
Set-dtcTsmConfiguration -ComputerName "SQL01" -UseDiff
Vorschau (WhatIf)
Set-dtcTsmConfiguration -ComputerName "SQL01" -UseDiff -WhatIf
Set-dtcSsisConfigurationKonfiguration
Konfiguriert SQL Server Integration Services vollautomatisch: SSIS-Dienst (Konto + Starttyp), SSISDB-Katalog (CREATE CATALOG, CLR, Retention, Logging), AlwaysOn AG-Integration (DMK-Backup/Restore auf Secondaries, sp_ssis_startup, Maintenance Job deaktivieren, Linked Server) sowie Katalog-Ordner und Umgebungen. Lokal und Remote. Automatische Primary-Erkennung bei AG.
► 6 Beispiele anzeigen
Standalone – minimale Konfiguration
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
Set-dtcSsisConfiguration -SqlInstance "SQL01" -CatalogPassword $pwd
Standalone mit Ordnern, Umgebungen und Dienstkonto
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
$svcPwd = Read-Host "Dienst-Kennwort" -AsSecureString 
Set-dtcSsisConfiguration ` 
-SqlInstance "SQL01" ` 
-CatalogPassword $pwd ` 
-SsisServiceAccount "DOMAIN\svc_ssis" ` 
-SsisServiceAccountPassword $svcPwd ` 
-CatalogFolder @("ETL","Staging","Reporting") ` 
-Environments @("Development","Test","Production") ` 
-RetentionPeriod 180
AlwaysOn AG – vollständige Integration
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
Set-dtcSsisConfiguration ` 
-SqlInstance "SQL01" ` 
-AgName "AG_SSIS" ` 
-AgListener "AG_SSIS_Listener" ` 
-CatalogPassword $pwd ` 
-CatalogFolder "ETL"
AG mit expliziten Nodes und Dienstkonto
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
$svcPwd = Read-Host "Dienst-Kennwort" -AsSecureString 
Set-dtcSsisConfiguration ` 
-SqlInstance "SQL01" ` 
-AgName "AG_SSIS" ` 
-AgNodes @("SQL01","SQL02","SQL03") ` 
-CatalogPassword $pwd ` 
-SsisServiceAccount "DOMAIN\svc_ssis" ` 
-SsisServiceAccountPassword $svcPwd ` 
-CatalogFolder @("ETL","Staging") ` 
-Environments @("DEV","TEST","PROD")
Nur Ordner und Umgebungen ergänzen
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
Set-dtcSsisConfiguration ` 
-SqlInstance "SQL01" ` 
-CatalogPassword $pwd ` 
-CatalogFolder @("Finance","Logistics") ` 
-Environments @("Production") ` 
-SkipService -SkipAg
Ergebnis auswerten
$pwd = Read-Host "SSISDB-Kennwort" -AsSecureString 
$r = Set-dtcSsisConfiguration ` 
-SqlInstance "SQL01" -AgName "AG_SSIS" -CatalogPassword $pwd 
Write-Host "Status : $($r.OverallStatus)" 
Write-Host "AG-Nodes : $($r.AgNodes -join ', ')" 
Write-Host "Listener : $($r.AgListener)" 
Write-Host "Ordner neu : $($r.FoldersCreated -join ', ')" 
Write-Host "Umgebungen : $($r.EnvironmentsCreated -join ', ')" 
Write-Host "Bericht : $($r.ReportPath)"

🌐 Netzwerk

Test-dtcSqlSpnNetzwerk
Prüft alle SQL Server SPNs (Server + AG-Listener) im Active Directory. Generiert setspn-Befehle für das AD-Team. Schreibt SPN_Commands_*.txt und SPN_Report_*.txt automatisch ins LogDir.
► 6 Beispiele anzeigen
Lokalen SQL Server prüfen
Test-dtcSqlSpn
Bestimmte Instanz prüfen
Test-dtcSqlSpn -SqlInstance "SQL01"
Benannte Instanz prüfen
Test-dtcSqlSpn -SqlInstance "SQL01\PROD"
Alle AG-Nodes eines Clusters prüfen
Test-dtcSqlSpn -SqlInstance "SQL01","SQL02","SQL03"
Nur fehlende/falsche SPNs und Befehle ausgeben
Test-dtcSqlSpn -SqlInstance "SQL01" | 
Where-Object Status -in 'Missing','WrongAccount' | 
Select-Object SPN, Status, ExpectedAccount, SetSpnCommand, DeleteSpnCommand | 
Format-Table -AutoSize
setspn-Befehle für AD-Team als Textdatei exportieren
Test-dtcSqlSpn -SqlInstance "SQL01","SQL02","SQL03" | 
Where-Object Status -in 'Missing','WrongAccount' | 
ForEach-Object { 
if ($_.DeleteSpnCommand) { "# Schritt 1 - falsches Konto entfernen:"; $_.DeleteSpnCommand } 
"# Schritt 2 - SPN registrieren:"; $_.SetSpnCommand; "" 
} | Out-File "C:\Temp\SPN_Befehle_AD_Team.txt" -Encoding UTF8

📋 Dokumentation

Export-dtcInstanceInventoryDokumentation
Erstellt eine vollständige Inventarisierung einer Instanz: Version, Edition, Datenbanken, Logins, Linked Server, Agent Jobs, sp_configure-Abweichungen, AlwaysOn-Konfiguration. Schreibt TXT+CSV ins LogDir.
► 5 Beispiele anzeigen
Inventar einer Instanz erstellen
Export-dtcInstanceInventory -SqlInstance "SQL01"
Mehrere Instanzen inventarisieren
Export-dtcInstanceInventory -SqlInstance "SQL01","SQL02","SQL03" ` 
-ContinueOnError
Dateipfade ausgeben
$r = Export-dtcInstanceInventory -SqlInstance "SQL01" 
Write-Host "TXT: $($r.TxtFile)" 
Write-Host "CSV: $($r.CsvFile)" 
# Direkt öffnen: 
Start-Process notepad $r.TxtFile
Datenbank-CSV für Excel-Auswertung
$r = Export-dtcInstanceInventory -SqlInstance "SQL01" 
# CSV enthält: DatabaseName, Status, RecoveryModel, SizeMB, LastFullBackup, Owner, ... 
Import-Csv $r.CsvFile | Sort-Object SizeMB -Descending | 
Select-Object DatabaseName, SizeMB, RecoveryModel, LastFullBackup | 
Format-Table -AutoSize
Versionsinformation aller Instanzen vergleichen
Export-dtcInstanceInventory -SqlInstance "SQL01","SQL02","SQL03" -ContinueOnError | 
Select-Object SqlInstance, Version, Edition, DatabaseCount, JobCount | 
Format-Table -AutoSize

🔄 Auto-Update

Set-dtcSqlToolsSharePathAuto-Update
Speichert den UNC-Pfad zum Share-Verzeichnis dauerhaft in der Registry (HKLM:\\Software\\dtcSoftware\\dtcSqlTools). Ab diesem Moment prüft jedes Import-Module dtcSqlTools automatisch auf neue Versionen.
► 5 Beispiele anzeigen
Share-Pfad einmalig setzen (empfohlener Einstieg)
Set-dtcSqlToolsSharePath -Path '\\FileServer\IT_Tools\dtcSqlTools'
GPO/Deployment-Skript für alle Maschinen
# Als SYSTEM oder lokaler Admin auf allen Zielrechnern ausführen: 
Import-Module '\\FileServer\IT_Tools\dtcSqlTools' 
Set-dtcSqlToolsSharePath -Path '\\FileServer\IT_Tools\dtcSqlTools' 
# Ab jetzt: jeder Import-Module-Aufruf auf diesen Rechnern prüft auf Updates
Konfigurierten Pfad und Erreichbarkeit prüfen
Update-dtcSqlTools -ShowSharePath
Share-Pfad entfernen
Set-dtcSqlToolsSharePath -Remove
Alternativ: Umgebungsvariable statt Registry
# Pro-Session (kein Adminrecht nötig): 
$env:DTCSQLTOOLS_SHARE = '\\FileServer\IT_Tools\dtcSqlTools' 
 
# Dauerhaft für alle Benutzer (Adminrecht nötig): 
[System.Environment]::SetEnvironmentVariable( 
'DTCSQLTOOLS_SHARE', 
'\\FileServer\IT_Tools\dtcSqlTools', 
'Machine')
Update-dtcSqlToolsAuto-Update
Manueller Update-Trigger mit Benutzerinteraktion. Prüft ob auf dem konfigurierten Share eine neuere Version liegt und führt ggf. ein atomares Update durch (robocopy + Rename-Strategie, kein Überschreiben laufender Dateien).
► 6 Beispiele anzeigen
Nur prüfen ob eine neue Version verfügbar ist
Update-dtcSqlTools -CheckOnly
Update durchführen
Update-dtcSqlTools
Update erzwingen (auch wenn Version gleich)
Update-dtcSqlTools -Force
Update von explizitem Pfad (einmalig)
Update-dtcSqlTools -SharePath '\\MGMT-SRV\Modules\dtcSqlTools'
Konfigurierten Share anzeigen
Update-dtcSqlTools -ShowSharePath
Rückgabeobjekt auswerten
$r = Update-dtcSqlTools 
switch ($r.Status) { 
'Updated' { Write-Host "Update auf v$($r.NewVersion) erfolgreich." -ForegroundColor Green } 
'UpToDate' { Write-Host "Bereits aktuell (v$($r.LocalVersion))." } 
'ShareNotReachable'{ Write-Warning "Share nicht erreichbar: $($r.Message)" } 
'NoShareConfigured'{ Write-Warning "Kein Share konfiguriert – Set-dtcSqlToolsSharePath verwenden." } 
'Failed' { Write-Error "Update fehlgeschlagen: $($r.Message)" } 
}

📦 Sonstige

Remove-dtcAgDatabase / Reset-dtcAgDatabase / Repair-dtcAgDatabaseSonstige
Drei ergänzende Funktionen für den AG-Datenbanklebenszyklus. Remove trägt aus und löscht Secondaries. Reset führt Remove + AutoSeed-Wiederaufnahme durch. Repair erkennt Out-of-sync Situationen und ruft Reset auf.
► 6 Beispiele anzeigen
Datenbank aus AG austragen
Remove-dtcAgDatabase -PrimaryInstance "SQL01" ` 
-DatabaseName "MyApp" -AvailabilityGroup "AG_Prod"
Mehrere Datenbanken aus AG entfernen
Remove-dtcAgDatabase -PrimaryInstance "SQL01" ` 
-DatabaseName "MyApp","AppLog" -AvailabilityGroup "AG_Prod"
AG-Reset einer Datenbank (kompletter Neueintrag)
Reset-dtcAgDatabase -PrimaryInstance "SQL01" ` 
-DatabaseName "MyApp" -AvailabilityGroup "AG_Prod"
Out-of-sync Datenbanken automatisch reparieren
# Erst prüfen was repariert werden müsste 
Repair-dtcAgDatabase -Instance "SQL01" -WhatIf 
 
# Dann tatsächlich reparieren 
Repair-dtcAgDatabase -Instance "SQL01" -ContinueOnError
Reset für alle Datenbanken einer AG
Reset-dtcAgDatabase -PrimaryInstance "SQL01" ` 
-AvailabilityGroup "AG_Prod" -All
Bestimmte AG-Datenbank bei bekanntem Problem zurücksetzen
# Problem-Status vorher prüfen 
Get-DbaAgDatabase -SqlInstance "SQL01" -AvailabilityGroup "AG_Prod" | 
Where-Object SynchronizationState -ne 'Synchronized' | 
Select-Object Name, SynchronizationState, SynchronizationHealth 
 
# Dann gezielt zurücksetzen 
Reset-dtcAgDatabase -PrimaryInstance "SQL01" ` 
-DatabaseName "MyApp" -AvailabilityGroup "AG_Prod" -Verbose
Set-dtcMonitoringKey / Get-dtcMonitoringKeySonstige
Setzt und liest SystemCenter-Monitoring-Registry-Schlüssel lokal oder auf Remote-Maschinen. Get-dtcMonitoringKey ist ein Alias für -Operation Get.
► 7 Beispiele anzeigen
Aktuelle Werte auf lokalem Server lesen
Get-dtcMonitoringKey
Mehrere Server gleichzeitig lesen
Get-dtcMonitoringKey -ComputerName "SQL01","SQL02","SQL03" | 
Format-Table ComputerName, SQL, SQL_Description, SQLFreeSpaceVersion, TSM, Status
FullMonitoring + TSM auf AG-Knoten setzen
Set-dtcMonitoringKey -Operation Set -SQL Full -TSM 1 ` 
-SQLFreeSpaceVersion Cluster ` 
-ComputerName "SQL01","SQL02","SQL03"
Standalone-Server konfigurieren
Set-dtcMonitoringKey -Operation Set -SQL Standard -TSM 1 ` 
-SQLFreeSpaceVersion Standard ` 
-ComputerName "SQLSA01"
AutoDetect: Cluster oder Standard erkennen
Set-dtcMonitoringKey -Operation Set -SQL Full -TSM 1 ` 
-AutoDetectSQLFreeSpaceVersion ` 
-ComputerName "SQL01"
Monitoring deaktivieren
Set-dtcMonitoringKey -Operation Set -SQL None -TSM 0 ` 
-ComputerName "SQL01"
Abweichender Registry-Basispfad
Set-dtcMonitoringKey -Operation Set -SQL Full -TSM 1 ` 
-RegistryBase "Software\OEM" ` 
-ComputerName "SQL01" 
# Schreibt nach: HKLM:\Software\OEM\FITS\SystemCenter

Modul-Variablen

Alle Variablen werden beim Import initialisiert und können per Set-dtcSqlToolsConfig geändert werden.

VariableStandardwertZweck
$script:dtcSqlTools_LogPathC:\System\WinSrvLog\MSSQL\Primäres Log-/Ausgabeverzeichnis
$script:dtcSqlTools_CentralLogPathW:\75084-Datenbanken\MSSQL\dtc\LogZentrales Log-Verzeichnis
$script:dtcSqlTools_KeyPathW:\75084-Datenbanken\MSSQL\dtc\KeysSchlüssel- und Kennwort-Dateien
$script:dtcSqlTools_LoginExportDirF:\Daten\MSSQLSERVER\LOGINLogin-Export-Basisverzeichnis
$script:dtcSqlTools_DefaultPolicyNew Login_Enforce Passwort PolicyPBM-Policy für Policy-Operationen
$script:dtcSqlTools_OlaJobNameFullFITS-UserDatabases-FULLOla Full-Backup Job-Name
$script:dtcSqlTools_OlaJobNameDiffFITS-UserDatabases-DIFFOla Diff-Backup Job-Name
$script:dtcSqlTools_OlaJobNameLogFITS-UserDatabases-LOGOla Log-Backup Job-Name
$script:dtcSqlTools_OlaJobNameSysDbBackupFITS-SystemDatabases-FULLOla System-DB Backup Job-Name
$script:dtcSqlTools_OlaJobNameIndexOptFITS IndexOptimize - USER_DATABASESOla IndexOptimize Job-Name
$script:dtcSqlTools_OlaJobNameIntUserDbFITS IntegrityCheck - USER_DATABASESOla IntegrityCheck User-DB Job-Name
$script:dtcSqlTools_OlaJobNameIntSysDbFITS IntegrityCheck - SYSTEM_DATABASESOla IntegrityCheck System-DB Job-Name

Konfigurationsbeispiel

Import-Module dtcSqlTools 
 
Set-dtcSqlToolsConfig ` 
-LogPath 'C:\System\WinSrvLog\MSSQL\' ` 
-CentralLogPath 'W:\75084-Datenbanken\MSSQL\dtc\Log' ` 
-KeyPath 'W:\75084-Datenbanken\MSSQL\dtc\Keys' ` 
-LoginExportDir 'F:\Daten\MSSQLSERVER\LOGIN' ` 
-DefaultPolicy 'New Login_Enforce Passwort Policy' 
 
Set-dtcSqlToolsConfig ` 
-OlaJobNameFull 'FITS-UserDatabases-FULL' ` 
-OlaJobNameDiff 'FITS-UserDatabases-DIFF' ` 
-OlaJobNameLog 'FITS-UserDatabases-LOG' 
 
# Aktuelle Konfiguration: 
Set-dtcSqlToolsConfig | Format-List

Installation & Ersteinrichtung

Voraussetzungen: PowerShell 5.1 oder 7.x, dbatools-Modul, SQL Server 2016+. Für AD-Funktionen: RSAT ActiveDirectory-Modul.

  1. dbatools installieren
    Install-Module dbatools -Scope CurrentUser
  2. dtcSqlTools in den Modulpfad kopieren
    # Modulpfade anzeigen 
    $env:PSModulePath -split ';' 
    # Modul nach z. B. C:\Program Files\WindowsPowerShell\Modules\dtcSqlTools\ kopieren
  3. Modul importieren und prüfen
    Import-Module dtcSqlTools 
    Get-Module dtcSqlTools | Select-Object Name, Version 
    Get-Command -Module dtcSqlTools | Measure-Object
  4. Standardwerte konfigurieren
    Set-dtcSqlToolsConfig ` 
    -LogPath 'C:\System\WinSrvLog\MSSQL\' ` 
    -CentralLogPath 'W:\75084-Datenbanken\MSSQL\dtc\Log' ` 
    -KeyPath 'W:\75084-Datenbanken\MSSQL\dtc\Keys'
  5. Auto-Update Share konfigurieren (optional)
    Set-dtcSqlToolsSharePath -Path '\\FileServer\IT_Tools\dtcSqlTools' 
    # Ab jetzt: beim Import automatisch auf Updates prüfen
  6. Erste Prüfung
    Export-dtcInstanceInventory -SqlInstance $env:COMPUTERNAME 
    Test-dtcBackupCoverage -SqlInstance $env:COMPUTERNAME

Ola Hallengren Backup-Setup

Voraussetzung: Ola Hallengrens Maintenance Solution installiert (ola.hallengren.com).

# User-Datenbanken: Full/Diff/Log 
New-dtcOlaBackupJobs -SqlInstance "SQL01" -UseDiff -OperatorName "DBA-Team" 
 
# System-Datenbanken: täglich Full 
New-dtcOlaSysDbBackupJob -SqlInstance "SQL01" -OperatorName "DBA-Team" 
 
# IndexOptimize + IntegrityCheck (sonntags 23:00) 
New-dtcOlaMaintenanceJobs -SqlInstance "SQL01" -OperatorName "DBA-Team" 
 
# TSM-Client konfigurieren 
Set-dtcTsmConfiguration -ComputerName "SQL01" -UseDiff

Versionsverlauf

VersionDatumNeuerungen
1.19.1618.04.2026Set-dtcTsmConfiguration: TSM dsm.opt konfigurieren (EXCLUDE DB-Dateien, INCLUDE BackupDir, ManagementClass, -UseDiff)
1.19.1518.04.2026New-dtcOlaBackupJobs: User-db Unterverz.; New-dtcOlaSysDbBackupJob: System-DB täglicher Full-Backup in Sys-db
1.19.1418.04.2026New-dtcOlaBackupJobs + New-dtcOlaMaintenanceJobs: OutputFile via SQLLOGDIR-Token statt xp_cmdshell
1.19.1317.04.2026New-dtcOlaBackupJobs + New-dtcOlaMaintenanceJobs: vollständige Ola-Installationsprüfung (alle Objekte, CommandLog, SQL Agent)
1.19.1217.04.2026New-dtcOlaMaintenanceJobs: Ola IndexOptimize + IntegrityCheck Jobs (User+System), optimierte Parameter, Job-Namen konfigurierbar
1.19.1116.04.2026New-dtcOlaBackupJobs: Ola Hallengren Backup-Jobs (Full/Diff/Log), Zeitpläne, -UseDiff, Job-Namen konfigurierbar, MaintenanceLog
1.19.1015.04.2026Invoke-dtcDatabaseRestore + Restore-dtcAlwaysOnDB: Differenz-Backup-Unterstützung (-DiffBackupFile/-DiffDatabaseFile)
1.19.914.04.2026New-dtcAgRepairJob: Windows EventLog Einträge bei Repair/Failed/OutOfSync (Event IDs 1001/1002/1003)
1.19.813.04.2026Get-dtcSysadminAccounts: -ExcludeSysAccounts Parameter für NT SERVICE, NT AUTHORITY, ##MS_*##
1.19.711.04.2026Set-dtcSqlToolsConfig: KeyPath + CentralLogPath; Kennworte/Keys nach KeyPath; alle Berichte zusätzlich nach CentralLogPath
1.19.609.04.2026Set-dtcSsisConfiguration: SSIS Dienst, SSISDB-Katalog, AG-Integration (DMK, sp_ssis_startup, Maintenance Job, Linked Server), Ordner/Umgebungen
1.19.507.04.2026Set-dtcSsrsConfiguration: SSRS konfigurieren (DB, URL, Dienstkonto, Key), lokal + Remote (WinRM), AlwaysOn AG (Listener-Erkennung + Primary-Erkennung)
1.19.403.04.2026Test-dtcSsasPermissions: SSAS Disk-Berechtigungen prüfen und setzen, Multidimensional/Tabular/PowerPivot, lokal + Remote
1.19.331.03.2026New-dtcAgRepairJob: SQL Agent Job für Repair-dtcAgDatabase erstellen (Zeitplan, Operator, Update)
1.19.227.03.2026Invoke-dtcDatabaseUserCleanup: eigenständige User-Bereinigung / -Reimport, Invoke-dtcDatabaseRestore + Restore-dtcAlwaysOnDB verwenden sie intern
1.19.124.03.2026Invoke-dtcDatabaseRestore: SourceDomain-Parameter entfernt, automatische User-Bereinigung ohne Domänenangabe
1.19.020.03.2026Invoke-dtcCollationChange: Server-Collation via sqlservr -m -T4022 -T3659 -q, Pre-Flight-Check, WhatIf, Rollback-Dokumentation
1.18.013.03.2026Auto-Update beim Import: Update-dtcSqlTools, Set-dtcSqlToolsSharePath, Invoke-dtcModuleUpdate (Private), atomare Update-Strategie via robocopy+Rename
1.17.006.03.2026Get-dtcWaitStatReport: Wait Statistics mit Delta-Messung, 50+ Idle-Wait-Filter, Kategorien, Empfehlungen
1.16.026.02.2026Invoke-dtcLoginAudit, Test-dtcSqlConfiguration (Fix-T-SQL), Get-dtcAutoGrowthReport (Default Trace)
1.15.016.02.2026Test-dtcBackupCoverage, Get-dtcDatabaseHealth, Get-dtcAgHealthReport, Invoke-dtcAgFailoverCheck, Get-dtcDiskSpaceReport, Export-dtcInstanceInventory
1.14.006.02.2026Get-dtcSysadminAccounts: Sysadmin-Audit mit Ausschlüssen, Status-Klassifizierung
1.13.029.01.2026Invoke-dtcAgentJobAudit: Owner-Fix, Zeitkonflikte, Laufzeiten, TXT+CSV
1.12.020.01.2026Invoke-dtcSaObfuscation: kryptographisches Zufallskennwort, Sysadmin-Sicherheitsprüfung
1.11.113.01.2026Set-dtcMonitoringKey: SQL-Parameter None/Standard/Full statt 0/1/2
1.11.008.01.2026Set-dtcMonitoringKey / Get-dtcMonitoringKey: SystemCenter RegKeys, Remote-Registry-API
1.10.119.12.2025Test-dtcSqlSpn: Auto-Export SPN_Commands + SPN_Report, OK-Liste
1.10.016.12.2025Test-dtcSqlSpn: SPN-Prüfung für Server + AG-Listener
1.9.309.12.2025PreRestoreBackupDir Default: StandardBackupDir\PreRestore, auto-mkdir
1.9.205.12.2025Restore-dtcAlwaysOnDB: -PreRestoreBackup / -PreRestoreBackupDir
1.9.102.12.2025LogPath-Default: MSSQL\, dtcSqlTools_DefaultPolicy als Modul-Variable
1.9.028.11.2025Invoke-dtcDatabaseRestore: Standalone Restore, Cross-Domain, Umbenennung, User-Handling
1.8.121.11.2025SA-Owner via SID 0x01 (Get-dtcSaLogin Private, umbenennungssicher)
1.8.017.11.2025Get-dtcOperationProgress: ETA für Restore/Backup/AutoSeed, Loop-Modus
1.7.007.11.2025Invoke-dtcLogShrink: LDF-Shrink, Primary-Redirect bei AG
1.6.028.10.2025Repair-dtcAgDatabase: Out-of-sync Erkennung + automatischer Reset
1.5.017.10.2025Sync-dtcAgNode: Auto-Discovery Primary + alle AGs
1.4.010.10.2025Enable-dtcAgAutoSeed: AG- und Instanz-Ebene
1.3.003.10.2025Remove-dtcAgDatabase
1.2.026.09.2025Add-dtcAgDatabase
1.1.018.09.2025Restore-dtcAlwaysOnDB, Set-dtcSqlPolicyState, Set-dtcSqlToolsConfig
1.0.005.09.2025Initiale Version: Reset-dtcAgDatabase

Wir verwenden Cookies

Diese Website verwendet eigene und Drittanbieter-Cookies, um Ihre Nutzererfahrung zu analysieren und zu verbessern.

Cookies-Richtlinie
Informationen zur Verwendung von Cookies

Cookies sind kleine Textdateien unserer Webseite, die auf Ihrem Computer vom Browser gespeichert werden wenn sich dieser mit dem Internet verbindet. Cookies können verwendet werden, um Daten zu sammeln und zu speichern um Ihnen die Verwendung der Webseite angenehmer zu gestalten. Sie können von dieser oder anderen Seiten stammen.

Es gibt verschiedene Typen von Cookies:

  • Technische Cookies erleichtern die Steuerung und die Verwendung verschiedener Optionen und Dienste der Webseite. Sie identifizieren die Sitzung, steuern Zugriffe auf bestimmte Bereiche, ermöglichen Sortierungen, halten Formulardaten wie Registrierung vor und erleichtern andere Funktionalitäten (Videos, Soziale Netzwerke etc.).
  • Cookies zur Anpassung ermöglichen dem Benutzer, Einstellungen vorzunehmen (Sprache, Browser, Konfiguration, etc..).
  • Analytische Cookies erlauben die anonyme Analyse des Surfverhaltens und messen Aktivitäten. Sie ermöglichen die Entwicklung von Navigationsprofilen um die Webseite zu optimieren.

Mit der Benutzung dieser Webseite haben wir Sie über Cookies informiert und um Ihr Einverständnis gebeten (Artikel 22, Gesetz 34/2002 der Information Society Services). Diese dienen dazu, den Service, den wir zur Verfügung stellen, zu verbessern. Wir verwenden Google Analytics, um anonyme statistische Informationen zu erfassen wie z.B. die Anzahl der Besucher. Cookies von Google Analytics unterliegen der Steuerung und den Datenschutz-Bestimmungen von Google Analytics. Auf Wunsch können Sie Cookies von Google Analytics deaktivieren.

Sie können Cookies auch generell abschalten, folgen Sie dazu den Informationen Ihres Browserherstellers.

Cookie-Einstellungen
Notwendige Cookies

Unerlässlich für grundlegende Funktionen der Website und nicht deaktivierbar.

3 Cookies erkannt.

  • jbcookies (JoomBall!)
    Speichert die vom Nutzer erteilte Zustimmung auf der Website.
  • joomla_user_state (Joomla!)
    Bewahrt den Authentifizierungsstatus des Nutzers.
  • joomla_remember_me_* (Joomla!)
    Hält die Sitzung für den authentifizierten Nutzer gespeichert.
Analyse-Cookies

Sie helfen, die Nutzung zu verstehen und die Leistung zu verbessern.

Für diese Kategorie wurden bisher keine Cookies erkannt.

Marketing-Cookies

Personalisieren die Werbung und messen die Wirksamkeit von Kampagnen.

Für diese Kategorie wurden bisher keine Cookies erkannt.

Nicht klassifizierte Cookies

Cookies, die auf Überprüfung oder automatische Klassifizierung warten.

Für diese Kategorie wurden bisher keine Cookies erkannt.

Main Menu

  • Home
  • SQL-Blog - Technisch
  • SQL-Blog - Allgemein
  • T_SQL Scripts
  • Background
  • Datenschutz­erklärung
cookies
We use cookies to improve site performance and your experience. Learn more