ps/Modules/Alkami.DevOps.Common/Public/Get-CatalogsFromMaster.ps1

59 lines
2.0 KiB
PowerShell
Raw Permalink Normal View History

2023-05-30 22:51:22 -07:00
function Get-CatalogsFromMaster {
<#
.SYNOPSIS
Returns a collection of tenants from the master database as a hashtable
#>
[CmdletBinding()]
param(
[Parameter(Position = 0, Mandatory = $false)]
[string]$ConnectionString
)
if ([String]::IsNullOrEmpty($ConnectionString)) {
$masterConnectionString = Get-MasterConnectionString
}
else {
$masterConnectionString = $ConnectionString
}
$conn = New-Object System.Data.SqlClient.SqlConnection
$conStrBuilder = New-Object System.Data.SqlClient.SqlConnectionStringBuilder($masterConnectionString)
$conn.ConnectionString = $conStrBuilder.ToString()
[hashtable[]]$databases = @()
try {
$conn.Open()
$query = New-Object System.Data.SqlClient.SqlCommand("SELECT Name, BankUrlSignatures, BankAdminUrlSignatures, DataSource, Catalog FROM dbo.Tenant", $conn)
$results = $query.ExecuteReader()
if (!$results.HasRows) {
Write-Warning (" No rows were returned from the tenant table.`nServer: {0}`nDatabase: {1}" -f $conStrBuilder.DataSource, $conStrBuilder.InitialCatalog)
return $null
}
while ($results.Read()) {
$tenantConStringBuilder = $conStrBuilder
$tenantConStringBuilder.'Data Source' = $results.Item(3)
$tenantConStringBuilder.'Initial Catalog' = $results.Item(4)
$databases += @{Name = $results.Item(0); Signature = $results.Item(1); AdminSignature = $results.Item(2); DataSource = $results.Item(3); Catalog = $results.Item(4); ConnectionString = $tenantConStringBuilder.ToString()}
}
return $databases
}
catch {
Write-Warning "An exception occurred while trying to pull tenants from the master database"
Write-Warning $_ | Format-List -Force
return $null
}
finally {
if ($conn.State -ne [System.Data.ConnectionState]::Closed) {
$conn.Close()
}
$conn = $null
}
}