bin/Public/Get-sqmServerSetting.ps1
|
<#
.SYNOPSIS Liest eine oder alle Server-Eigenschaften aus den Server-Properties einer SQL Server-Instanz. .DESCRIPTION Die Funktion fragt entweder einen benannten Eigenschaftswert (z.B. "BackupDirectory") aus dem von Connect-DbaInstance zurueckgegebenen Objekt ab, oder listet mit -All alle Eigenschaften auf. Wenn kein SqlInstance-Parameter angegeben wird, wird standardmaessig der aktuelle Computername ($env:COMPUTERNAME) verwendet. Diese Regel gilt fuer alle zukuenftigen Versionen. .PARAMETER SqlInstance Die Ziel-SQL Server-Instanz (z.B. "localhost", "SQL01\INSTANCE"). Wenn nicht angegeben, wird der aktuelle Computername verwendet. .PARAMETER SqlCredential Alternative Anmeldeinformationen (PSCredential). Wenn nicht angegeben, wird Windows-Authentifizierung verwendet. .PARAMETER Name Der Name der gesuchten Server-Eigenschaft. Nur folgende Werte sind erlaubt: BackupDirectory, DefaultFile, DefaultLog, MasterDBPath, ErrorLogPath, ComputerName, InstanceName, Edition, VersionString, ProductLevel, ProductUpdateLevel, HostPlatform, IsClustered, IsHadrEnabled. .PARAMETER All Wenn gesetzt, werden alle Eigenschaften des Server-Objekts als Liste zurueckgegeben. .PARAMETER DefaultValue Optionaler Default-Wert, falls die Eigenschaft nicht existiert oder nicht gelesen werden kann. Wird bei -All ignoriert. .PARAMETER EnableException Schalter, um Ausnahmen durchzulassen (standardmaessig werden Fehler als Warnung protokolliert). .EXAMPLE # BackupDirectory vom lokalen Server lesen $backupPath = Get-sqmServerSetting -Name "BackupDirectory" .EXAMPLE # Alle Eigenschaften anzeigen Get-sqmServerSetting -All .EXAMPLE # Alle Eigenschaften einer entfernten Instanz mit Credentials $cred = Get-Credential Get-sqmServerSetting -SqlInstance "SQL01" -SqlCredential $cred -All .NOTES Erfordert dbatools-Modul und eine vorhandene Funktion Invoke-sqmLogging. Default fuer SqlInstance: $env:COMPUTERNAME (gilt fuer alle zukuenftigen Versionen). Verwendet Connect-DbaInstance , um das Serverobjekt abzurufen. #> function Get-sqmServerSetting { [CmdletBinding(DefaultParameterSetName = 'Name', SupportsShouldProcess = $false)] param ( [Parameter(Mandatory = $false, Position = 0)] [string]$SqlInstance, [Parameter(Mandatory = $false)] [System.Management.Automation.PSCredential]$SqlCredential, [Parameter(Mandatory = $true, ParameterSetName = 'Name', Position = 1)] [ValidateSet('BackupDirectory', 'DefaultFile', 'DefaultLog', 'MasterDBPath', 'ErrorLogPath', 'ComputerName', 'InstanceName', 'Edition', 'VersionString', 'ProductLevel', 'ProductUpdateLevel', 'HostPlatform', 'IsClustered', 'IsHadrEnabled')] [string]$Name, [Parameter(Mandatory = $true, ParameterSetName = 'All')] [switch]$All, [Parameter(Mandatory = $false, ParameterSetName = 'Name')] [string]$DefaultValue, [Parameter(Mandatory = $false)] [switch]$EnableException ) begin { $functionName = $MyInvocation.MyCommand.Name # Default fuer SqlInstance: aktueller Computername if (-not $PSBoundParameters.ContainsKey('SqlInstance') -or [string]::IsNullOrWhiteSpace($SqlInstance)) { $SqlInstance = $env:COMPUTERNAME Write-Verbose "Keine SqlInstance angegeben. Verwende Standard: $SqlInstance" } # Pruefung auf dbatools if (-not (Get-Module -ListAvailable -Name dbatools)) { $errMsg = "dbatools-Modul nicht gefunden. Bitte installieren Sie es mit: Install-Module dbatools" Invoke-sqmLogging -Message $errMsg -FunctionName $functionName -Level "ERROR" throw $errMsg } if ($All) { Invoke-sqmLogging -Message "Starte $functionName auf Instanz: $SqlInstance im Modus '-All'." -FunctionName $functionName -Level "INFO" } else { Invoke-sqmLogging -Message "Starte $functionName auf Instanz: $SqlInstance fuer Eigenschaft '$Name'" -FunctionName $functionName -Level "INFO" } } process { try { $serverParams = @{ SqlInstance = $SqlInstance SqlCredential = $SqlCredential ErrorAction = 'Stop' } if ($EnableException) { $serverParams.EnableException = $true } Invoke-sqmLogging -Message "Rufe Server-Objekt ueber Connect-DbaInstance ab." -FunctionName $functionName -Level "DEBUG" $server = Connect-DbaInstance @serverParams if (-not $server) { $msg = "Konnte kein Server-Objekt fuer $SqlInstance abrufen." Invoke-sqmLogging -Message $msg -FunctionName $functionName -Level "ERROR" throw $msg } if ($All) { # Alle Eigenschaften sammeln $allProperties = $server.PSObject.Properties | Where-Object { $_.Name -notin @('PsObject', 'Adapted', 'Extended', 'MemberType', 'IsSettable', 'TypeNameOfValue') } | Sort-Object Name $results = @() foreach ($prop in $allProperties) { $value = $prop.Value # Konvertiere null-Werte in leere Strings fuer bessere Lesbarkeit if ($null -eq $value) { $value = '' } $results += [PSCustomObject]@{ Name = $prop.Name Value = $value Type = if ($prop.Value) { $prop.Value.GetType().Name } else { 'null' } } } Invoke-sqmLogging -Message "$($results.Count) Eigenschaften vom Server-Objekt abgerufen." -FunctionName $functionName -Level "INFO" return $results } else { # Einzelne Eigenschaft mit ValidateSet - hier ist sicher, dass die Eigenschaft existiert $settingValue = $server.$Name Invoke-sqmLogging -Message "Eigenschaft '$Name' gefunden mit Wert: $settingValue" -FunctionName $functionName -Level "INFO" return $settingValue } } catch { $errMsg = "Fehler beim Lesen der Eigenschaft: $($_.Exception.Message)" Invoke-sqmLogging -Message $errMsg -FunctionName $functionName -Level "ERROR" if ($EnableException) { throw } else { Write-Error $errMsg return $null } } } end { Invoke-sqmLogging -Message "$functionName abgeschlossen." -FunctionName $functionName -Level "INFO" } } |