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) }