preloader
31 January 2011 / #Powershell

Bug Powershell

post-thumb

Nous avons rencontré un bug intéressant dans Powershell (même en v2.0) au niveau de la gestion des erreurs et notemment celle via la variable système $error.

La variable $error reçoit par défaut les retour erreurs des cmdlets que vous lancez.

Par exemple, exécutez dans un shell PS n’importe quelle commande qui plante et regardez le contenu de la variable $error :

bugposh_01

La variable $error contient le retour d’erreur généré, jusque là, normal.

Là où on a rencontré un problème qui s’est avéré être un bug reconnu par Microsoft est dans ce cas : on veut récupérer le contenu de cette variable pour l’analyser et effectuer des actions dans certains cas.

Pour être sûr de bien avoir uniquement ce que l’on veut, on a même fait une purge de la variable en premier.

Par exemple, un script classique :

$error.Clear()
if (Test-Path "C:\Windows\notepad.exe") {
    Write-Host "Notepad OK"
}

Cependant, lorsque l’on regarde le contenu de $error après, on a une erreur (alors que rien ne s’est affiché dans la console) :

bugposh_02

En fait, l’erreur vient du fait qu’à la première ligne, on ne ferme pas desuite l’accolade de la boucle if ! Pour faire le test, reprenez le script précédent en OneLiner, et vous verrez :

bugposh_03

En farfouillant un peu, on est tombé sur un rapport de bug Powershell sur ce problème, et la réponse de M. Microsoft est :

Your bug has not been fixed in PowerShell 2.0. However we have kept the bug active for next version

On peut donc espérer qu’en V3, ça ne sera plus le cas :p

Voici le lien du rapport de bug : http://connect.microsoft.com/PowerShell/feedback/details/371321/benign-errors-for-missing-closing-are-left-in-the-error-variable

Après que l’on ne vienne pas nous dire que le OneLiner n’est pas la solution !!!!!

D’ailleurs, si vous aimez bien les OneLiner qui le valent bien, je vous recommande celui de notre hypervisor national qui a le mérite d’être à la fois pratique ET ludique : Statistiques vmnic : the FatOneLiner


> Frederic MARTIN