76 lines
2.1 KiB
PowerShell
76 lines
2.1 KiB
PowerShell
function Save-XMLFile {
|
|
<#
|
|
.SYNOPSIS
|
|
Saves XML Content to File
|
|
|
|
.NOTES
|
|
Default Encoding is UTF-8
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory = $true)]
|
|
[Alias("FilePath")]
|
|
[string]$XmlPath,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[Alias("XmlContent")]
|
|
[Xml]$Xml,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[Alias("Encoding")]
|
|
[System.Text.Encoding]$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
)
|
|
|
|
$logLead = Get-LogLeadName
|
|
|
|
if ($null -eq (([System.Management.Automation.PSTypeName]'StringWriterWithEncoding').Type)) {
|
|
$encodingStringWriter = @"
|
|
using System.IO;
|
|
using System.Text;
|
|
public sealed class StringWriterWithEncoding : StringWriter
|
|
{
|
|
private readonly Encoding encoding;
|
|
|
|
public StringWriterWithEncoding(Encoding encoding)
|
|
{
|
|
this.encoding = encoding;
|
|
}
|
|
|
|
public override Encoding Encoding
|
|
{
|
|
get { return encoding; }
|
|
}
|
|
}
|
|
"@
|
|
|
|
Write-Verbose "$logLead : Adding Custom StringWriter"
|
|
Add-Type -ReferencedAssemblies @( "System.IO" ) -TypeDefinition $encodingStringWriter -Language CSharp
|
|
}
|
|
|
|
Write-Verbose "$logLead : Creating StringWriterWithEncoding"
|
|
$stringWriter = New-Object StringWriterWithEncoding($OutputEncoding)
|
|
|
|
Write-Verbose "$logLead : Importing System.XML"
|
|
[System.Reflection.Assembly]::LoadWithPartialName("System.XML") | Out-Null
|
|
|
|
Write-Verbose "$logLead : Creating XmlWriterSettings"
|
|
$settings = New-Object System.XML.XmlWriterSettings
|
|
$settings.Indent = $true
|
|
|
|
try {
|
|
Write-Verbose "$logLead : Creating XmlWriter"
|
|
$writer = [System.Xml.XmlWriter]::Create($stringWriter, $settings)
|
|
Write-Verbose "$logLead : Writing XML to Stream"
|
|
$Xml.Save($writer)
|
|
} finally {
|
|
if ($null -ne $writer) {
|
|
Write-Verbose "$logLead : Disposing XmlWriter"
|
|
$writer.Dispose()
|
|
}
|
|
}
|
|
|
|
Write-Host ("$logLead : Saving XML to {0}" -f $XmlPath)
|
|
[System.IO.File]::WriteAllLines($XmlPath, $stringWriter.ToString(), $OutputEncoding)
|
|
}
|