Lister vos applications ASP.Net en mode debug avec PowerShell / List all your ASP.Net applications in debug mode with PowerShell
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é :
Import-Module WebAdministration # This line is only Required for PowerShell 2.0
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 :
la commande revoit le résultat suivant :
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 :
C'est que le mode <compilation debug=“false” /> aexplicitement été valorisé dans le fichier de configuration (par défaut le web.config à la racine du site).
Quelques liens utiles sur le mode debug (et comment le désactiver) :
- deployment retail=“true” pour ASP.NET : https://blogs.msdn.com/b/sbovo/archive/2009/07/09/deploymentretailtruepourasp-net.aspx
- ASP.NET Memory: If your application is in production… then why is debug=true : https://blogs.msdn.com/tess/archive/2006/04/13/575364.aspx
- HOW TO: Disable Debugging for ASP.NET Applications : https://support.microsoft.com/kb/815157/en-us
- Why I am not able Turn Off CustomErrors? https://blogs.msdn.com/b/webtopics/archive/2009/01/30/why-i-am-not-able-turn-off-customerrors.aspx
DeploymentSection.Retail Property : https://msdn.microsoft.com/en-us/library/system.web.configuration.deploymentsection.retail.aspx
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:
Import-Module WebAdministration # This line is only Required for PowerShell 2.0
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:
This commands returns the following result :
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:
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).
Some useful links related to the debug mode (and how to disable it ):
- deployment retail=“true” pour ASP.NET : https://blogs.msdn.com/b/sbovo/archive/2009/07/09/deploymentretailtruepourasp-net.aspx
- ASP.NET Memory: If your application is in production… then why is debug=true : https://blogs.msdn.com/tess/archive/2006/04/13/575364.aspx
- HOW TO: Disable Debugging for ASP.NET Applications : https://support.microsoft.com/kb/815157/en-us
- Why I am not able Turn Off CustomErrors? https://blogs.msdn.com/b/webtopics/archive/2009/01/30/why-i-am-not-able-turn-off-customerrors.aspx
DeploymentSection.Retail Property : https://msdn.microsoft.com/en-us/library/system.web.configuration.deploymentsection.retail.aspx
Laurent.