Jun 3, 2026, 3:39 PM

This commit is contained in:
Paweł Domański
2026-06-03 13:39:39 +00:00
parent 530b6ae4bf
commit 8e5a02b968
+44 -32
View File
@@ -15,74 +15,86 @@ function Import-DBAToolBoxDependencies {
function Test-SQLConnection { function Test-SQLConnection {
<# <#
.SYNOPSIS .SYNOPSIS
Tests connection to a SQL Server instance and returns basic info. Tests connection to a SQL Server instance and returns basic info using native ADO.NET.
#> #>
param( param(
[Parameter(Mandatory=$true)] [Parameter(Mandatory=$true)]
[string]$ServerInstance [string]$ServerInstance
) )
$connWarnings = $null $connString = "Server=$ServerInstance;Database=master;Integrated Security=True;Connection Timeout=5;TrustServerCertificate=True;"
$connection = New-Object System.Data.SqlClient.SqlConnection($connString)
try { try {
# Using Test-DbaConnection from dbatools and suppressing console warnings while capturing them $connection.Open()
$testResult = Test-DbaConnection -SqlInstance $ServerInstance -ErrorAction Stop -WarningAction SilentlyContinue -WarningVariable connWarnings
if ($testResult -and $testResult.Connect -eq $true) { # Query basic server properties
# If connection is successful, get some basic instance info $cmd = $connection.CreateCommand()
$instanceInfo = Get-DbaInstance -SqlInstance $ServerInstance -ErrorAction Stop -WarningAction SilentlyContinue $cmd.CommandText = "SELECT @@VERSION as Version, SERVERPROPERTY('Edition') as Edition, SERVERPROPERTY('MachineName') as Instance, SERVERPROPERTY('ProductVersion') as VerString"
$reader = $cmd.ExecuteReader()
if ($reader.Read()) {
$ver = $reader["VerString"].ToString()
$edition = $reader["Edition"].ToString()
$instance = $reader["Instance"].ToString()
return @{ return @{
Success = $true Success = $true
Instance = $instanceInfo.Name Instance = if ([string]::IsNullOrEmpty($instance)) { $ServerInstance } else { $instance }
Version = $instanceInfo.VersionString Version = $ver
Edition = $instanceInfo.Edition Edition = $edition
Status = "Online" Status = "Online"
} }
} else { } else {
$errDetail = "Connection failed." return @{ Success = $false; Error = "Failed to read server properties." }
if ($connWarnings) {
$errDetail = "$errDetail ($($connWarnings -join '; '))"
}
return @{ Success = $false; Error = $errDetail }
} }
} catch { } catch {
$errMsg = $_.Exception.Message return @{ Success = $false; Error = $_.Exception.Message }
if ($connWarnings) { } finally {
$errMsg = "$errMsg ($($connWarnings -join '; '))" if ($null -ne $connection -and $connection.State -eq [System.Data.ConnectionState]::Open) {
$connection.Close()
} }
return @{ Success = $false; Error = $errMsg }
} }
} }
function Get-SQLDatabases { function Get-SQLDatabases {
<# <#
.SYNOPSIS .SYNOPSIS
Gets database information for a SQL Server instance. Gets database information for a SQL Server instance using native ADO.NET.
#> #>
param( param(
[Parameter(Mandatory=$true)] [Parameter(Mandatory=$true)]
[string]$ServerInstance [string]$ServerInstance
) )
$dbWarnings = $null $connString = "Server=$ServerInstance;Database=master;Integrated Security=True;Connection Timeout=5;TrustServerCertificate=True;"
$connection = New-Object System.Data.SqlClient.SqlConnection($connString)
try { try {
# Using Get-DbaDatabase from dbatools and suppressing console warnings while capturing them $connection.Open()
$databases = Get-DbaDatabase -SqlInstance $ServerInstance -ErrorAction Stop -WarningAction SilentlyContinue -WarningVariable dbWarnings
# Query databases from sys.databases
$cmd = $connection.CreateCommand()
$cmd.CommandText = "SELECT name, state_desc, (size * 8.0 / 1024.0) as size_mb, recovery_model_desc FROM sys.databases"
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$table = New-Object System.Data.DataTable
$null = $adapter.Fill($table)
$dbList = @() $dbList = @()
foreach ($db in $databases) { foreach ($row in $table.Rows) {
$dbList += [pscustomobject]@{ $dbList += [pscustomobject]@{
Name = $db.Name Name = $row.name
Status = $db.Status Status = $row.state_desc
Size = $db.Size Size = "$([Math]::Round([double]$row.size_mb, 2)) MB"
RecoveryModel = $db.RecoveryModel RecoveryModel = $row.recovery_model_desc
} }
} }
return $dbList return $dbList
} catch { } catch {
$errMsg = $_.Exception.Message throw "Failed to get databases: $($_.Exception.Message)"
if ($dbWarnings) { } finally {
$errMsg = "$errMsg ($($dbWarnings -join '; '))" if ($null -ne $connection -and $connection.State -eq [System.Data.ConnectionState]::Open) {
$connection.Close()
} }
throw "Failed to get databases: $errMsg"
} }
} }