Internal/LabVM/New-UnattendXml.ps1
function New-UnattendXml { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Don''t use ShouldProcess in internal functions.')] param ( [string]$TemplateFilePath, [Hashtable]$Property, [string]$Destination ) function RecurseNode { param ( $XmlNode, [Hashtable]$Property ) $childElements = @($XmlNode.ChildNodes | Where-Object { $_.NodeType -eq 'Element' }) if ($childElements.Length -eq 0) { $regex = '({(.*)})' if ($XmlNode.InnerText -match $regex) { $propertyName = $XmlNode.InnerText -replace $regex,'$2' $XmlNode.InnerText = $Property.$propertyName if (-not $XmlNode.InnerText) { $XmlNode.ParentNode.RemoveChild($XmlNode) | Out-Null } } } elseif ($XmlNode.ChildNodes) { foreach ($childNode in @($XmlNode.ChildNodes)) { RecurseNode -XmlNode $childNode -Property $Property } } } [xml]$unattendXml = Get-Content -Path $TemplateFilePath RecurseNode -XmlNode $unattendXml -Property $Property if ($Destination) { $unattendXml.Save($Destination) } else { return $unattendXml.OuterXml } } |