Problème avec boucle foreach powershell - Shell/Batch - Programmation
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.
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