Automating config file changes : Part 3 – Deleting an element from an XML file
This post talks about removing an existing XML element from the config file. Consider a scenario where we have the following web.config file saved at location C:\MyApplication
<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="system.web"> <section name="myConfigSection”/> </sectionGroup> </configSections> <system.webServer> <modules> <add name="moduleToRemove”/> <add name="moduleToKeep”/> </modules> </system.webServer> <system.web> <customErrors mode="On" defaultRedirect="Error.htm"> <error statusCode="404" redirect="https://myAppDevWeb/404.aspx"/> </customErrors> </system.web> <appSettings> <add key="DBServer" value="myAppDevDB"/> </appSettings> </configuration> |
The requirement is to remove the <configSections> and the module “moduleToRemove” . These sections are marked in Red.
The resultant file should look like this
<?xml version="1.0"?> <configuration> <system.webServer> <modules> <add name="moduleToKeep”/> </modules> </system.webServer> <system.web> <customErrors mode="On" defaultRedirect="Error.htm"> <error statusCode="404" redirect="https://myAppDevWeb/404.aspx"/> </customErrors> </system.web> <appSettings> <add key="DBServer" value="myAppDevDB"/> </appSettings> </configuration> |
Lets have a look at the Powershell script we will be using. We will name this script RemoveElement.ps1 and save it in C:\Scripts
# Declaring the parameter to be passed while executing the Powershell script Param ( $webConfigPath # Path to the web.config file. Make sure file is not read-only ) $xml = [xml](get-content $webConfigPath) # Create XML object and open the web.config file $nodeToRemove= $xml.configuration.SelectSingleNode("configSections"); # Selecting the Element to be removed $xml.configuration.RemoveChild($nodeToRemove); # Remove the Element foreach( $item in $xml.configuration."system.webServer".modules.add ) # Traverse through all modules { if( $item.name -eq "moduleToRemove" ) # Checking if the current module is to be removed { $xml.configuration."system.webServer".modules.RemoveChild($item); # Remove the desired module when found } }
$xml.Save($webConfigPath) # Save the updated web.config file |
Run the script:
c:\>Powershell
PS C:\> cd scripts
PS C:\scripts> .\RemoveElement.ps1 “C:\MyApplication\web.config”
Related Posts:
Automating config file changes : Part 1 – Installing Microsoft Windows Powershell
Automating config file changes : Part 2 – modifying already existing config keys