ps/Modules/Alkami.PowerShell.Database/Public/Get-ProvidersFromTenantDatabase.ps1

82 lines
2.4 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
function Get-ProvidersFromTenantDatabase {
<#
.SYNOPSIS
Queries a tenant database for provider data
.DESCRIPTION
Queries a tenant database for provider data. Optionally returns only valid provider configuration. Objects returned as a PSObject array contains
ProviderType, ProviderName, and AssemblyInfo
.PARAMETER TenantConnectionString
The full connection string to a tenant database
.PARAMETER ValidOnly
When supplied filters out providers tied to deleted Item records, or those with ProviderType Unknown
.OUTPUTS
Returns objects hydrated from the JSON file.
#>
[CmdletBinding()]
[OutputType([System.Object[]])]
param(
[Parameter(Mandatory=$true)]
[string]$TenantConnectionString,
[Parameter(Mandatory=$false)]
[switch]$ValidOnly
)
$logLead = Get-LogLeadName
if (-NOT (Confirm-DatabaseAccess -connectionString $TenantConnectionString -InformationAction SilentlyContinue)) {
Write-Warning "$logLead : Could not connect to Tenant with connection string [$TenantConnectionString]. Verify your access and rerun"
return $null
}
$providerQuery = @"
SELECT pt.Name as ProviderType, p.Name as ProviderName, p.AssemblyInfo as ProviderAssemblyInfo
FROM core.provider p
INNER JOIN core.ProviderType pt on pt.ID = p.ProviderTypeID
INNER JOIN core.Item i on i.ParentId = p.ID
WHERE i.ItemType in ('Connector', 'Processor')
"@
if ($ValidOnly.IsPresent) {
Write-Verbose "$logLead : Appending query with filter to eliminate invalid providers"
$providerQuery += "`n`tAND i.Deleted = '0' AND pt.Name != 'Unused'"
}
$data = @()
try {
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $TenantConnectionString
$sqlConnection.Open()
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand()
$command.CommandText = $providerQuery
$reader = $command.ExecuteReader()
while ($reader.Read()) {
$data += @{
ProviderType = $reader[0]
ProviderName = $reader[1]
AssemblyInfo = $reader[2]
}
}
} catch {
Write-Warning "$logLead : An unexpected exception occurred: $($_.Exception.Message)"
return $null
} finally {
if ($null -ne $sqlConnection) {
$sqlConnection.Dispose()
}
}
return $data
}