Web Config entries using PowerShell

The powershell script and xml below  can be used to make modifications to a Web Applications web config file across all SharePoint Servers.

It can add multiple sections / notes / attributes to the web config file using an XML file as a template to define what needs to be added / changed.

The script first cleans up any existing data in the web config matching an unique identifier that will be recorded for each modification.

Next the XML file is loaded and loops through each section of the xml, checking wither to add a new node (ie like an AppSettings node, or a change to an existing node attribute (ie say the Custom Error mode value).

Finally the changes at applied to the web config file.

Note: Remember to change the location and url variables to your environment and site url.

XML data file:

<?xml version="1.0" encoding="utf-8"?> 
<sections> 
  <section> 
    <skip>false</skip> 
    <path>configuration/system.web/customErrors</path> 
    <modifications> 
      <modification> 
        <type>EnsureAttribute</type> 
        <name>mode</name> 
        <value>Off</value> 
      </modification> 
    </modifications> 
  </section> 
  <section> 
    <skip>false</skip> 
    <path>configuration/appSettings</path> 
    <modifications> 
      <modification> 
        <type>EnsureChildNode</type> 
        <name>add[@key="SomeKeyName"][@value="SomeValueName"]</name> 
        <value>add key="SomeKeyName" value="SomeValueName"</value> 
      </modification> 
    </modifications> 
  </section> 
</sections>

PowerShell Script:


#=================================================================== 
# Web Config Modifications Script 
#=================================================================== 
 
Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction "SilentlyContinue" 
 
#connect to the function library for this script 
$functionLocation = "C:\PowerShell\WebConfigModifications" 
. $functionLocation\Web_Config_Modifications_Functions.ps1 
 
#define the SPWebConfigModification constants 
$modificationOwner = "SomeUniqueIdentifier" 
$EnsureChildNode = 0 
$EnsureAttribute = 1 
 
#get the web configuration modifications xml file 
$webconfigLocation = "C:\PowerShell\WebConfigModifications" 
$webconfigData = $webconfigLocation + "\Web_Config_Modifications.xml" 
 
# get the Web Application for the given Url 
$url = "http://YOUR-WEB-APP-URL" 
$webapp = Get-SPWebApplication $url 
$webapp 
#=============================================================================================================== 
 
#Write-Host "`nCleaning up existing Nodes" 
 
#use this statement below to correct for any errors  
#when initially adding new sections / nodes / attributes  
#etc that may cause exceptions 
#$webapp.WebConfigModifications.Clear() 
 
DeleteSections $webapp $modificationOwner $false 
 
#=============================================================================================================== 
Write-Host "`nAdding Web Config Nodes" 
 
#load the xml data 
[xml]$Data = get-content $webconfigData 
 
foreach ($Section in $Data.Sections.Section) 
{  
    #Ignore sections marked to be skipped 
    if ($Section.Skip -eq "false") 
    { 
        $path = $Section.Path 
        foreach ($modification in $Section.modifications.ChildNodes) 
        { 
            if ($modification.type -eq "EnsureAttribute") 
            { 
                $type = $EnsureAttribute 
                $name = $modification.name 
                  $value =  $modification.value  
                 
                Write-Host "`nChanging $path -> $name to $value" 
            }             
            else 
            { 
                $type = $EnsureChildNode 
                $name = $modification.name 
                $value = "<" + $modification.value + "/>" 
                 
                Write-Host "`nAdding Modifications -> $path : $name, $value" 
            }         
             
            CreateConfigChildNode $modificationOwner $type $path $name $value 
        } 
    } 
} 
 
#=============================================================================================================== 
Write-Host "`nApplying Modifications to the Web.Config"         
$webapp.Update() 
$webapp.Parent.ApplyWebConfigModifications() 
Write-Host "`nCompleted Web.Config Modifications" 
 
#----- END OF FILE  -----# 
 
#----- START of FUNCTION FILE ----# 
 
#=================================================================== 
# Web Config Modifications Script Functions 
#=================================================================== 
 
#=================================================================== 
# function to Create Web Config nodes and or change attributes 
#=================================================================== 
function CreateConfigChildNode($Owner, $Type, $Path, $Name, $Value) 
{ 
    $childNode = New-Object Microsoft.SharePoint.Administration.SPWebConfigModification  
    $childNode.Owner = $Owner 
    $childNode.Path = $Path 
    $childNode.Name = $Name 
    $childNode.Value = $Value 
    $childNode.Type = $Type 
 
    $webapp.WebConfigModifications.Add($childNode) 
} 
 
#=================================================================== 
# function to remove all existing node and changes to attributes matching the Owner name 
#=================================================================== 
function DeleteSections($webapp, $Owner, $removeOnly) 
{ 
    $count =  $webapp.WebConfigModifications.Count 
    $foundNodes = $false 
    for ($i=$count ;$i -gt -1; $i--) 
    { 
        if ($webapp.WebConfigModifications[$i].Owner -eq $Owner) 
        { 
            $foundNodes = $true 
            Write-Host "`n$i" 
            $webapp.WebConfigModifications.Remove($webapp.WebConfigModifications[$i]) 
        } 
    } 
 
    if ($foundNodes -and $removeOnly) 
    { 
        $webapp.Parent.ApplyWebConfigModifications() 
        $webapp.Update() 
    } 
} 
 
#----- END OF FILE  -----#

 

Leave a comment