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 }