web-dev-qa-db-fra.com

Créer un nœud XML à partir de String dans PowerShell et ajouter

J'aimerais ajouter ce qui suit à la section httpHandler d'un web.config:

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

Actuellement, je crée un noeud et je définis les attributs comme ceci:

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

Existe-t-il un moyen simple de convertir la chaîne en nœud et de l’ajouter? Ou simplement ajouter la ficelle à la fin des enfants?

7
mJay

J'ai trouvé la réponse ici: https://stackoverflow.com/a/29693625/2165019

Surtout si vous avez beaucoup de configurations à modifier, cela est plus rapide et mieux lisible que d'utiliser des commandes API à mon avis

1
mJay

J'aime l'approche here-array dans la réponse liée ci-dessus. Il est également très sujet à la substitution variable, ce qui est pratique.

$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))
0
L1ttl3J1m