ps/Modules/Alkami.DevOps.SqlReports/Public/Remove-Datasources.ps1

73 lines
2.4 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
function Remove-Datasources {
<#
.SYNOPSIS
Remove DataSource nodes from SSRS Report XML data
.PARAMETER ReportXml
XML data to remove DataSource nodes from
.PARAMETER SkipParameterBasedConnections
Whether to keep paramter based DataSources
#>
[CmdletBinding()]
Param(
[Parameter(Position = 0, Mandatory = $true)]
[XML]$ReportXml,
[Parameter(Position = 1, Mandatory = $false)]
[bool]$SkipParameterBasedConnections = $false
)
$logLead = Get-LogLeadName
$stream = New-Object System.IO.MemoryStream
try {
Write-Verbose "$logLead : Getting DataSourceReference Elements"
$dataSourceNodes = $ReportXml.GetElementsByTagName("DataSourceReference")
if (!($SkipParameterBasedConnections)) {
Write-Verbose "$logLead : Adding Parameter Based Datasources to List to Remove"
$dataSourceNodes += $dataSourceNodes = $reportXml.GetElementsByTagName("ConnectionProperties")
}
$nodesToRemove = @()
Write-Verbose "$logLead : Rebuilding nodes with bogus information"
foreach ($dataSourceNode in $dataSourceNodes) {
Write-Verbose ("$logLead : Rebuilding Datasource {0}" -f $dataSourceNode.ParentNode.Name)
$connectionProperties = $ReportXml.CreateNode($dataSourceNode.NodeType, "ConnectionProperties", $null)
$dataProvider = $ReportXml.CreateNode($dataSourceNode.NodeType, "DataProvider", $null)
$dataProvider.InnerText = "SQL"
$conStr = $ReportXml.CreateNode($DataSourceNode.NodeType, "ConnectString", $null)
$conStr.InnerText = "Data Source=Server Name Here;Initial Catalog=database name here"
$dataSourceNode.ParentNode.AppendChild($connectionProperties) | Out-Null
$connectionProperties.AppendChild($dataProvider) | Out-Null
$connectionProperties.AppendChild($conStr) | Out-Null
$nodesToRemove += $dataSourceNode
}
Write-Verbose "$logLead : Removing all nodes"
foreach ($node in $nodesToRemove) {
$node.ParentNode.RemoveChild($node) | Out-Null
}
Write-Verbose "$logLead : Cleaning Namespaces"
$ReportXml.InnerXml = $ReportXml.InnerXml.Replace("xmlns=`"`"", "")
Write-Verbose "$logLead : Saving ReportData to Stream"
$ReportXml.Save($stream)
return $stream.ToArray()
} finally {
$stream.Close()
$stream.Dispose()
}
}