Enable/Disable Custom Error by editing Web.Config using PowerShell

To reveal actual errors in SharePoint, we used to turn off custom error page by editing web.config file, located in the root of SharePoint virtual directory. sharepoint custom error page web.config
  • Open the web.config in Notepad
  • Search for "CallStack", Change it from "false" to "true"
  • Search for "CustomErrors mode", Change its value from "On" to "Off"
  • Save and Close.
Warning: Web.config file is highly sensitive! even a small typo may result your SharePoint site Crash!!

Typical SharePoint 2007 "Unknown Error"
sharepoint custom error web.config
 and SharePoint 2010's "An unexpected error has occurred"
 sharepoint 2010 web.config customerrors
Alright, Wouldn't it be a good idea to make these changes by PowerShell Scripts? Sure, Here is the PowerShell script to enable or disable SharePoint custom error page and reveal actual error by editing Web.Config file:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

Function ConfigureCustomError()
  Param( [Parameter(Mandatory=$true)] [string]$WebAppURL,  [parameter(Mandatory=$true)] $Option )
  This PowerShell function Enables / Disables SharePoint Custom Error by editing web.config file
  ConfigureCustomError "http://sharepoint.crescent.com" "OFF"
  This disables SharePoint's default custom error page and reveals actual error
  $WebAppURL - Web Application URL in which the Custom Errors to be set 
  $Option - ON or OFF
  Sets "CustomErrors mode" and "CallStack" values in web.config file

 #Get the web application
 $WebApp = Get-SPWebApplication $WebAppURL
 #Get the Web Application Zone
 $Zone = $WebApp.AlternateUrls[0].UrlZone
 # Get the IIS settings for the zone
 $IISSettings = $WebApp.IISSettings[$zone]
 # Get the path from the settings
 $WebConfigPath = $IISSettings.Path.ToString() + "\web.config"

 #Backup web.config file
 $now = [datetime]::now.ToString('dd-MM-yyyy hh-mm-ss')
 $BackupFile =$IISSettings.Path.ToString()+ "\web.config.$now"
 copy-item $WebConfigPath -destination $BackupFile

 #Get the Web.config File
 $XMLDoc = new-object System.Xml.XmlDocument
  "OFF" { 
    #Apply Change
    $XMLDoc.get_DocumentElement()."sharepoint".safemode.callstack = "True"
    $XMLDoc.get_DocumentElement()."system.web".customErrors.mode = "Off"
    Write-Host "Custom Error Mode has been Disabled, Now you can get the actual errors!"
  "ON" {
    $XMLDoc.get_DocumentElement()."sharepoint".safemode.callstack = "False"
    $XMLDoc.get_DocumentElement()."system.web".customErrors.mode = "ON"
    Write-Host "Custom Error Mode has been Enabled, SharePoint displays default custom error Page!"
 #Call the function to Turn OFF custom errors
 ConfigureCustomError "http://sharepoint.crescent.com" "OFF"

No comments:

Please Login and comment to get your questions answered!

Powered by Blogger.