Mar 12 2010

Outil de diagnostic pour hotline SN1-Info v1.0

Voici une application pour votre support niveau 1 qui peut aider au diagnostic d’incidents, elle est développé au format HTA. Afin de réaliser cet outil WMI code creator a été d’une grande utilitée.

Cliquer sur l’icône ci dessous pour télécharger l’outil, si vous avez des demandes d’évolution ou des bugs constatés n’hesitez pas à me les faire parvenir, il s’agit d’une v1.0.

Une fois l’outil lancé, entrez le nom du poste distant:

Puis le login utilisateur au format domainelogin:

Une fenêtre composée de cinq onglets s’affiche:

General info:

Cet onglet est découpé en deux sections, la première n’a rien d’extraordinaire, se sont des requêtes WMI de base:

La seconde “Network info” est plus intéressante: Si nous parcourons la classe WMI Win32_NetworkAdapterConfiguration sur un serveur possédant des cartes en Teaming, ou bien sur un portable alors un nombre élevé de cartes nous est retourné, alors que l’information de seulement une voir deux cartes réseau nous intéresse généralement. Un post des scripting guys m’a donné la solution: Il nous faut filter tout d’abord les cartes réseau qui sont connectées à un réseau via la valeur “NetConnectionStatus” de la classe WMI Win32_NetworkAdapter, puis énumérer les informations de Win32_NetworkAdapterConfiguration pour les cartes qui ont une IP d’activée (valeur IPEnabled). La valeur commune entre ses deux classes est “caption”. Ce qui nous donne les deux requêtes suivantes que vous retrouverez dans le code du fichier HTA.

1
2
3
4
5
6
7
8
Set colItems = objWMIService.ExecQuery("SELECT caption FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2")
For Each objItem in colItems
caption1 = objItem.caption
Set colNicConfigs = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True AND caption = '"&caption1&"'")
For Each objNicConfig In colNicConfigs
'Retrieve IP adress, DNS servers....
Next
Next

Passons aux informations du second onglet.

Printers:

Pour cet onglet nous utilisons toujours WMI pour lister les imprimantes, le nom de driver est indiqué ainsi que le type: Imprimante réseau ou locale. L’imprimante par défaut est surlignée en bleu.

Afin de déterminer si il s’agit d’une imprimante réseau ou locale voir un autre post des scripting guys, l’outil est compatible avec Windows2000 et versions d’après, en utilisant la méthodologie mentionnée dans le lien. Malgré tout il a été constaté que parfois les imprimantes réseau ne sont pas remontées par une requête WMI à distance, dans ce cas nous nous basons sur la clef de registre HKCU\Printers\Connections (HKUSERS\%SID_Utilisateur%\Printers\Connections), l’imprimante par défaut ne peut alors être découverte, ni le driver. L’impossibilité d’énumérer les imprimantes réseau à distance est lié au fait que votre compte n’a pas les droits de lecture pour interroger ce “namespace” WMI car elles sont déclarées au niveau utilisateur, il faudrait alors exécuter notre script avec les credentials de l’utilisateur connecté, pour faire cela via WMI voir cet article.

Active Directory:

La première information indique le DC de logon utilisé par la session de l’utilisateur distant. Puis le résultat d’un RSOP est affiché, nous avons listé les GPO appliquées sur la partie ordinateur, puis utilisateur:

La classe WMI rootrsopcomputer est utilisée pour obtenir la configuration ordinateur des GPOs, pour la configuration utilisateur c’est un peu moins évident. En effet il faut faire appel à la classe root\rsop\user\%SID_Utilisateur% mais il faut remplacer les “-” de votre SID par des “_”. Ce qui donne le code suivant:

1
2
3
4
5
6
7
8
9
10
11
12
Set objAccount = objWMIService.Get("Win32_UserAccount.Name='"&usser&"',Domain='"&domaine&"'")
SID=replace(objAccount.SID,"-","_")
Set objWMIGPO = GetObject("winmgmts:" & strComputer & "root\rsop\user"&SID)
 
Set colGPO = objWMIGPO.ExecQuery("Select * from RSOP_GPO")
 
For Each objGPO in colGPO
version = hex(objGPO.Version)
version = right(version,4)
version = CLng("&H" & version)
'Collect other information
Next

Comme vous pouvez le voir ci dessus la version de la GPO n’est aussi pas évidente à obtenir car il s’agit d’une combinaison de la version GPT et du GPC, dans notre script nous nous basons sur le GPC. Pour plus d’informations sur la classe root\rsop c’est ici.

Hotfixes:

Sur cet onglet nous indiquons si Windows Update est activé et si un serveur WSUS est utilisé pour les mise à jour, toutes ces informations sont accessibles via le registre, la liste des KB est récupérée via WMI.

Citrix:

Nous avons la version du client ICA installée, voir cette vieille CTX pour la méthode. Puis l’URL du PN Agent est indiquée si celle ci est configurée.

This post is also available in: Anglais

4 Comments

  • By MIka, July 24, 2012 @ 9:31 am

    Juste génial ! Merci beaucoup

  • By ldap389, July 24, 2012 @ 9:58 am

    De rien 🙂 Content que cet outil soit utile.

  • By MIka, July 24, 2012 @ 10:24 am

    Est-ce possible d’avoir un onglet : logiciels installés ?

    Je sais que le mieux est d’énumérer la section Uninstall de la base de registre et j’ai viens trouvé un script vbs la dessus, mais impossible de l’intégrer correctement.

    Un petit coup de main ne serait pas de refus 😉

    Merci et bonne continuation !

  • By ldap389, July 24, 2012 @ 11:21 am

    Je t’envoie le HTA modifié par mail, mais voici le principe pour rajouter un nouvel onglet.

    Après du édites la variable Name6 avec le code HTML généré avec tes informations.

    Les <> son remplacés par [] pour l’affichage du commentaire.

    –Avant la fin de la balise [SCRIPT LANGUAGE=”VBScript”][/SCRIPT] et end sub.
    Name6 = “[center][u][b]Inserer le code HTML désiré[/b][/u][/center][BR]”
    document.getElementById(“nimporte6″).innerHTML = Name6
    …………..
    — Dans la balise [script type=”text/javascript”] [/script]
    var panels = new Array(“”,”panel1″,”panel2″,”panel3″,”panel4″,”panel5″,”panel6″)
    …………
    –Dans le corps du HTA ie entre les balises [body bgcolor= “6495ed” onload=”vbscript:bios”] [/body]
    [span class=”tabs tabs0″ id=”tab6″ onclick=”panel(6)”]Softs[/span]
    ………..
    [div class=”panel” id=”panel6″ style=”display:none”]
    [hr color=”black”]
    [table border="0" width="100%"]
    [tr valign=”top”]
    [td]
    [span id = “nimporte6”][/span] [BR]

    [/td]
    [/tr]
    [/table]
    [/div]

Other Links to this Post

RSS feed for comments on this post. TrackBack URI

Leave a comment

*

WordPress Themes

Blossom Icon Set

Software Top Blogs