This is an extension of a recent bunch of posts about XML and handling XML in PowerShell.
One way of adding a node and content can be accomplished by building the node out of XML objects. Some might consider the the true ‘object’ way of working through this problem.
The bit of XML that I want to add to my web.config is:
<allow users="*" />
This is a walkthrough of building that as pure XML objects using PowerShell. And then inserting it into a very specific location in the larger XML document.
First, I have to load in the web.config and make it an XML document.
$file = get-item -path $path
$xml = [xml](get-content $file)
Now, Create the ‘location’ node as an XML document.
$federationLocation = $xml.CreateElement("location")
Set the attribute of ‘path’
Create a nested node ‘system.web’
$fedSystemWebNode = $xml.CreateElement("system.web")
Create a nested node ‘authorization’
$fedAuthNode = $xml.CreateElement("authorization")
Create the ‘allow’ element
$fedAllowNode = $xml.CreateElement("allow")
Add the ‘users’ attribute
Now, for the really fun part. And the important part to pay attention to.
Reassemble the nodes in the correct order
Begin by appending the inner mode node to its parent
Repeat with the next node and its parent
Repeat the process again
Now, I want to insert the XML document Node into a very specific place in the web.config XML configuration file. That location is before the XML path ‘configuration/system.web’.
That is it. lots of lines. But performed in a true object style.
Oh, and don’t forget to save back to the file system.
Next time, the quick and dirty string method.