Lister vos applications ASP.Net en mode debug avec PowerShell / List all your ASP.Net applications in debug mode with PowerShell

[MAJ : 27/06/2019] Ajout du code PowerShell pour désactiver le mode debug sur toutes les applications

D’expérience je peux assurer que la moitié des clients ont au moins une application ASP.Net qui tournent en mode debug en production (J’avoue que débusquer une telle application est devenu un de mes jeux préférés lors de mes visites chez mes clients). Je ne reviendrai pas sur les effets néfastes du mode debug car ces informations sont facilement trouvables sur Internet (Je vous mets quand même quelques liens en bas de cet article). Le but de ce court article c’est de vous expliquer via une simple ligne de commandes PowerShell, comment lister toutes vos applications et le mode debug associé :

# This line is only Required for PowerShell 2.0 
Import-Module WebAdministration 
Get-WebConfiguration system.web/compilation -Recurse | Select @{Name="ComputerName";Expression={$env:computername}}, @{Name="SiteName";Expression={$_.PSPath.replace("MACHINE/WEBROOT/APPHOST", "").TrimStart("/")}}, Debug

Supposons que nous hébergions deux sites web sur le serveur W2K12R2_IIS001 : www.contoso.com et www.northwindtraders.com :

IIS

la commande revoit le résultat suivant :

debug
On constate que le site www.contoso.com est effectivement en mode debug (ce qui n’est pas une bonne pratique sur un environnement de production). Quid du site www.northwindtraders.com ? En réalité ce site n’est pas listé ici car il hérite de la configuration par défaut à savoir <compilation debug=“false” /> .Si jamais vous voyez apparaître  une sortie similaire à celle-ci :

debug2

C’est que le mode <compilation debug=“false” /> a explicitement été valorisé dans le fichier de configuration (par défaut le web.config à la racine du site).

Si vous souhaitez désactiver toutes les applications en mode debug en une fois, vous pouvez le faire via une simple ligne de commandes PowerShell  (Attention au recyclage que cela va provoquer toutefois):

 
# This line is only Required for PowerShell 2.0 
Import-Module WebAdministration 
Get-WebConfiguration system.web/compilation -Recurse | Where-Object -FilterScript {$_.Debug} | ForEach-Object -Process { Set-WebConfigurationProperty -pspath $_.PSPath -filter "system.web/compilation" -name "debug" -value "False" -Verbose }

Quelques liens utiles sur le mode debug (et comment le désactiver) :


[update : 08/21/2020] Added PowerShell code to disable debug mode on all applications

From own experience I can tell that half the customers have at least an ASP.Net application running in debug mode in their production environment (I admit that flushing out such an application has become one of my favorite games during my customer visits). I will not dwell on the negative effects of debug mode because this information can be easily found on the Internet (I put you anyway some links at the bottom of this article). The purpose of this short article is to explain through a single line of PowerShell commands, how to list all your applications and debug associated mode:

 
# This line is only Required for PowerShell 2.0 
Import-Module WebAdministration 
Get-WebConfiguration system.web/compilation -Recurse | Select @{Name="ComputerName";Expression={$env:computername}}, @{Name="SiteName";Expression={$_.PSPath.replace("MACHINE/WEBROOT/APPHOST", "").TrimStart("/")}}, Debug 

Suppose two websites are hosted by us on W2K12R2_IIS001 server: www.contoso.com and www.northwindtraders.com:

IIS

This commands returns the following result :

debug
The site www.contoso.com is actually in debug mode (which is not a good practice in a production environment). But what is the status for the site www.northwindtraders.com? In fact this site is not listed here because it inherits from the default configuration. If you see output similar to this:

debug2

It means that the <compilation debug=“false” /> has explicitly been set in the configuration file (the web.config at the root of the site by default).

If you want to deactivate all applications in debug mode at once, you can do it via a simple PowerShell command line (Be careful with the recycling that this will cause however):

 
# This line is only Required for PowerShell 2.0 
Import-Module WebAdministration 
Get-WebConfiguration system.web/compilation -Recurse | Where-Object -FilterScript {$_.Debug} | ForEach-Object -Process { Set-WebConfigurationProperty -pspath $_.PSPath -filter "system.web/compilation" -name "debug" -value "False" -Verbose }

Some useful links related to the debug mode (and how to disable it ):

Laurent.

Feel free to share:)