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 :

Blocage For each


Sujet :

VBScript

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Blocage For each
    Bonjour,

    J'ai le script suivant (largement diffusé dans tous les exemples sur le net)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    strComputer = "TOTO"
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
    wscript.echo "Erreur=" & err
    For Each objItem in colItems
        Wscript.Echo "NumberOfProcessors: " & objItem.NumberOfProcessors
    Next
    Wscript.Echo "Fin"
    Ces lignes fonctionnent sur 90% de mes serveurs mais, sur certains, j'ai un blocage au niveau du "For Each" (par blocage, j'entends que le script ne rend pas la main).
    L'erreur est toujours 0 (donc après le ExecQuery) et si je mets le "For Each... Next" commentaire, je termine bien le script sur les serveurs où cela bloque.

    Ce n'est pas un problème d'accès aux serveurs car si je change la classe (par exemple, si je mets Win32_OperatingSystem) j’accède bien à la propriété Caption de Win32_OperatingSystem (par exemple) de tous mes serveurs (y compris ceux qui bloquent sur le "For Each" de la classe Win32_ComputerSystem)

    Voilà, j’espère avoir exposé clairement le phénomène. Maintenant, j'aimerais "contourner" en évitant de lancer le "For each" si je n'ai rien en retour de l'interrogation. J'ai essayé pas mal de choses mais je n'ai plus d'idée...

    Quelqu'un peut-il m'aider ?

    Merci

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    je suppose que dans une ligne précédente tu as bien
    et si tu insères entre la ligne 4 et 5 ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Wscript.Echo VarType(colItems)
    ça donne quoi ?
    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
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de ta réponse qui fait enfin bouger mon programme.
    Oui, j'ai le "On Error resume next" mais avec ou sans, c'est pareil.

    Par contre, la ligne Vartype a répondu : 9 (puis blocage après)

    Je ne sais pas ce que cela veut dire mais c'est la premièere fois que j'ai un résultat en utilisant colItems (colItems.count plante, un if avec colItems plante, etc)

    J'espère que 9 va te parler car je reprends espoir...

    Merci

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    En complément j'ai rajouté tous les tests que j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Vartype=9
    IsObject=True
    IsEmpty=False
    IsNull=False
    IsArray=False
    IsDate=False
    IsNumeric=False
    TypeName=SWbemObjectSet

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    et les serveurs bloquants ont des points communs non partagés avec les autres comme la version de l'os ?

    ce type de problème est souvent posé par une mauvaise config DCOM du serveur appelé

    je supprimerais aussi la gestion des erreurs et normalement la ligne 3 devrait afficher en clair le n° de l'erreur
    je testerais enfin avec une autre classe win32 simple comme Win32_Keyboard
    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

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Sur un serveur qui bloque, cela fonctionne très bien sur une autre classe
    Sinon, sur 2 serveurs identiques, l'un fonctionne, l'autre pas. D'un autre côté, que cela ne me renvois pas l'info ne me gène pas... Ce qui me gène c'est que le script reste bloqué et ne passe pas au suivant.
    Par contre, supprimer la gestion des erreurs, tu fais cela comment ?
    Si c'est mettre "On Error resume next" en commentaire, cela ne change rien au comportement

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    mettre "On Error resume next" en commentaire et toute référence à l'objet Err
    les serveurs récalcitrants acceptent-ils cette requête en local ?

    edit : et sinon, un outil de diag pour vérifier l'état du wmi sur chaque serveur
    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

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Avec ou sans gestion des erreurs, c'est le même problème.
    Sinon, je n'ai pas accès à ces serveurs (question de responsabilité)
    Donc, je ne peux pas corriger les problèmes distants.
    Tout ce que je peux faire c'est éviter que mon programme VB se bloque sur le for each.
    Pour l'instant l’exhaustivité de l'info n'a pas d'importance. Ce qui doit fonctionner c'est le principe de collecte même face à des cas de blocages à la

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    si tu n'as pas la main sur ces serveurs pour tester leur config wmi, alors c'est mort...
    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

  10. #10
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2011
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 163
    Points : 304
    Points
    304
    Par défaut
    Bonjour,
    C'est pas très propre mais ça devrait marcher comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    strComputer = "TOTO"
    On error resume next
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
    if err.number <> 0 then
    'Do Nothing
    Else
    On error goto 0
    End if
    wscript.echo "Erreur=" & err
    For Each objItem in colItems
        Wscript.Echo "NumberOfProcessors: " & objItem.NumberOfProcessors
    Next
    Wscript.Echo "Fin"

  11. #11
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2011
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 163
    Points : 304
    Points
    304
    Par défaut
    Rebonjour,

    J'ai un script .hta qui fait cela (et un peu plus) si ça t'intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    <title>CACHLAB - Informations sur un ordinateur distant - @DEVELOPPEZ.NET</title>
    <HTA:APPLICATION
    APPLICATIONNAME="Login Details"
    BORDER="thin"
    SCROLL="no"
    SINGLEINSTANCE="yes"
    WINDOWSTATE="normal"></head>
     
    <script language="VBScript">
     
    Public strComputer
    Dim WSHShell
     
    Sub Window_onLoad
    Me.ResizeTo 400,300
    Me.MoveTo ((Screen.Width / 2) - 200),((Screen.Height / 2) - 150)
    End Sub
     
    Sub Default_Buttons
    If Window.Event.KeyCode = 13 Then
    btn_logindetails.Click
    End If
    End Sub
     
    Sub Get_Login_Details
    strComputer = txt_computer.value
    if strComputer = "" Then
    msgbox "Nom de machine ou adresse IP invalide",vbOKOnly,"Réessayez !"
    Exit Sub
    End If
     
    If Ping(strComputer) = False Then
    msgbox "L'ordinateur " & strComputer & " ne répond pas.",vbOkOnly, "Ordinateur introuvable."
    Exit Sub
    End If
     
    On error resume next
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    if err.number <> 0 then MsgBox "Vérifier que vous disposez des droits d'admin !", VbOKOnly,"Erreur droits insuffisants" : Exit Sub
    On error goto 0
     
    Set colComputer = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
    Set colComputerIP = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration")
    Set colSystemInfo = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem",,48)
    Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
    Set colProc = objWMIService.ExecQuery("Select * from Win32_Processor")
    Set colBIOS = objWMIService.ExecQuery("Select * from Win32_BIOS")
     
    For Each objItem in colItems
    Marque = objItem.Manufacturer
    Next
     
    For Each objComputer in colComputer
    UsrNom = "Aucun"
    If Not IsNull(objComputer.UserName) Then UsrNom = objComputer.UserName
    strUserName = "Utilisateur : " & UsrNom
    strHostName = "Nom machine : " & objComputer.Name
    Model = Marque & " " & objComputer.Model
    Memoire = "Mémoire: " & ROUND (objComputer.TotalPhysicalMemory / 1024 / 1024 /1024) & " Go"
    NbrProc = objComputer.NumberOfProcessors
    Next
     
    For Each objProc in colProc
    Processeur = NbrProc & " " & objProc.Name & " à " & objProc.CurrentClockSpeed & " Mhz"
    Next
     
    For each objBIOS in colBIOS
    Serial = "N° série: " & objBIOS.SerialNumber
    Next
     
    For Each IPConfig in colComputerIP
    If Not IsNull(IPConfig.IPAddress) Then
    For intIPCount = LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
    strIPAddress = strIPAddress & "Adresse IP : " & IPConfig.IPAddress(intIPCount) & "~"
    mac = "Adresse Mac: " & IPConfig.MACAddress
    next
    end if
    Next
     
    If Right(strIPAddress, 1) = "~" Then
    strIPAddress = Left(strIPAddress, Len(strIPAddress) - 1)
    End If
    strIPAddress = Replace(strIPAddress, "~", vbCrLf)
     
    For Each objItem in colSystemInfo
    strOS_Caption = "Système : " & objItem.Caption
    strOS_SPVersion = "Version SP : " & objItem.CSDVersion
    strOS_VerNumber = "N° Version : " & objItem.Version
    Next
     
    Set WSHShell = CreateObject("WScript.Shell")
    MsgBox strHostName & vbcrlf & vbcrlf & strUserName & vbcrlf & strIPAddress & vbCrLf & mac & vbCrLf & vbCrLf & Model & vbCrLf & Processeur & vbCrLf & Memoire & vbcrlf & Serial & vbCrLf & vbcrlf & strOS_Caption & vbcrlf & strOS_SPVersion & vbcrlf & strOS_VerNumber & VbCrLf, vbOKOnly, "Informations"
    End Sub
     
    Function Ping(strComputer)
    Dim objShell, boolCode
    Set objShell = CreateObject("WScript.Shell")
    boolCode = objShell.Run("Ping -n 1 -w 300 " & strComputer, 0, True)
    If boolCode = 0 Then
    Ping = True
    Else
    Ping = False
    End If
    End Function
    </script>
     
    <body STYLE="font:14 pt arial; color:white;filter:progid:DXImageTransform.Microsoft.Gradient
    (GradientType=1, StartColorStr='#000033', EndColorStr='#0000FF')" onkeypress='vbs:Default_Buttons'>
    <table width='80%' height = '100%' align='center' border='0'><tr height='20%'><td></td></tr>
    <tr height='10%'><td align='center'>Nom machine ou adresse IP:</td></tr
    <tr height='20%'><td align='center'>
    <input type="text" value="" name="txt_computer" maxlength='15' size='16'>
    </td></tr><tr height='30%'><td align='center'>
    <input type="button" value="Lancer le test" name="btn_logindetails"  onClick="Get_Login_Details">
    </td></tr><tr height='20%'><td></td></tr></table></body>

  12. #12
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 165
    Points
    17 165
    Par défaut
    Salut(s)

    Pour essayer de faire avancer le chmilbic

    J'ai bien lut le poste 4 : TypeName=SWbemObjectSet
    Ce TypeName est il identique sur un server non bloquant d'un bloquant ?

    Ou encore, serrait il possible de vérifier cette condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If TypeName(objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)) <> "Nothing" Then
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)		
    	'boucler
    	Wscript.Echo "Fin"
    	Else
    	Wscript.Echo "Non disponible"
    End If
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Cachlab Voir le message
    Bonjour,
    C'est pas très propre mais ça devrait marcher comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    strComputer = "TOTO"
    On error resume next
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
    if err.number <> 0 then
    'Do Nothing
    Else
    On error goto 0
    End if
    wscript.echo "Erreur=" & err
    For Each objItem in colItems
        Wscript.Echo "NumberOfProcessors: " & objItem.NumberOfProcessors
    Next
    Wscript.Echo "Fin"
    nan ca marche pas... en fait, err.number est toujours 0... C'est le for each qui pose problème... pas la requête

    Merci de ton aide. Je vais jeter un œil à ton script hta dès fois que...

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Salut(s)

    Pour essayer de faire avancer le chmilbic

    J'ai bien lut le poste 4 : TypeName=SWbemObjectSet
    Ce TypeName est il identique sur un server non bloquant d'un bloquant ?

    Ou encore, serrait il possible de vérifier cette condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If TypeName(objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)) <> "Nothing" Then
    	Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)		
    	'boucler
    	Wscript.Echo "Fin"
    	Else
    	Wscript.Echo "Non disponible"
    End If
    Vivi c'est le même TypeName dans les deux cas... Donc forcément, le code ne fonctionne pas non plus (je l'ai quand même testé, on ne sait jamais...)

    Merci

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Pour info, pour l'instant je m'en sors avec une voiture balai...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim Computer, colItems, objItem, objWMIService
    Computer="."
     
    Set objWMIService = GetObject("winmgmts:\\" & Computer & "\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT Caption, CommandLine FROM Win32_Process WHERE Caption = 'cscript.exe' AND CommandLine like '%wmi%'", "WQL", 48)
     
    For Each objItem In colItems
    	objItem.Terminate()	
    Next
    En attendant mieux, cela pourra peut-être servir à quelqu'un

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Architecte de base de données
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Cachlab Voir le message
    Rebonjour,

    J'ai un script .hta qui fait cela (et un peu plus) si ça t'intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    <title>CACHLAB - Informations sur un ordinateur distant - @DEVELOPPEZ.NET</title>
    <HTA:APPLICATION
    APPLICATIONNAME="Login Details"
    BORDER="thin"
    SCROLL="no"
    SINGLEINSTANCE="yes"
    WINDOWSTATE="normal"></head>
     
    <script language="VBScript">
     
    Public strComputer
    Dim WSHShell
     
    Sub Window_onLoad
    Me.ResizeTo 400,300
    Me.MoveTo ((Screen.Width / 2) - 200),((Screen.Height / 2) - 150)
    End Sub
     
    Sub Default_Buttons
    If Window.Event.KeyCode = 13 Then
    btn_logindetails.Click
    End If
    End Sub
     
    Sub Get_Login_Details
    strComputer = txt_computer.value
    if strComputer = "" Then
    msgbox "Nom de machine ou adresse IP invalide",vbOKOnly,"Réessayez !"
    Exit Sub
    End If
     
    If Ping(strComputer) = False Then
    msgbox "L'ordinateur " & strComputer & " ne répond pas.",vbOkOnly, "Ordinateur introuvable."
    Exit Sub
    End If
     
    On error resume next
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    if err.number <> 0 then MsgBox "Vérifier que vous disposez des droits d'admin !", VbOKOnly,"Erreur droits insuffisants" : Exit Sub
    On error goto 0
     
    Set colComputer = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
    Set colComputerIP = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration")
    Set colSystemInfo = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem",,48)
    Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
    Set colProc = objWMIService.ExecQuery("Select * from Win32_Processor")
    Set colBIOS = objWMIService.ExecQuery("Select * from Win32_BIOS")
     
    For Each objItem in colItems
    Marque = objItem.Manufacturer
    Next
     
    For Each objComputer in colComputer
    UsrNom = "Aucun"
    If Not IsNull(objComputer.UserName) Then UsrNom = objComputer.UserName
    strUserName = "Utilisateur : " & UsrNom
    strHostName = "Nom machine : " & objComputer.Name
    Model = Marque & " " & objComputer.Model
    Memoire = "Mémoire: " & ROUND (objComputer.TotalPhysicalMemory / 1024 / 1024 /1024) & " Go"
    NbrProc = objComputer.NumberOfProcessors
    Next
     
    For Each objProc in colProc
    Processeur = NbrProc & " " & objProc.Name & " à " & objProc.CurrentClockSpeed & " Mhz"
    Next
     
    For each objBIOS in colBIOS
    Serial = "N° série: " & objBIOS.SerialNumber
    Next
     
    For Each IPConfig in colComputerIP
    If Not IsNull(IPConfig.IPAddress) Then
    For intIPCount = LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
    strIPAddress = strIPAddress & "Adresse IP : " & IPConfig.IPAddress(intIPCount) & "~"
    mac = "Adresse Mac: " & IPConfig.MACAddress
    next
    end if
    Next
     
    If Right(strIPAddress, 1) = "~" Then
    strIPAddress = Left(strIPAddress, Len(strIPAddress) - 1)
    End If
    strIPAddress = Replace(strIPAddress, "~", vbCrLf)
     
    For Each objItem in colSystemInfo
    strOS_Caption = "Système : " & objItem.Caption
    strOS_SPVersion = "Version SP : " & objItem.CSDVersion
    strOS_VerNumber = "N° Version : " & objItem.Version
    Next
     
    Set WSHShell = CreateObject("WScript.Shell")
    MsgBox strHostName & vbcrlf & vbcrlf & strUserName & vbcrlf & strIPAddress & vbCrLf & mac & vbCrLf & vbCrLf & Model & vbCrLf & Processeur & vbCrLf & Memoire & vbcrlf & Serial & vbCrLf & vbcrlf & strOS_Caption & vbcrlf & strOS_SPVersion & vbcrlf & strOS_VerNumber & VbCrLf, vbOKOnly, "Informations"
    End Sub
     
    Function Ping(strComputer)
    Dim objShell, boolCode
    Set objShell = CreateObject("WScript.Shell")
    boolCode = objShell.Run("Ping -n 1 -w 300 " & strComputer, 0, True)
    If boolCode = 0 Then
    Ping = True
    Else
    Ping = False
    End If
    End Function
    </script>
     
    <body STYLE="font:14 pt arial; color:white;filter:progid:DXImageTransform.Microsoft.Gradient
    (GradientType=1, StartColorStr='#000033', EndColorStr='#0000FF')" onkeypress='vbs:Default_Buttons'>
    <table width='80%' height = '100%' align='center' border='0'><tr height='20%'><td></td></tr>
    <tr height='10%'><td align='center'>Nom machine ou adresse IP:</td></tr
    <tr height='20%'><td align='center'>
    <input type="text" value="" name="txt_computer" maxlength='15' size='16'>
    </td></tr><tr height='30%'><td align='center'>
    <input type="button" value="Lancer le test" name="btn_logindetails"  onClick="Get_Login_Details">
    </td></tr><tr height='20%'><td></td></tr></table></body>
    J'ai utilisé ce script hta... Il va mettre utile...
    Par contre, il a exactement le même comportement
    J'ai 2 serveurs : même OS+SP, même proc, même ferme etc
    Un marche l'autre pas
    Si je mets les lignes 53 à 61 en commentaire (donc le for each sur la classe Win32_ComputerSystem ) les 2 fonctionnent...

  17. #17
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2011
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2011
    Messages : 163
    Points : 304
    Points
    304
    Par défaut
    Bonjour,
    Etrange en effet ...
    Tu as vérifié que la config WMI est identique sur les 2 serveurs ?
    http://www.poweradmin.com/help/enablewmi.aspx

Discussions similaires

  1. xsl:for-each avec un parametre pour select
    Par arnog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/08/2008, 13h09
  2. fonction for each key .......
    Par trialrofr dans le forum ASP
    Réponses: 13
    Dernier message: 10/01/2005, 14h29
  3. apply-templates et for-each
    Par d'Oursse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/05/2004, 08h38
  4. utilisation de for each
    Par billoum dans le forum ASP
    Réponses: 5
    Dernier message: 19/03/2004, 15h30
  5. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56

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