No description
  • PowerShell 100%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Lars Oste 276da017ec feat: Update-DatabaseList, leere Listen abgefangen (1.1.0)
- Update-DatabaseList fragt MSSQL und OLVM sofort neu (beide Listen sind
  jetzt 10 Minuten zwischengespeichert).
- Sind beide Listen leer, wird -Database ohne ValidateSet gebaut – eine
  leere ValidateSet wirft, und kein Befehl wäre mehr aufrufbar.
- RequiredModules: FOC-SQL 2.1.0, ORACLE 1.1.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:03:19 +02:00
.github/workflows test: Pester-Tests und CI, Generator schreibt ins Repo 2026-09-30 12:02:28 +02:00
Module feat: Update-DatabaseList, leere Listen abgefangen (1.1.0) 2026-09-30 15:03:19 +02:00
Tests/DBMANAGER feat: Update-DatabaseList, leere Listen abgefangen (1.1.0) 2026-09-30 15:03:19 +02:00
README.md feat: Update-DatabaseList, leere Listen abgefangen (1.1.0) 2026-09-30 15:03:19 +02:00

DBMANAGER

PowerShell-Modul mit einheitlichen Befehlen für die Datenbanken der LHP. Es verteilt jeden Aufruf nach Datenbanktyp an eines der beiden Fachmodule:

Modul Repo Zuständig für
DBMANAGER LHP542/DBMANAGER öffentliche Befehle, Verteilung, Zeitplanung
FOC-SQL LHP542/FOC-SQL MSSQL auf dem FailOverCluster (PSSession, Aufgabenplaner)
ORACLE LHP542/ORACLE Oracle-Hosts (SSH, Restore Points, OLVM)

Man importiert nur DBMANAGER; FOC-SQL und ORACLE sind als RequiredModules mit Mindestversion eingetragen und werden mitgeladen. DTM nutzt dieselben Befehle.

Befehle

Jeder Befehl nimmt -Database (mit Tab-Vervollständigung über alle MSSQL- Datenbanken und Oracle-Hosts) und ruft <Befehl>-MSSQL bzw. <Befehl>-Oracle auf:

Backup-Database, Set-Snapshot, Sync-Database-ToTest, Restore-Snapshot, Remove-Snapshot, Copy-Database-ToSamba, Set-Archive-Log, Get-DatabaseStats, Close-DbSessions

Nur MSSQL (Oracle-Datenbanken werden mit einer Meldung abgelehnt):

Get-DbBackups, Invoke-DbRestore, Invoke-DbMaintenance, Set-DbRecoveryMode, Set-DbQueryStore, Set-DbPageVerify, Reset-DbCompatibility

Direkt aus dem Fachmodul, ohne DBMANAGER: Get-ClusterHealthStatus (FOC-SQL, bekommt keine Datenbank), Get-OracleRestoreInfo und Invoke-OlvmSnapshot (ORACLE, Ziel steht im Namen).

Geplante Aufträge (Backup-Database, Set-Snapshot, Sync-Database-ToTest) nehmen -Time 'HH:mm', -Date 'dd.MM.yyyy' oder -Immediate; ohne diese Angaben wird gefragt. Die Zeit löst DBMANAGER auf, die Fachmodule bekommen nur noch ein fertiges [datetime] bzw. $null für sofort.

Datenbanklisten

Die Auswahl für -Database besteht aus den Datenbanken des MSSQL-Servers (Get-MssqlDatabases, FOC-SQL) und den Oracle-Hosts aus OLVM (Get-OracleDatabases, ORACLE). Beide Listen werden 10 Minuten zwischengespeichert – vorher ging bei jedem Befehl und jedem Tab-Druck eine Abfrage an den Server. Die letzte erfolgreiche Liste liegt zusätzlich unter %LOCALAPPDATA%\DBMANAGER\cache\ und springt ein, wenn Server oder OLVM nicht erreichbar sind.

Gerade eine Datenbank oder VM angelegt? Update-DatabaseList fragt beide Quellen sofort neu.

Für Oracle braucht die Konsole einmalig einen OLVM-Zugang (in DTM läuft das automatisch):

Get-Credential | Export-Clixml "$env:USERPROFILE\olvm-credential.xml"   # z. B. admin@internal

Ablage und Profil

Auf Samba liegen die Repos als Git-Klone nebeneinander (aktualisiert per git pull); das Modul steckt jeweils eine Ebene tiefer, unter <Repo>\Module\<Modul>:

\\samba01\542$\5424_IT-Basis-Dienste\MS-SQL\Powershell\Module\
    DBMANAGER\Module\DBMANAGER\
    FOC-SQL\Module\FOC-SQL\
    ORACLE\Module\ORACLE\
    MSSQL\          (Server-Modul, siehe LHP542/MSSQL)
    MySQL-MariaDB\  (Server-Kit, von DTM nicht geladen)

Profil-Skript für die Konsole (notepad $PROFILE):

$Path   = ($env:PSModulePath -split ';')[0]
$Module = "\\samba01\542$\5424_IT-Basis-Dienste\MS-SQL\Powershell\Module"

foreach ($m in 'FOC-SQL', 'ORACLE', 'DBMANAGER') {
    Copy-Item -Path "$Module\$m\Module\$m" -Destination $Path -Recurse -Force
}
# FOC-SQL und ORACLE ausdrücklich vorab: über RequiredModules nachgeladene
# Module ignorieren -DisableNameChecking.
foreach ($m in 'FOC-SQL', 'ORACLE', 'DBMANAGER') {
    Import-Module $m -DisableNameChecking
}

Nicht mehr Get-ChildItem $Path -Directory | Import-Module verwenden: das würde auch das serverseitige MSSQL-Modul importieren, falls es im Modulpfad liegt, und dessen Invoke-Sqlcmd verträgt sich nicht mit FOC-SQL.

Neue Funktion

In jedem der drei Module gilt dieselbe Drei-Punkt-Checkliste, sonst ist die Funktion im Code da, wird aber nicht exportiert:

  1. <Modul>.psm1 – Funktion + Export-ModuleMember -Function <Name>
  2. <Modul>.psd1 – FunctionsToExport
  3. <Modul>_ToExport.ps1 – Generator (-Path für einen lokalen Lauf)

Neuer datenbankbezogener Befehl: Umsetzung als <Name>-MSSQL in FOC-SQL und/oder <Name>-Oracle in ORACLE, Verteilung als <Name> hier. Bricht die Änderung die Aufrufe eines Fachmoduls, dessen ModuleVersion heben und die Mindestversion unter RequiredModules in DBMANAGER_ToExport.ps1 nachziehen.