ps/Modules/Alkami.DevOps.Inventory/Public/Get-ConnectionStringInventory.ps1

61 lines
2.2 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
function Get-ConnectionStringInventory {
<#
.SYNOPSIS
Returns an OrderedDictionary that Represents the Connection String Inventory.
#>
[CmdletBinding()]
Param()
$logLead = (Get-LogLeadName);
$providerStopWatch = [System.Diagnostics.StopWatch]::StartNew()
$connectionStringDictionary = New-Object System.Collections.Specialized.OrderedDictionary
$connectionStringDetails = New-Object System.Collections.Specialized.OrderedDictionary
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Getting Machine Config Data"
[xml]$machineConfigRaw = Read-MachineConfig
$connectionStrings = $machineConfigRaw.SelectSingleNode("//connectionStrings")
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Machine Config Data Retrieved"
try {
foreach ($connectionString in $connectionStrings.ChildNodes) {
try {
$conn = New-Object System.Data.SqlClient.SqlConnectionStringBuilder($connectionString.connectionString) -ErrorAction SilentlyContinue
}
catch {
# Non-SQL Connection Strings, like Redis, will error here. And that's OK
Write-Host "$logLead : Non-SQL Connection Strings, like Redis, will error here. And that's OK."
}
if ($null -ne $conn -and !([String]::IsNullOrEmpty($conn.Password))) {
$cleansedConnectionString = $conn.ToString().Replace($conn.Password, "HIDDEN")
}
else {
$cleansedConnectionString = ($connectionString.connectionString -replace "password\=[^;]+", "password=HIDDEN")
}
$connectionStringDetails[$connectionString.name] = New-Object System.Collections.Specialized.OrderedDictionary
$connectionStringDetails[$connectionString.name]["ConnectionString"] = $cleansedConnectionString
}
}
catch {
$connectionStringDetails["Error"] = $_.Exception.ToString()
}
$connectionStringDictionary.Add("ConnectionStrings", $connectionStringDetails)
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Provider Complete"
$providerStopWatch.Stop()
return $connectionStringDictionary
}