ps/Modules/Alkami.PowerShell.Common/Public/Save-XMLFile.ps1

76 lines
2.1 KiB
PowerShell
Raw Permalink Normal View History

2023-05-30 22:51:22 -07:00
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)
}