Execution de requette WMI sur clients XP avec FW, contexte d'execution de WMI ...
1 réponse
Denis
Salut à tous, et meilleurs voeux pour ceux que je n'ais pas "vu" ;-)
Voici 2 problèmes métaphysiques qui me posent soucis, en rapport avec la
fonction décrite ci-après.
Cette fonction me permet de récupérer quantité de RAM, quantité de disques
durs, type/vitesse CPU, et enfin système d'exploitation: tout ceci est
enregistré dans une base access et permet de vérifier les infos relatives à
toutes les configurations stockées cette la base.
1er PB: lorsque je lance ce script sur un client XP SP2 avec le FireWall
activé, ben y'a pas moyen de récupérer les infos! Si je désactive le FW,
tout se,passe correctement...
Auriez vous une idée du ou des ports utilisé par WMI pour laisser passer
ce genre de requettes ?
2eme PB : ce genre de requette pourra etre lancé par des utilisateurs lambda
de mon domaine: y'a t'il moyen de spécifier un compte qui permettrait "à
coup sure" de récupérer les infos sans etre bloquer par les droits ?
Par avance merci énormément !
Denis.
##################################################################################
'fonction : Scan physique d'une machine
'##################################################################################
Function ScanMachine(lib_uc, str_ram, str_hd, str_cpu, str_os)
On Error Resume Next
Dim MessageErr, objItem, strmessage
Dim objWMIService, colItems
Dim Int_cnt, M, C, D, U
Set objWMIService = GetObject("winmgmts://" & lib_uc & "/root/cimv2")
' recup des infos Mémoire
Set colItems = objWMIService.ExecQuery("Select * from
Win32_LogicalMemoryConfiguration", , 48)
For Each objItem In colItems
str_ram = Int(CDbl(objItem.TotalPhysicalMemory) / 1024)
Next
' recup des infos CPU
Int_cnt = 0
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",
, 48)
For Each objItem In colItems
Int_cnt = Int_cnt + 1
If Int_cnt = 1 Then
str_cpu =
Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name,
"Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""),
"Mobile", ""), " - M ", ""))
' cas particulier des Celerons
If InStr(str_cpu, "Celeron") Then
If InStr(str_cpu, "GHz") Then
Else
M = CLng(objItem.MaxClockSpeed) \ 1000
C = (objItem.MaxClockSpeed - M * 1000) \ 100
str_cpu = str_cpu & " " & M & "." & C & "0GHz"
End If
End If
' cas particulier des Pentium II et III
If InStr(str_cpu, "Pentium II") Then
If InStr(str_cpu, "GHz") Then
Else
M = CLng(objItem.MaxClockSpeed) \ 1000
C = (objItem.MaxClockSpeed - M * 1000) \ 100
D = (objItem.MaxClockSpeed - M * 1000 - C * 100) \ 10
U = (objItem.MaxClockSpeed - M * 1000 - C * 100 - D *
10)
If M = "0" Then
str_cpu = str_cpu & " " & " " & C & D & U & "MHz"
Else
str_cpu = str_cpu & " " & M & C & D & U & "MHz"
End If
End If
End If
Else
str_cpu = "Bi - " &
Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name,
"Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""),
"Mobile", ""), " - M ", ""))
End If
Next
' recup des infos OS
Set colItems = objWMIService.ExecQuery("Select * from
Win32_OperatingSystem", , 48)
For Each objItem In colItems
str_os = Replace(Replace(Trim(objItem.Caption), "Microsoft", ""),
"fessionnel", " ") & Replace(Replace(objItem.CSDVersion, "ervice ", ""),
"ack ", "")
Next
' recup des infos HDD
Int_cnt = 0
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive",
, 48)
For Each objItem In colItems
If objItem.InterfaceType = "IDE" Or objItem.InterfaceType = "SCSI"
Then
Int_cnt = Int_cnt + 1
If Int_cnt = 1 Then
str_hd = str_hd & Int(CDbl(objItem.Size) / 1000000000)
Else
str_hd = str_hd & " + " & Int(CDbl(objItem.Size) /
1000000000)
End If
End If
Next
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Denis
Apres avoir "galéré" quelques temps, voici ce que j'ai trouvé:
1er PB: lorsque je lance ce script sur un client XP SP2 avec le FireWall activé, ben y'a pas moyen de récupérer les infos! Si je désactive le FW, tout se,passe correctement... Il faut dans les propriétés du FW activer "Administration a distance " pour
que WMI puisse fonctionner .... Seul bémol, c'est qu'avec AD sous W2K3, les stratégies ne permettent pas encore d'activer cette option dans un domaine ...
2eme PB : ce genre de requette pourra etre lancé par des utilisateurs lambda de mon domaine: y'a t'il moyen de spécifier un compte qui permettrait "à coup sure" de récupérer les infos sans etre bloquer par les droits ?
Voici la solution trouvée: dim ur, mp ur = "Username" mp = "Password"
Set objwbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objConnection = objwbemLocator.ConnectServer(Texte307, "rootcimv2", ur, mp) Set colItems = objConnection.ExecQuery("Select * from Win32_LogicalMemoryConfiguration", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each objItem In colItems texte_mem = Int(CDbl(objItem.TotalPhysicalMemory) / 1024) Next .................................... .................................... .................................... .................................... Set objConnection = Nothing Set objwbemLocator = Nothing
################################################################################## 'fonction : Scan physique d'une machine '##################################################################################
Function ScanMachine(lib_uc, str_ram, str_hd, str_cpu, str_os) On Error Resume Next Dim MessageErr, objItem, strmessage Dim objWMIService, colItems Dim Int_cnt, M, C, D, U
Set objWMIService = GetObject("winmgmts://" & lib_uc & "/root/cimv2")
' recup des infos Mémoire Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalMemoryConfiguration", , 48) For Each objItem In colItems str_ram = Int(CDbl(objItem.TotalPhysicalMemory) / 1024) Next
' recup des infos CPU Int_cnt = 0 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor", , 48) For Each objItem In colItems Int_cnt = Int_cnt + 1 If Int_cnt = 1 Then str_cpu = Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name, "Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""), "Mobile", ""), " - M ", ""))
' cas particulier des Celerons If InStr(str_cpu, "Celeron") Then If InStr(str_cpu, "GHz") Then Else M = CLng(objItem.MaxClockSpeed) 1000 C = (objItem.MaxClockSpeed - M * 1000) 100 str_cpu = str_cpu & " " & M & "." & C & "0GHz" End If End If
' cas particulier des Pentium II et III If InStr(str_cpu, "Pentium II") Then If InStr(str_cpu, "GHz") Then Else M = CLng(objItem.MaxClockSpeed) 1000 C = (objItem.MaxClockSpeed - M * 1000) 100 D = (objItem.MaxClockSpeed - M * 1000 - C * 100) 10 U = (objItem.MaxClockSpeed - M * 1000 - C * 100 - D * 10) If M = "0" Then str_cpu = str_cpu & " " & " " & C & D & U & "MHz" Else str_cpu = str_cpu & " " & M & C & D & U & "MHz" End If End If End If Else str_cpu = "Bi - " & Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name, "Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""), "Mobile", ""), " - M ", "")) End If Next
' recup des infos OS Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem", , 48) For Each objItem In colItems str_os = Replace(Replace(Trim(objItem.Caption), "Microsoft", ""), "fessionnel", " ") & Replace(Replace(objItem.CSDVersion, "ervice ", ""), "ack ", "") Next
' recup des infos HDD Int_cnt = 0 Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", , 48) For Each objItem In colItems If objItem.InterfaceType = "IDE" Or objItem.InterfaceType = "SCSI" Then Int_cnt = Int_cnt + 1 If Int_cnt = 1 Then str_hd = str_hd & Int(CDbl(objItem.Size) / 1000000000) Else str_hd = str_hd & " + " & Int(CDbl(objItem.Size) / 1000000000) End If End If Next
End Function
Apres avoir "galéré" quelques temps, voici ce que j'ai trouvé:
1er PB: lorsque je lance ce script sur un client XP SP2 avec le FireWall
activé, ben y'a pas moyen de récupérer les infos! Si je désactive le FW,
tout se,passe correctement...
Il faut dans les propriétés du FW activer "Administration a distance " pour
que WMI puisse fonctionner ....
Seul bémol, c'est qu'avec AD sous W2K3, les stratégies ne permettent pas
encore d'activer cette option dans un domaine ...
2eme PB : ce genre de requette pourra etre lancé par des utilisateurs
lambda de mon domaine: y'a t'il moyen de spécifier un compte qui
permettrait "à coup sure" de récupérer les infos sans etre bloquer par les
droits ?
Voici la solution trouvée:
dim ur, mp
ur = "Username"
mp = "Password"
Set objwbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objConnection = objwbemLocator.ConnectServer(Texte307,
"rootcimv2", ur, mp)
Set colItems = objConnection.ExecQuery("Select *
from Win32_LogicalMemoryConfiguration", "WQL", wbemFlagReturnImmediately +
wbemFlagForwardOnly)
For Each objItem In colItems
texte_mem =
Int(CDbl(objItem.TotalPhysicalMemory) / 1024)
Next
....................................
....................................
....................................
....................................
Set objConnection = Nothing
Set objwbemLocator = Nothing
##################################################################################
'fonction : Scan physique d'une machine
'##################################################################################
Function ScanMachine(lib_uc, str_ram, str_hd, str_cpu, str_os)
On Error Resume Next
Dim MessageErr, objItem, strmessage
Dim objWMIService, colItems
Dim Int_cnt, M, C, D, U
Set objWMIService = GetObject("winmgmts://" & lib_uc & "/root/cimv2")
' recup des infos Mémoire
Set colItems = objWMIService.ExecQuery("Select * from
Win32_LogicalMemoryConfiguration", , 48)
For Each objItem In colItems
str_ram = Int(CDbl(objItem.TotalPhysicalMemory) / 1024)
Next
' recup des infos CPU
Int_cnt = 0
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",
, 48)
For Each objItem In colItems
Int_cnt = Int_cnt + 1
If Int_cnt = 1 Then
str_cpu =
Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name,
"Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""),
"Mobile", ""), " - M ", ""))
' cas particulier des Celerons
If InStr(str_cpu, "Celeron") Then
If InStr(str_cpu, "GHz") Then
Else
M = CLng(objItem.MaxClockSpeed) 1000
C = (objItem.MaxClockSpeed - M * 1000) 100
str_cpu = str_cpu & " " & M & "." & C & "0GHz"
End If
End If
' cas particulier des Pentium II et III
If InStr(str_cpu, "Pentium II") Then
If InStr(str_cpu, "GHz") Then
Else
M = CLng(objItem.MaxClockSpeed) 1000
C = (objItem.MaxClockSpeed - M * 1000) 100
D = (objItem.MaxClockSpeed - M * 1000 - C * 100) 10
U = (objItem.MaxClockSpeed - M * 1000 - C * 100 - D *
10)
If M = "0" Then
str_cpu = str_cpu & " " & " " & C & D & U & "MHz"
Else
str_cpu = str_cpu & " " & M & C & D & U & "MHz"
End If
End If
End If
Else
str_cpu = "Bi - " &
Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name,
"Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""),
"Mobile", ""), " - M ", ""))
End If
Next
' recup des infos OS
Set colItems = objWMIService.ExecQuery("Select * from
Win32_OperatingSystem", , 48)
For Each objItem In colItems
str_os = Replace(Replace(Trim(objItem.Caption), "Microsoft", ""),
"fessionnel", " ") & Replace(Replace(objItem.CSDVersion, "ervice ", ""),
"ack ", "")
Next
' recup des infos HDD
Int_cnt = 0
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive",
, 48)
For Each objItem In colItems
If objItem.InterfaceType = "IDE" Or objItem.InterfaceType = "SCSI"
Then
Int_cnt = Int_cnt + 1
If Int_cnt = 1 Then
str_hd = str_hd & Int(CDbl(objItem.Size) / 1000000000)
Else
str_hd = str_hd & " + " & Int(CDbl(objItem.Size) /
1000000000)
End If
End If
Next
Apres avoir "galéré" quelques temps, voici ce que j'ai trouvé:
1er PB: lorsque je lance ce script sur un client XP SP2 avec le FireWall activé, ben y'a pas moyen de récupérer les infos! Si je désactive le FW, tout se,passe correctement... Il faut dans les propriétés du FW activer "Administration a distance " pour
que WMI puisse fonctionner .... Seul bémol, c'est qu'avec AD sous W2K3, les stratégies ne permettent pas encore d'activer cette option dans un domaine ...
2eme PB : ce genre de requette pourra etre lancé par des utilisateurs lambda de mon domaine: y'a t'il moyen de spécifier un compte qui permettrait "à coup sure" de récupérer les infos sans etre bloquer par les droits ?
Voici la solution trouvée: dim ur, mp ur = "Username" mp = "Password"
Set objwbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objConnection = objwbemLocator.ConnectServer(Texte307, "rootcimv2", ur, mp) Set colItems = objConnection.ExecQuery("Select * from Win32_LogicalMemoryConfiguration", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each objItem In colItems texte_mem = Int(CDbl(objItem.TotalPhysicalMemory) / 1024) Next .................................... .................................... .................................... .................................... Set objConnection = Nothing Set objwbemLocator = Nothing
################################################################################## 'fonction : Scan physique d'une machine '##################################################################################
Function ScanMachine(lib_uc, str_ram, str_hd, str_cpu, str_os) On Error Resume Next Dim MessageErr, objItem, strmessage Dim objWMIService, colItems Dim Int_cnt, M, C, D, U
Set objWMIService = GetObject("winmgmts://" & lib_uc & "/root/cimv2")
' recup des infos Mémoire Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalMemoryConfiguration", , 48) For Each objItem In colItems str_ram = Int(CDbl(objItem.TotalPhysicalMemory) / 1024) Next
' recup des infos CPU Int_cnt = 0 Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor", , 48) For Each objItem In colItems Int_cnt = Int_cnt + 1 If Int_cnt = 1 Then str_cpu = Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name, "Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""), "Mobile", ""), " - M ", ""))
' cas particulier des Celerons If InStr(str_cpu, "Celeron") Then If InStr(str_cpu, "GHz") Then Else M = CLng(objItem.MaxClockSpeed) 1000 C = (objItem.MaxClockSpeed - M * 1000) 100 str_cpu = str_cpu & " " & M & "." & C & "0GHz" End If End If
' cas particulier des Pentium II et III If InStr(str_cpu, "Pentium II") Then If InStr(str_cpu, "GHz") Then Else M = CLng(objItem.MaxClockSpeed) 1000 C = (objItem.MaxClockSpeed - M * 1000) 100 D = (objItem.MaxClockSpeed - M * 1000 - C * 100) 10 U = (objItem.MaxClockSpeed - M * 1000 - C * 100 - D * 10) If M = "0" Then str_cpu = str_cpu & " " & " " & C & D & U & "MHz" Else str_cpu = str_cpu & " " & M & C & D & U & "MHz" End If End If End If Else str_cpu = "Bi - " & Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(objItem.Name, "Intel", ""), "(R)", ""), "CPU", ""), "(TM)", ""), "Processeur", ""), "Mobile", ""), " - M ", "")) End If Next
' recup des infos OS Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem", , 48) For Each objItem In colItems str_os = Replace(Replace(Trim(objItem.Caption), "Microsoft", ""), "fessionnel", " ") & Replace(Replace(objItem.CSDVersion, "ervice ", ""), "ack ", "") Next
' recup des infos HDD Int_cnt = 0 Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", , 48) For Each objItem In colItems If objItem.InterfaceType = "IDE" Or objItem.InterfaceType = "SCSI" Then Int_cnt = Int_cnt + 1 If Int_cnt = 1 Then str_hd = str_hd & Int(CDbl(objItem.Size) / 1000000000) Else str_hd = str_hd & " + " & Int(CDbl(objItem.Size) / 1000000000) End If End If Next