Public/Install-sqmDb2Driver.ps1
|
<# .SYNOPSIS Installiert den IBM DB2 ODBC/CLI-Treiber. .DESCRIPTION Prueft ob ein DB2-Treiber bereits vorhanden ist (via Test-sqmDriverInstalled -DriverType DB2). Bei Bedarf: Fuehrt den IBM-Installer still aus. Unterstuetzte Installer-Formate: - db2_odbc_cli.exe / db2_odbc_cli_64.exe : IBM CLI-Treiber - setup.exe (DB2 Client) : Vollstaendiger IBM-Installer - .msi : MSI-basierter Installer Falls der Treiber nach der Installation nicht automatisch als ODBC-Treiber registriert ist, wird db2cli.exe -setup -registerall ausgefuehrt. .PARAMETER SourcePath Pfad zum DB2-Installer oder Verzeichnis mit dem Installer. Z.B.: \\srv\Treiber\DB2 oder C:\Downloads\db2_odbc_cli_64.exe .OUTPUTS [PSCustomObject] mit: Status : AlreadyInstalled | Installed | Error Version : Erkannte Treiberversion Path : Installationspfad Message : Detailmeldung .EXAMPLE Install-sqmDb2Driver -SourcePath '\\srv\Treiber\DB2' .EXAMPLE Install-sqmDb2Driver -SourcePath 'C:\Downloads\db2_odbc_cli_64.exe' .NOTES Voraussetzungen: Lokale Administratorrechte. IBM CLI Treiber Download: https://www.ibm.com/support/pages/db2-odbc-cli-driver-download-and-installation-information #> function Install-sqmDb2Driver { [CmdletBinding()] [OutputType([PSCustomObject])] param ( [Parameter(Mandatory = $true, Position = 0)] [string]$SourcePath ) $functionName = $MyInvocation.MyCommand.Name $result = [PSCustomObject]@{ Status = 'Error' Version = $null Path = $null Message = $null } function _Log { param([string]$Msg, [string]$Level = 'INFO') Write-Verbose "[$functionName] $Msg" try { Invoke-sqmLogging -Message $Msg -FunctionName $functionName -Level $Level } catch { } } try { # --- Bereits installiert? --- $check = Test-sqmDriverInstalled -DriverType DB2 if ($check.Installed) { $result.Status = 'AlreadyInstalled' $result.Version = $check.Version $result.Path = $check.Path $result.Message = "DB2-Treiber bereits vorhanden: '$($check.DriverName)'" + $(if ($check.Version) { " v$($check.Version)" } else { '' }) _Log $result.Message 'INFO' Write-Host " OK: $($result.Message)" -ForegroundColor Green return $result } # --- Quellpfad pruefen --- if (-not (Test-Path $SourcePath)) { $result.Message = "Quellpfad nicht erreichbar: $SourcePath" _Log $result.Message 'ERROR' Write-Error $result.Message return $result } # --- Installer ermitteln --- $installerFile = $null if ((Get-Item $SourcePath).PSIsContainer) { # Reihenfolge: CLI-Treiber bevorzugt vor vollem DB2-Client $installerFile = Get-ChildItem -Path $SourcePath ` -Include 'db2_odbc_cli_64.exe','db2_odbc_cli.exe','db2client*.exe','setup.exe','*.msi' ` -Recurse -ErrorAction SilentlyContinue | Sort-Object { switch ($_.Name) { 'db2_odbc_cli_64.exe' { 0 } 'db2_odbc_cli.exe' { 1 } default { 2 } }} | Select-Object -First 1 } else { $installerFile = Get-Item $SourcePath -ErrorAction SilentlyContinue } if (-not $installerFile) { $result.Message = "Kein DB2-Installer in '$SourcePath' gefunden." _Log $result.Message 'ERROR' Write-Error $result.Message return $result } _Log "Starte DB2-Installation: $($installerFile.FullName)" # --- Installation ausfuehren --- $exitCode = $null if ($installerFile.Extension -eq '.msi') { $proc = Start-Process -FilePath 'msiexec.exe' ` -ArgumentList '/i', "`"$($installerFile.FullName)`"", '/quiet', '/norestart' ` -Wait -PassThru -ErrorAction Stop $exitCode = $proc.ExitCode } else { # IBM CLI-Treiber und DB2-Client: /silent oder -silent $proc = Start-Process -FilePath $installerFile.FullName ` -ArgumentList '/silent' ` -Wait -PassThru -ErrorAction Stop $exitCode = $proc.ExitCode } if ($exitCode -ne 0 -and $exitCode -ne 3010) { $result.Message = "DB2-Installer fehlgeschlagen (ExitCode $exitCode): $($installerFile.FullName)" _Log $result.Message 'ERROR' Write-Error $result.Message return $result } # --- ODBC-Treiber registrieren falls noetig --- $db2CliPaths = @( 'C:\Program Files\IBM\SQLLIB\BIN\db2cli.exe', 'C:\Program Files (x86)\IBM\SQLLIB\BIN\db2cli.exe' ) foreach ($cliPath in $db2CliPaths) { if (Test-Path $cliPath) { _Log "Registriere DB2 ODBC-Treiber: $cliPath -setup -registerall" try { $regProc = Start-Process -FilePath $cliPath -ArgumentList '-setup', '-registerall' ` -Wait -PassThru -ErrorAction Stop _Log "db2cli -setup -registerall ExitCode: $($regProc.ExitCode)" } catch { _Log "db2cli -setup -registerall fehlgeschlagen: $($_.Exception.Message)" 'WARNING' } break } } # Ergebnis pruefen $check2 = Test-sqmDriverInstalled -DriverType DB2 $result.Status = 'Installed' $result.Version = $check2.Version $result.Path = $check2.Path $result.Message = "DB2-Treiber erfolgreich installiert: '$($installerFile.Name)'" + $(if ($check2.Version) { " v$($check2.Version)" } else { '' }) _Log $result.Message 'INFO' Write-Host " OK: $($result.Message)" -ForegroundColor Green } catch { $result.Status = 'Error' $result.Message = "DB2-Installation fehlgeschlagen: $($_.Exception.Message)" _Log $result.Message 'ERROR' Write-Error $result.Message } return $result } |