Problème avec boucle foreach powershell

Problème avec boucle foreach powershell - Shell/Batch - Programmation

Marsh Posté le 21-09-2016 à 11:31:03    

Bonjour,
 
Savez-vous me dire pourquoi lorsque je fais une boucle foreach de ce type, que je commence avec la variable NbError initialisée à 0 et que l’on part du principe que le fichier ne contient pas l’erreur « U00011666 » je me retrouve à la fin avec ma variable NbError à 1 ? :
 
$NbError=0
$monfichier="c:\toto.txt"
$searchError="U00011666"
 
$test= get-content $monfichier | select-string -CaseSensitive $searchError      
foreach ($Errorline in $test)    
{
    $NbError++
}  
 
Write-Output $NbError
 
Donc pour résumer :
 
Si l’erreur est absente, j’initialise ma $NbError à 0 puis elle passe à 1 après la boucle (donc pour moi pas normal)
 
Si l’erreur apparait une fois, j’initialise ma $NbError à 0 puis elle passe à 1 après la boucle également ( donc à priori normal)
 
Si l’erreur apparait 2 fois, j’initialise ma $NbError à 0 puis elle passe à 2 (donc à priori normal)
 
Je veux que ma variable NbError reste à 0 si l’erreur n’apparait pas et qu’elle passe à 1 si une erreur apparait.
 
Merci d'avance
 
 
 

Reply

Marsh Posté le 21-09-2016 à 11:31:03   

Reply

Marsh Posté le 21-09-2016 à 12:55:55    

Je crois avoir compris ce qu'il se passe, en fait la commande get content renvoi quelque chose de vide même si l'erreur est introuvable dans mon fichier. Et donc à priori la boucle foreach réagit si la variable $test contient du vide et donc ma $Nb Error est incrémentée.

 

Pour palier au problème j'ai modifié la boucle en y ajoutant un if :

 

$test= get-content $monfichier | select-string -CaseSensitive $searchError    
foreach ($Errorline in $test)    
{
    if ([string]$Errorline -ne "" )
    {
        $NbError++
    }
}

 

Ainsi ça n'incrémente que si ce n'est pas vide.


Message édité par Boba_Fett le 21-09-2016 à 13:02:28
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed