73 lines
2.4 KiB
PowerShell
73 lines
2.4 KiB
PowerShell
|
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()
|
||
|
}
|
||
|
}
|
||
|
|