Vérification de variables

Ed Wilson, le Microsoft Scripting Guy qui tient un excellent blog sur Powershell, vient de démarrer des Mini Scripting games.

Dans ce premier jeu Ed soumet un problème intéressant qui devrait nous arriver à tous (enfin ceux qui font du Powershell).

Imaginons que nous devons lire un fichier CSV pour récupérer les attributs Active Directory d’un utilisateur. Nous devons ensuite mettre à jour ces attributs dans l’Active Directory, or il se peut que des attributs manquent ou qu’ils contiennent des espaces ou des tab, finalement des attributs mal renseignés. Ceci résulte en une erreur lorsqu’on essaye de mettre à jour l’AD.

Ed demande comment on peut régler le problème en vérifiant que ce qui est remonté est valable.

Par valable Ed dit qu’il faut qu’on vérifie tous les cas possibles où les attributs peuvent poser problème.

Voici ma liste des cas possibles:

  • Null
  • Non-null mais vide
  • Contient 1 ou plusieurs espaces
  • Contient 1 ou plusieurs tabs

Ed dit ensuite qu’il voudrait seulement voir le test effectué pour qu’on se focalise sur le problème, de ce fait je vais ignorer la lecture du fichier CSV et la mise à jour de l’AD, je ne regarde que le test qu’on va effectuer pour tester la valeur.

Ed d’ailleurs donne un exemple :

Évidemment cet exemple ne couvre qu’un seul cas.

Et bien pour répondre à ce problème, j’utiliserais une expression régulière.

Voici les explications.

J’utilise l’opérateur de condition -match qui permet de vérifier une chaine avec une expression régulière.

Les expressions régulières permettent de faire beaucoup de choses avec quelques caractères :

  • Avec ^ j’indique le début d’une chaine de caractères.
  • Entre [ ] j’indique des cas possibles que je veux traiter, c’est-à-dire des caractères spécifiques que je veux trouver.
  • Avec \s j’indique un espace
  • Avec \t j’indique un tab
  • Avec { } j’indique que ce qui est entre les [ ] peut se répéter
  • Avec 0 je couvre le cas où la chaine est vide
  • Avec la virgule je dis que le 0 n’est pas le seul cas
  • Ne pas mentionner d’autres cas (je finis directement avec } après la virgule) veut dire que tous les autres cas sont compris
  • Avec $ j’indique la fin de la chaine

Les cas pris en compte par cette ligne de code sont:

Et voilà

Partager ce contenu