IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

HTA check AD + WSUS + Antivirus


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut HTA check AD + WSUS + Antivirus
    Bonjour,

    je débute en vb et je suis en train de réaliser un script qui me permettrait d'avoir un état du parc informatique concernant la dernière connexion de l'ordinateur (renouvellement du canal sécurisé), la mise à jour des patches et l'état du poste vis à vis de l'antivirus.

    Jusqu'à présent, j'ai pu avancer sur la partie Active Directory et je peux détecter les postes qui n'ont pas renouvelé leur canal sécurisé depuis un certain temps. J'ai pu ainsi créer une procédure qui me permet de désactiver ces postes et de les déplacer dans une autre UO.


    J'aurai aimé savoir s'il était possible de me connecter directement à la base WSUS et d'avoir ainsi accès à des objets comme pour l'AD. Ces objets me permettraient d'obtenir les informations nécessaires et éventuellement agir sur les postes qui poseraient problème, qui ne seraient pas à jour de leurs patches.

    De même pour l'antivirus (j'utilise kaspersky).

    Merci par avance

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonjour,
    la classe wmi Win32_QuickFixEngineering énumère les patchs installés via le CBS http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    sinon peut-être ce script : http://msmvps.com/blogs/athif/archiv.../20/76035.aspx
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Bonjour,

    merci beaucoup pour votre réponse.
    Le problème avec cette solution c'est que les ordinateurs doivent être allumés pour que je puisse interagir avec ces derniers et récupérer les éléments que je veux.

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    pour interagir avec la base de données seule, il y a la wsus api mais elle ne semble pas exploitable
    en vbs mais en .net : http://msdn.microsoft.com/en-us/library/ms825116
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Merci bien.
    Je vais essayer de voir ça. Je rencontre un autre problème concernant la première partie de mon projet, je suis amené à interroger l'AD via VB et à afficher un certain nombre d'informations concernant mes ordinateurs.
    Parmi ces ordinateurs, je veux démarquer ceux qui n'ont pas renouveler leur canal de sécurité depuis un certain temps. De plus, j'aimerai les désactiver et les déplacer dans une autre UO.
    J'ai trouvé les procédures qu'il me fallait pour réaliser la désactivation et le déplacement de l'ordinateur. J'ai réaliser une fonction "desactive" qui prend en paramètre le distinguishedName de l'ordinateur.

    dans mon code, j'ai donc quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub fonction1
    '....
     
    strTmp=objUser.distinguishedName
     
    txtEnregis = txtEnregis & "<input class='button' type='button' value='Désactiver' name='btnDesactive'  onClick='Desactive(strTmp)' >"
     
    End Sub 'fonction1
    La fonction1 génère donc un code html et dans cette portion de code, elle génère un bouton qui lorsqu'on clique sur ce bouton, va appeler la procédure Desactive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Desactive(var1)
     
    	set objUser2 = GetObject("LDAP://" & var1)
    	objUser2.AccountDisabled = True
    	objUser2.SetInfo
     
    	Set objNewOU = GetObject("LDAP://" & nwOU)
     
    	Set objMoveComputer = objNewOU.MoveHere("LDAP://" & var1, vbNullString)
     
    End Sub 'Desactive
    Mon problème et que supposons que j'ai 5 ordinateurs dans mon parc : o1, o2... o5.
    Supposons aussi que seuls o2 et o5 doivent être désactivés et déplacés.

    Sur ma page, pour o2 et o5 j'ai bien des boutons "Désactiver" mais lorsque je veux lancer désactive sur o2, c'est sur o5 que ça se déroule.

    Autres renseignements, pour appeler la fonction desactive(), je suis obligé de passer par une variable globale : strTmp.

    Donc je pense que le problème vient du fait que la variable soit globale mais c'est le seul moyen que j'ai trouvé pour ne serait ce qu'appeler la fonction désactive.
    Si j'essaie de passer directement "objUser.distinguishedName" en argument de fonction de Desactive, je rencontre un message d'erreur.

    Merci pour votre aide

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    difficile de répondre puisqu'on ne sait pas comment est appelée fonction1
    mais il faut, lors de cet appel, que l'objet objUser soit défini sur le bon poste
    si une énumération a été faite, l'objUser pointera toujours sur le dernier item de la liste et donc sur o5...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Suis je obligé de passer par une variable globale pour appeler la procédure desactive ?

  8. #8
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    mais au moment où je cré le bouton avec OnclicK='desactive(objUser.distinguisedName)', la valeur de l'argument doit valoir celle de l'objet en cours non ?
    justement non
    même si un bouton est créé pour chaque poste, la variable strTmp ne peut contenir qu'une valeur, celle existante
    au moment du click par l'utilisateur, et qui sera la dernière de la liste donc o5
    ton problème souligne très exactement la raison pour laquelle je trouve que le HTA n'est pas du tout adapté à l'écriture d'une GUI
    puisqu'il faut concilier une logique de création de page avec celle d'un langage impératif (voir ici).
    pour revenir à ton problème, peut-être un truc comme ça (non testé et sans garantie ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub fonction1
    '....
    strTmp(index)=objUser.distinguishedName
     
    txtEnregis = txtEnregis & "<input class='button' type='button' value='Désactiver' name='btnDesactive'  onClick='Desactive(strTmp(" & chr(index + 48) & "))' >"
     
    End Sub 'fonction1
    où index est le rang du poste énuméré (maxi 9 évidemment)
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Tout d'abord merci pour ton aide.
    Je comprends qu'elle ne peut contenir que la dernière valeur mais ce que je ne comprends pas c'est pourquoi je ne peux créer un bouton avec la valeur que je veux, je m'explique :
    quand je parcours ma boucle, à l'instant t, objUser pointera sur ordinateur-t. Quand je crée le bouton html, je ne fais que créer un string après tout :
    # txtEnregis = txtEnregis & "<input class='button' type='button' value='Désactiver' name='btnDesactive' onClick='Desactive(strTmp)' >"

    Et au moment où je crée ce string, pourquoi je ne peux pas passer en argument de la fonction objUser.distinguishedName directement. En effet, à ce moment, objUser.distinguishedName me renvoie précisément le distinguished name de l'ordinateur-t.... Ce n'est qu'une chaîne de caractères qui sera interprétée après seulement non ? Mon raisonnement est erroné ?

    Autres questions SVP :
    dans la solution que tu m'as proposé, c'est quoi la nature de la variable strTmp ? Il semblerait que ça soit un tableau.
    index serait un entier que j'incrémente ?
    Pourquoi dois je faire "strTmp(" & chr(index + 48) & ")" ?

    Désolé pour mon ignorance^^ et merci par avance

  10. #10
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    Mon raisonnement est erroné ?
    oui, parce que tu confonds la définition d'une fonction et son appel.
    au stade de la création du bouton html, la fonction Desactive est définie et ses arguments sont alors nécessairement des noms de variables et non des valeurs.
    ce qui est trompeur dans la conception d'un hta, c'est qu'on peut allégrement mélanger les deux et ton script en est la parfaite démonstration.
    c'est pourquoi la définition de chaque bouton doit contenir un nom de variable différent
    c'est quoi la nature de la variable strTmp ? Il semblerait que ça soit un tableau.
    oui, le + simple est de définir un tableau dont les limites sont fixées en fonction du nombre de postes existants.
    la variable index correspond au rang du poste courant lors de l'énumération (base 0)
    Pourquoi dois je faire "strTmp(" & chr(index + 48) & ")" ?
    cela permet de définir par bouton un nom de variable tableau différent - chr(index + 48) renvoie le caractère "0" pour index = 0 et ainsi de suite jusqu'à 9
    bricolage un peu scabreux mais qui peut marcher si les vars tableau sont acceptées en paramètre
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  11. #11
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Merci pour ces précisions.
    J'essaierai de les appliquer mardi car là je suis en week end ^^
    Autre question STP, je n'ai pas pu bosser dessus aujourd'hui et je n'ai pas eu le temps de vérifier le forum mais j'ai réfléchi à une autre solution : au lieu de créer à chaque fois un bouton, je crée un checkbox.
    Du coup, j'ai quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "<input type='checkbox' id='idCheck' "& i &" value='false' name="& objUser.distinguishedName & ">
    La variable i est une variable locale de fonction1 lors qui s'incrémente.
    A la fin, j'utilise une variable globale cpt qui prend la valeur de i.

    Ensuite je crée un bouton qui lorsque je clique dessus devrait faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for n=1 to cpt 
        If idCheck & n.value = true then
             set objUser2 = GetObject("LDAP://" & idCheck & n.name)
    	objUser2.AccountDisabled = True
    	objUser2.SetInfo
    	
    	Set objNewOU = GetObject("LDAP://" & nwOU)
     
    	Set objMoveComputer = objNewOU.MoveHere("LDAP://" & var1, vbNullString)
    Next
    En français, je parcours l'ensemble des checkbox afin de vérifier s'ils sont cochés et si c'est le cas, je récupère le distinguished Name de l'ordinateur associé que j'ai stocké dans l'attribut "name" du checkbox afin de le désactiver et de le déplacer.
    Je n'ai pas pu tester cette solution mais j'ai un gros doute concernant idCheck & n..
    Les différents éléments html sont accessibles directement en utilisant leur attribut id : si dans mon code html, j'ai un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span id='idSpan'> </span>
    Si je veux modifier ce span, je peux par exemple faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     idSpan.innerHTML="toto"
    A ce moment, je veux faire la même chose pour mes checkbox. Je veux les atteindre à partir de leur "id" mais je ne sais pas comment les parcourir sachant qu'ils auront pour id un truc du genre idCheck"i" où i est un entier....
    Je ne sais pas si j'ai été clair...
    Merci par avance

Discussions similaires

  1. Comment on remplace un check ?
    Par Nout dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/07/2003, 11h20
  2. Check sur une colonne de table "en cours"
    Par in dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/07/2003, 09h47
  3. checking de connexion
    Par JEG dans le forum Développement
    Réponses: 4
    Dernier message: 09/10/2002, 13h36
  4. [propriétés]Option Checked
    Par psl dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/08/2002, 08h07
  5. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo