Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create XML Node from String in PowerShell and append

I would like to append the following to the httpHandler section of a web.config:

<add name="Telerik_Web_UI_DialogHandler_aspx" verb="*" preCondition="integratedMode" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" />

Currently I am creating a node and setting the attributes like this:

$xmlDoc = (Get-Content $webConfig) -as [Xml]
$root = $xmlDoc.get_DocumentElement();

$handler1 = $xmlDoc.CreateNode('element',"add",'')
$handler1.SetAttribute('name','Telerik_Web_UI_DialogHandler_aspx')
$handler1.SetAttribute('verb','*')
$handler1.SetAttribute('preCondition','integratedMode')
$handler1.SetAttribute('path','Telerik.Web.UI.DialogHandler.aspx')
$handler1.SetAttribute('type','Telerik.Web.UI.DialogHandler')
$root.'system.webServer'.handlers.AppendChild($handler1);

Is there an easy way to just convert the string to a node and append it? Or to just add the string at the end of the children?

like image 868
mJay Avatar asked Sep 21 '16 16:09

mJay


1 Answers

I like the here-array approach in the linked answer above. It's also very amenable to variable substitution as well, which is handy.

$xmlDoc = (Get-Content $webConfig) -as [Xml]

[xml]$InsertNode = @"
<add name="Telerik_Web_UI_DialogHandler_aspx" verb="*" preCondition="integratedMode" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" />
"@

$xmlDoc.configuration.'system.webServer'.handlers.AppendChild($xmlDoc.ImportNode($InsertNode.Add, $true))
like image 74
L1ttl3J1m Avatar answered Oct 21 '22 06:10

L1ttl3J1m