mJay
mJay

Reputation: 743

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?

Upvotes: 12

Views: 25601

Answers (2)

L1ttl3J1m
L1ttl3J1m

Reputation: 415

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

Upvotes: 9

mJay
mJay

Reputation: 743

I found the answer here: https://stackoverflow.com/a/29693625/2165019

Especially if you have a lot of configs to be changed this is faster and better readable than using API commands in my opinion

Upvotes: 1

Related Questions