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 } }