> Tech > Un coup d’oeil sous le capot

Un coup d’oeil sous le capot

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Si vous vous essayez aux scripts pour la première fois, vous serez peut-être un peu intimidés à l’idée de regarder sous le capot de PWcheck-change. Surmontez cette appréhension. La plupart des auteurs de scripts croient au début que les scripts sont difficiles à comprendre. Mais, assez rapidement, ils se risquent

à emprunter les scripts des autres puis à les modifier. Et, dans la foulée, à écrire leurs propres scripts de a à z.

Le listing 1 montre PWcheck-change. Comme la plupart des autres scripts, il comporte plusieurs sections de code importantes. Une zone d’en-tête qui contient le code d’initialisation et l’information de configuration. Le renvoi A jouxte la zone d’en-tête, qui contient généralement du code d’initialisation. Ce code inclut habituellement la commande Echo Off, qui désactive une fonction d’écho de commande (de telle sorte que ne s’affichent sur l’écran que les résultats de la commande sans la commande elle-même) et la commande Title, qui indique un titre pour la fenêtre command-shell qui s’ouvrira à l’exécution. Vous pouvez personnaliser la fenêtre commande-shell, par exemple, en changeant la couleur de la police, la couleur de fond ou la taille.

Ensuite, la zone d’en-tête inclut la commande Set-local. Elle garde certaines variables du script locales vis-à-vis de celui- ci.

Enfin, la zone d’en-tête de PWcheck-change fournit des commentaires sur la manière de configurer le script. Les scripts utilisent souvent un fichier d’entrée (qui contient des informations que le script doit renvoyer, un fichier de sortie (qui contient des résultats et d’autres données produites par le script) et des outils (des outils Microsoft ou tierce partie dont le script a besoin pour mener à bien une tâche). Quand un script utilise un fichier d’entrée, un fichier de sortie, ou un outil, vous devez préciser son emplacement. Dans PWcheck-change, vous devez configurer les fichiers vers un fichier d’entrée (qui contient le nom du serveur, le nom du compte Administrative, et le mot de passe de chaque serveur sur lequel vous voulez vérifier ou changer les mots de passe), le fichier de sortie et deux outils (PsPassword de Sysinternals et l’utilitaire kit de ressources local.exe).

Dans la zone d’en-tête, vous n’êtes pas limités à des commentaires sur l’information de configuration. Vous pouvez aussi commenter d’autres détails importants, comme l’auteur du script et le numéro de version.

Du code qui lit l’information dans le fichier d’entrée.
Si un script utilise un fichier d’entrée, on a besoin d’un code qui lise l’information à partir de ce fichier. Comme le montre le code en regard du renvoi B, PWcheck-change utilise une commande For pour lire et analyser syntaxiquement chaque ligne du fichier d’entrée. L’option delims indique le délimiteur à utiliser pour diviser chaque ligne en segments. Dans ce cas, le délimiteur est une virgule. L’option tokens spécifie les segments (c’est-à-dire, les valeurs) à capturer dans chaque ligne. PWcheck-change capture les trois premiers segments qu’il attribue aux variables Server, AdminName et Password, respectivement. L’option usebackq traite les éventuels espaces dans le chemin du fichier d’entrée en autorisant l’usage de guillemets doubles de part et d’autre du chemin du fichier.
Du code qui effectue une opération ou une chaîne d’opérations. On écrit souvent des scripts pour automatiser des tâches. De tels scripts doivent inclure une section de code qui effectue une opération ou une chaîne d’opérations pour exécuter ces tâches. On ne s’en étonnera pas, PWcheck- change inclut du code qui effectue une chaîne d’opérations, comme le montre le code du renvoi D. Mais on pourra s’étonner que la première opération soit un test de ping plutôt qu’une opération destinée à vérifier ou à changer un mot de passe. Certains utilitaires ont le longs timeouts quand on leur ordonne d’effectuer une fonction sur un serveur qui n’est pas online. C’est pourquoi il est judicieux de tester d’abord si le serveur est online, avec un simple test ping.

A noter que la commande Ping est imbriquée dans une commande For. Précédemment, le script utilisait une commande For pour analyser syntaxiquement un fichier d’entrée. Dans ce cas, le script utilise une commande For pour analyser syntaxiquement la sortie de la commande Ping et pour rechercher la chaîne Reply. Si le script ne trouve pas cette chaîne (c’est-à-dire, si le serveur est offline), il journalise une erreur. Si le script trouve la chaîne (c’est-à-dire si le serveur est online), il commence l’opération de changement ou de vérification du mot de passe.

Pour changer les mots de passe, PWcheck-change utilise PsPasswd qui étend le champ d’action de la commande Net User intégrée. Net User change les mots de passe du compte local du compte domaine, mais il ne peut pas changer le mot de passe du compte local d’un système distant, ce que le script a besoin de faire pour changer les mots de passe du compte Administrator.

PsPasswd peut changer les mots de passe des comptes locaux sur les systèmes distants, mais il est conçu pour changer le mot de passe d’une machine seulement, ce qui est sans intérêt dans un environnement de plusieurs machines. Par conséquent, PWcheck-change appelle plusieurs fois cet utilitaire de changement unique après avoir lu dans le fichier d’entrée l’information sur le nom du serveur, le nom du compte Administrator et le mot de passe pour chaque serveur. En mode vérification, PWcheck-change saute le code de changement et utilise la commande Net Use et une connexion IPC$ pour tester le mot de passe Administrator existant. Quand une connexion est établie, le nom d’utilisateur et le mot de passe sont corrects. Si une connexion n’est pas établie, le script se dirige dans une section qui traite les erreurs.

Du code qui traite les erreurs qui surviennent pendant que l’on tente d’effectuer les diverses opérations. On l’a vu, certaines parties de PWcheck-change traitent déjà quelques types d’erreurs. Cependant, le script inclut aussi du code qui traite deux types d’erreurs spéciaux : permissions concernant des noms d’utilisateurs incorrects et des serveurs incorrects.

Il arrive qu’un administrateur bien intentionné mais distrait change le mot de passe ou renomme le compte Administrator. Pour découvrir ce « glissement du mot de passe », le script utilise local.exe pour déterminer si le nombre d’utilisateur est dans le groupe Administrators local, comme le montre le renvoi E. Si le nom d’utilisateur n’est pas dans le groupe Administrators local, il y a deux possibilités : soit un nom incorrect est spécifié dans le fichier d’entrée, soit le nom correct est spécifié mais le serveur n’a plus les bonnes permissions (par exemple, quelqu’un a changé par inadvertance le nom du compte Administrators sur le serveur). Dans l’un ou l’autre cas, le script journalise un message d’erreur indiquant que le compte n’a pas été trouvé. Si les noms dans le fichier d’entrée et dans les permissions serveur sont tous deux corrects mais qu’il y a une autre anomalie, le script considère l’erreur comme une défaillance générale et journalise le message d’erreur PW Check/Change Failure.

Du code qui envoie de l’information à un fichier ou à la console. Dans presque chaque section, PWcheck-change utilise la commande Echo pour envoyer de l’information (comme date et heure courantes, un message de réussite ou d’échec, la sortie d’une commande, par exemple) au fichier de sortie ou à la console. Si la commande Echo est suivie du code

>>"%Outputfile%"

le script écrit l’information dans le fichier de sortie CSV (comma-separated value) spécifié dans la zone d’en-tête. Si la commande Echo n’est pas suivie du symbole de redirection >>, l’information va à la console.
Il y a d’autres moyens d’envoyer des informations à un fichier ou à un autre médium. Voyons-en quelques-unes :
• Vous pouvez copier l’information dans un fichier qui se trouve dans un dossier partagé.
• Vous pouvez ajouter l’information à un fichier existant.
• Vous pouvez créer un fichier HTML et transférer ce fichier sur un serveur Web.
• Vous pouvez utiliser SMTP mail et Blat (un utilitaire gratuit) pour envoyer un message de e-mail ou pager.

Du code qui effectue des opérations de nettoyage. Les scripts comportent souvent des opérations de nettoyage. Elles consistent généralement à supprimer des fichiers temporaires créés par le script et à évincer des variables locales que le script a utilisées.
Comme le montre le code du renvoi C, PWcheck-change utilise la commande End local pour évincer les variables locales. Comme le script n’a utilisé aucun fichier temporaire, il n’inclut pas non plus de code de nettoyage correspondant.
Je me dis souvent que les milliers de scripts que j’ai écrits sont en réalité tous identiques avec juste quelques variantes. C’est en partie vrai. Toutefois, pour de nombreux scripts, il suffit d’inclure ces sections de code de base et de suivre quelques pratiques recommandées. L’encadré « Meilleures pratiques du scripting » énumère ces recommandations.

Téléchargez cette ressource

Microsoft 365 : 5 erreurs de sécurité

Microsoft 365 : 5 erreurs de sécurité

A l’heure où les données des solutions Microsoft 365 sont devenues indispensables au bon fonctionnement de l’entreprise, êtes-vous certain de pouvoir compter sur votre plan de sécurité des données et de sauvegarde des identités ? Découvrez le Top 5 des erreurs à ne pas commettre et les meilleures pratiques recommandées par les Experts DIB France.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010