> Tech > Comprendre le fonctionnement du script

Comprendre le fonctionnement du script

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

On l'a vu, ApplyReg.vbs mène son action à  l'aide de plusieurs technologies. WSH 5.6 fournit le moteur qui traite le code du script et fournit quelques objets clé, comme l'objet WshArguments, qui transmet les paramètres de la ligne de commande au script, et l'objet Regular Expression (RegExp), qui évalue les

Comprendre le fonctionnement du script

chaînes de registres. ADSI permet
au script de se connecter (c’est-à dire,
de se lier) à  AD et de lire les attributs de chaque objet ordinateur. WMI permet au script
de se lier à  un registre distant et d’utiliser StdRegProv pour
mettre à  jour le registre.
ApplyReg.vbs commence par définir plusieurs constantes
et variables globales, puis appelle la sous-routine
CheckForCScript, que montre le listing Web 1 (http://www.itpro.
fr Club Abonnés). Cette sous-routine vérifie que vous utilisez
le script avec l’hôte CScript. Il faut utiliser ce dernier
parce que WScript ne supporte pas la propriété StdOut de
l’objet WScript.
Après avoir vérifié l’hôte, le script définit le fichier d’entrée
que vous avez spécifié avec le paramètre /f et le fichier
de registres que vous avez spécifié avec le paramètre /r avec
les variables strRptFileName et strRegFileName, respectivement,
comme le montre le listing Web 2 (www.itpro.fr). (Si
vous ne spécifiez pas les paramètres /f et /r quand vous lancez
ApplyReg.vbs, le script affiche un message signalant que
les deux paramètres sont nécessaires.) Le script appelle la
fonction SampleCommandLine pour afficher la syntaxe de la
ligne de commande, puis se termine.
Ensuite, ApplyReg.vbs utilise l’objet Dictionary du script
Runtime Library pour définir les cinq clés racine de registres
(HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, par
exemple) comme constantes. Le script utilisera plus tard ces
constantes pour accéder aux clés et sous-clés de registres
que le fichier de registres spécifie. L’utilisation de l’objet
Dictionary est une opération de script simple et directe, aussi
ne lui ai-je pas associé de listing. Si vous ne connaissez pas
bien le Dictionary Object, voir la documentation Microsoft
Developer Network (MSDN) à  http://msdn.microsoft.com/ library/
default.asp?url=/library/enus/script56/html/jsobjdictionary.
asp.
ApplyReg.vbs crée un rapport CSV (comma-separated value)
que vous pouvez consulter après l’exécution du script.
Pour nommer ce rapport de façon unique, le script utilise la
fonction GenFileName qui prend un nom de fichier (sans
l’extension) comme un paramètre d’entrée (c’est-à -dire, le
paramètre prefix). Dans ce cas, le paramètre prefix est
ApplyReg, comme le montre le listing Web 3. GenFileName
crée un nom de fichier unique en ajoutant la date et l’heure
au nom de fichier ApplyReg. Par exemple, si vous avez utilisé
ApplyReg.vbs le 16 avril 2003 à  11:43 A.M. et 53 secondes,
GenFile Name génèrera un fichier nommé ApplyReg-030416-
114353.csv. A noter que la date est au format AAMMJJ. Le renvoi
A du listing Web 3 (www. itpro.fr) montre l’appel de fonction
GenFileName. Le reste du code est la fonction
elle-même.
En possession du nom du rapport, ApplyReg.vbs crée
une instance de l’objet FileSystemObject de Script Runtime
Library, que le script utilise pour créer, ouvrir et écrire dans
le rapport. Le script utilise aussi cet objet pour ouvrir le fichier
de registres pour lecture, comme le montre le code du
listing Web 4 (www.itpro.fr) .
ApplyReg.vbs crée un objet RegExp pour évaluer chaque
ligne du fichier de registres. Cette évaluation permet au
script de déterminer s’il doit créer une clé de registre ou une
entrée de registre. Cette dernière est un nom de valeur, un
type de donnée, et une valeur. Si le script a besoin de créer
une entrée de registre, RegExp détermine aussi le type d’entrée
à  effectuer : String, Binary, DWORD, Expandable String
ou Multi-String. Le code du listing Web 5 (www.itpro.fr)
montre comment le script crée l’objet RegExp et définit ses
propriétés.
Avant que l’évaluation du fichier de registres ne commence,
ApplyReg.vbs appelle la fonction BindDN pour tenter
une opération de lien ADSI pour chaque DN présent dans le
fichier d’entrée. BindDN prend une à  une les lignes provenant
du fichier d’entrée et renvoie une chaîne de valeurs, selon
la réussite ou l’échec de diverses opérations effectuées
dans la fonction, comme on le voit figure 2.
Le listing 1 montre la fonction BindDN. Observez comment
la fonction définit les valeurs de sortie BindDN qui apparaissent
en figure 2. Dans le cas de BindDN = strDN|
|None||Invalid, que montre le renvoi A du listing 1, la fonction
ne trouve pas le DN dans AD. Deux possibilités : le DN
spécifié est non valide ou le nom de l’ordinateur a été
supprimé d’AD. Dans le cas de BindDN = strDN||
strComptName||Host, que montre le renvoi B du listing 1, la
fonction trouve le DN et définit la variable strCompt Name
avec l’attribut dNSHostName (c’est-à -dire, le nom d’hôte
DNS de l’ordinateur). Dans le cas de BindDN =
strDN||strCompt Name||NetBIOS, que montre le renvoi C
du listing 1, la fonction trouve le DN mais ne définit pas l’attribut
dNSHostName pour l’ordinateur. Par conséquent,
BindDN extrait l’attribut cn, qui est obligatoire pour des objets
ordinateur. L’attribut cn est généralement le nom
NetBIOS de l’ordinateur.
Ensuite, la fonction Split de VBScript divise la sortie de la
fonction BindDN en utilisant deux symboles pipe (||)
comme délimiteur. La fonction Split attribue les trois éléments
d’information résultants à  la matrice arrComputer-
Info, que montre le renvoi A du listing Web 6. Le script utilise
cette matrice pour l’évaluation du code et pour écrire des informations
dans le rapport. Le premier élément de la matrice,
arrComputerInfo(0), contient le DN de l’ordinateur,
que le script attribue à  la variable strDN. Le second élément
de la matrice, arrComputerInfo(1), contient le nom de l’ordinateur,
que le script attribue à  la variable strComputer-
Name. Trois valeurs sont possibles : None, le nom de l’hôte
ou le nom NetBIOS. Le troisième élément de la matrice,
arrComputerInfo(2), contient l’information générale, que le
script attribue à  la variable strNote. Trois valeurs sont possibles
: Invalid, Host ou NetBIOS.
On peut se demander pourquoi il est nécessaire de tenter
une opération de lien et d’extraire des attributs AD.
Réponse: Avant de mettre à  jour le registre de l’ordinateur,
le script doit s’assurer qu’il peut trouver l’ordinateur cible. Si
l’ordinateur existe dans AD et si BindDN renvoie un attribut
dNSHostName ou cn, ApplyReg.vbs tente d’envoyer un ping
à  l’ordinateur sur le réseau en utilisant le nom DNS ou le
nom NetBIOS de l’ordinateur. Pour cela, le script charge l’objet
WshShell et s’en sert pour appeler l’utilitaire Ping, comme
on le voit dans le listing Web 7. C’est une bonne méthode
pour trouver des ordinateurs online. Autre ressource intéressante
en la matière : « Tales front the Script – November
2002 » (http://www.microsoft.com/technet/treeview/default.
asp?url=/technet/columns/scripts/sg1102.asp?frame=
true).
Quand le ping réussit, le script tente de se connecter à 
StdRegProv, comme le montre le renvoi A du listing Web 7.
Quand la tentative de connexion réussit, ApplyReg.vbs effectue
la mise à  jour du registre. Pour cela, le script lit chaque
ligne du fichier de registres et donne à  la variable strLine une
valeur égale à  celle de la ligne. Ensuite, RegExp évalue le modèle
dans strLine. Quand ce modèle correspond à  une valeur
clé, la méthode CreateKey de WMI crée la clé, comme le
montre le code du listing 2. Faute de correspondance pour
un modèle de clé, le script teste chaque nom de valeur possible
autorisé dans le registre. Quand une correspondance
de modèle se produit, ApplyReg.vbs appelle la routine appropriée.
Le code du listing 3 montre les correspondances
de modèles que le script tente pour chaque type d’entrée et
le nom de la sous-routine que le script appelle quand une
correspondance de modèle se produit. Si vous ne connaissez
pas bien les expressions régulières et si vous voulez une initiation
à  ce sujet, lisez l’excellent article de Stephen Ramsay,
« Using Regular Expressions » (http://etext.lib. virginia.edu/
helpsheets/regex.html).
Quand le script a lu toutes les lignes du fichier de registres,
il donne la valeur Registry update applied à  la variable
strStatus. Si l’hôte est hors de portée parce que le ping n’a
pas renvoyé de réponse, le script met strStatus à  Host unreachable
et strNotes à  Verify that this host is online. Ensuite,
la méthode WriteLine de FileSystemObject écrit les valeurs
contenues dans strDN, strComputer, strStatus et strNotes
dans le fichier de rapport. Quand le script aura traité toutes
les lignes du fichier d’entrée, un message de console indiquera
que les données du rapport ont été sauvegardées.

Téléchargez cette ressource

Les mégatendances cybersécurité et cyber protection 2024

Les mégatendances cybersécurité et cyber protection 2024

L'évolution du paysage des menaces et les conséquences sur votre infrastructure, vos outils de contrôles de sécurité IT existants. EPP, XDR, EDR, IA, découvrez la synthèse des conseils et recommandations à appliquer dans votre organisation.

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