Getobject acces refusé WMI en vbscript

Bonjour,

Je recherche depuis pas mal de temps le moyen de faire fonctionner mon script, c'est un script qui scanne les postes d'un réseau et qui ping ainsi que récupère la résolution d'écran. J'ai un accès refusé sur le getobject.

J'ai essayer de faire l'impersonation mais ca ne fonctionne pas et étant novice dans le script, pouvez vous me donner des informations ? Merci

while Not f.AtEndOfStream
sPoste= f.readline
wscript.echo "lecture du poste :" & sPoste
'err.clear
set objWMIService = GetObject("winmgmts:\\"& sPoste &"\root\cimv2")
set objWMIService = GetObject("WinMgmts:{impersonationLevel=impersonate}!//"& sPoste &"/root/cimv2")
if err = 0 then
set objPing = objWMIService.ExecQuery("select * from Win32_PingStatus where address = '" & sPoste & "'")
For Each objStatus In objPing
r.Write "ping ok : " & sPoste & vbcrlf
set colItems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\").ExecQuery("Select * From Win32_DesktopMonitor where address = '" & sPoste & "'")
'set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
for each objItem in colItems

if objItem.ScreenWidth <> null then
wscript.echo "la valeur n'est pas nulle"
'On Error resume next
CurrentRecordSet.open "select Nom_Pos from POSTES where Nom_Pos = '" & sPoste & "' ;" ,oConn
if currentrecordset("Nom_Pos") = null then
wscript.echo "le nom du poste est :" & currentrecordset("Nom_Pos")
Valeur = currentrecordset("Nom_Pos")
CurrentRecordset.close

7 réponses

  1. while Not f.AtEndOfStream
    sPoste= f.readline
    wscript.echo "lecture du poste :" & sPoste
    'err.clear
    'set objWMIService = GetObject("winmgmts:\\"& sPoste &"\root\cimv2")
    set objWMIService = GetObject("WinMgmts:{impersonationLevel=impersonate}!//"& sPoste &"/root/cimv2")
    if err = 0 then
    set objPing = objWMIService.ExecQuery("select * from Win32_PingStatus where address = '" & sPoste & "'")
    For Each objStatus In objPing
    r.Write "ping ok : " & sPoste & vbcrlf
    set colItems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\").ExecQuery("Select * From Win32_DesktopMonitor where address = '" & sPoste & "'")
    'set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
    for each objItem in colItems
    if objItem.ScreenWidth <> null then
    wscript.echo "la valeur n'est pas nulle"
    'On Error resume next
    CurrentRecordSet.open "select Nom_Pos from POSTES where Nom_Pos = '" & sPoste & "' ;" ,oConn
    if currentrecordset("Nom_Pos") = null then
    wscript.echo "le nom du poste est :" & currentrecordset("Nom_Pos")
    Valeur = currentrecordset("Nom_Pos")
    CurrentRecordset.close
    0
    1. Bonjour,

      À première vue :

      set colItems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\").ExecQuery("Select * From Win32_DesktopMonitor where address = '" & sPoste & "'")

      devrait se lire comme suit :

      set colItems = objWMIService.GetObject("winmgmts:{impersonationLevel=impersonate}!\\").ExecQuery("Select * From Win32_DesktopMonitor where address = '" & sPoste & "'")

      voici l'exemple de l'un de mes scripts :

      Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & Ordinateur & "\root\cimv2")

      Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='Service'")

      Cdt

      Lupin
      0
      1. J'ai essayer et j'ai toujours l'erreur sur

        set objWMIService = GetObject("WinMgmts:{impersonationLevel=impersonate}!//"& sPoste &"/root/cimv2")

        Permission refusée
        0
        1. re :

          Observe bien, ta syntaxe est différente :

          La tienne :
          set objWMIService = GetObject("WinMgmts:{impersonationLevel=impersonate}!//"& sPoste &"/root/cimv2")

          La mienne :
          Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & sPoste & "\root\cimv2")

          tu peux aussi essayer de remplacer [ sPoste ] par [ . ] pour localhost

          gère les espaces dans la syntaxe.

          Cdt

          Lupin
          0
          1. Toujours la même erreur, je scanne un poste distant, ce n'est pas en local
            0
            1. J'ai écrit dans mon script, ton bout de (Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & Ordinateur & "\root\cimv2")

              Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='Service'") ) en remplaçant par les données qui vont bien et toujours la même erreur...
              0
              1. re:

                je ne comprends pas désolé !

                de mon côté ça fonctionne en local, mais je n'ai jamais testé à distance.

                Cdt

                Lupin
                0