Jun 3, 2026, 3:39 PM
This commit is contained in:
@@ -15,74 +15,86 @@ function Import-DBAToolBoxDependencies {
|
||||
function Test-SQLConnection {
|
||||
<#
|
||||
.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(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[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 {
|
||||
# Using Test-DbaConnection from dbatools and suppressing console warnings while capturing them
|
||||
$testResult = Test-DbaConnection -SqlInstance $ServerInstance -ErrorAction Stop -WarningAction SilentlyContinue -WarningVariable connWarnings
|
||||
$connection.Open()
|
||||
|
||||
if ($testResult -and $testResult.Connect -eq $true) {
|
||||
# If connection is successful, get some basic instance info
|
||||
$instanceInfo = Get-DbaInstance -SqlInstance $ServerInstance -ErrorAction Stop -WarningAction SilentlyContinue
|
||||
# Query basic server properties
|
||||
$cmd = $connection.CreateCommand()
|
||||
$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 @{
|
||||
Success = $true
|
||||
Instance = $instanceInfo.Name
|
||||
Version = $instanceInfo.VersionString
|
||||
Edition = $instanceInfo.Edition
|
||||
Instance = if ([string]::IsNullOrEmpty($instance)) { $ServerInstance } else { $instance }
|
||||
Version = $ver
|
||||
Edition = $edition
|
||||
Status = "Online"
|
||||
}
|
||||
} else {
|
||||
$errDetail = "Connection failed."
|
||||
if ($connWarnings) {
|
||||
$errDetail = "$errDetail ($($connWarnings -join '; '))"
|
||||
}
|
||||
return @{ Success = $false; Error = $errDetail }
|
||||
return @{ Success = $false; Error = "Failed to read server properties." }
|
||||
}
|
||||
} catch {
|
||||
$errMsg = $_.Exception.Message
|
||||
if ($connWarnings) {
|
||||
$errMsg = "$errMsg ($($connWarnings -join '; '))"
|
||||
return @{ Success = $false; Error = $_.Exception.Message }
|
||||
} finally {
|
||||
if ($null -ne $connection -and $connection.State -eq [System.Data.ConnectionState]::Open) {
|
||||
$connection.Close()
|
||||
}
|
||||
return @{ Success = $false; Error = $errMsg }
|
||||
}
|
||||
}
|
||||
|
||||
function Get-SQLDatabases {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets database information for a SQL Server instance.
|
||||
Gets database information for a SQL Server instance using native ADO.NET.
|
||||
#>
|
||||
param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[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 {
|
||||
# Using Get-DbaDatabase from dbatools and suppressing console warnings while capturing them
|
||||
$databases = Get-DbaDatabase -SqlInstance $ServerInstance -ErrorAction Stop -WarningAction SilentlyContinue -WarningVariable dbWarnings
|
||||
$connection.Open()
|
||||
|
||||
# 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 = @()
|
||||
foreach ($db in $databases) {
|
||||
foreach ($row in $table.Rows) {
|
||||
$dbList += [pscustomobject]@{
|
||||
Name = $db.Name
|
||||
Status = $db.Status
|
||||
Size = $db.Size
|
||||
RecoveryModel = $db.RecoveryModel
|
||||
Name = $row.name
|
||||
Status = $row.state_desc
|
||||
Size = "$([Math]::Round([double]$row.size_mb, 2)) MB"
|
||||
RecoveryModel = $row.recovery_model_desc
|
||||
}
|
||||
}
|
||||
return $dbList
|
||||
} catch {
|
||||
$errMsg = $_.Exception.Message
|
||||
if ($dbWarnings) {
|
||||
$errMsg = "$errMsg ($($dbWarnings -join '; '))"
|
||||
throw "Failed to get databases: $($_.Exception.Message)"
|
||||
} finally {
|
||||
if ($null -ne $connection -and $connection.State -eq [System.Data.ConnectionState]::Open) {
|
||||
$connection.Close()
|
||||
}
|
||||
throw "Failed to get databases: $errMsg"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user