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 }