function Invoke-QueryByConnectionString { param ( [Parameter(Mandatory = $true)] [string]$ConnectionString, [Parameter(Mandatory = $true)] [string]$QueryString ) $logLead = Get-LogLeadName $conn = New-Object System.Data.SqlClient.SqlConnection try { $conStrBuilder = New-Object System.Data.SqlClient.SqlConnectionStringBuilder($ConnectionString) } catch [System.Management.Automation.MethodException] { Write-Warning "$logLead : Provided connection string [$ConnectionString] is invalid. Execution cannot continue." return $null } $conn.ConnectionString = $conStrBuilder.ToString() Write-Verbose ("$logLead : Connecting to database with connection string {0}" -f $conStrBuilder.ToString()) if (-not (Confirm-DatabaseAccess -ConnectionString $conStrBuilder.ToString())) { Write-Error "$logLead : You can not connect to the database server, do you have access and is it online?" return } $handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] { param($sender, $event) Write-Host $event.Message }; try { $conn.add_InfoMessage($handler); $conn.FireInfoMessageEventOnUserErrors = $true $conn.Open() $query = New-Object System.Data.SqlClient.SqlCommand($QueryString, $conn) $reader = $query.ExecuteReader() $allResults = New-Object -TypeName "System.Collections.ArrayList" do { $currentResults = @() $columns = @() for ($i = 0; $i -lt $reader.FieldCount; $i++) { $columns += $reader.GetName($i) } while ($reader.Read()) { $rowResult = @{} for ($i = 0; $i -lt $reader.FieldCount; $i++) { if ($reader.IsDBNull($i)) { $rowResult[$columns[$i]] = $null } else { $rowResult[$columns[$i]] = $reader[$i] } } $currentResults += $rowResult } $allResults.Add($currentResults) | Out-Null } while ($reader.NextResult()) return $allResults } catch { Write-Warning "$logLead : An exception occurred while trying to execute the specified query against the database" Write-Warning "$logLead : $($_.ToString())" Write-Warning "$logLead : $($_.ScriptStackTrace)" return $null } finally { if (($null -ne $conn) -and ($conn.State -ne [System.Data.ConnectionState]::Closed)) { $conn.Close() } $conn = $null } }