[VBS] Problème opérateur de comapraison

Fermé
Zwitter - 11 déc. 2007 à 11:36
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 - 12 déc. 2007 à 14:53
Bonjour,

Je suis en train de développer un petit script qui permet d'afficher dans un fichier le nom du poste son modèle et sa Ram pour les postes ayant moins de X mégaoctects sur le réseau.
Cependant, mon comparateur If ne fonctionne pas, dans tous les cas tous les postes son inscrit dans le fichier de résultat.

Voici mon Script :

Dim Fso, Fichier
Set Fso = CreateObject("Scripting.FileSystemObject")
Set rapor= fso.OpenTextFile("rapport.txt",2,True)
Fichier  = "c:\NomMachines_ram.txt"


If Fso.FileExists(Fichier) Then
  Const ForReading = 1
   Dim objTextStream, Contenu, strtmp, i
   Set objTextStream = Fso.OpenTextFile(Fichier, ForReading)
   ram=inputbox("Veuillez saisir une valeure en MO. Les postes ayant moins de cette valeure seront affichés.")
   Do While Not ObjTextStream.AtEndOfStream
      strtmp = split(ObjTextStream.ReadLine, vbLf)
      For i = 0 to Ubound(strtmp)
          Contenu = strtmp(i)
 		Set objWMIService = GetObject("winmgmts:\\" & Contenu & "\root\CIMV2")
   		Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystemProduct", "WQL", _
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)
   		Set colComputer = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
		
		For Each objComputer in colComputer 
			For Each objItem In colItems	
				temp=objComputer.TotalPhysicalMemory
				temp=temp/1024
				temp=temp/1024
				temp=temp+48 
				If (temp<ram) Then 
					rapor.WriteLine("Nom d'ordinateur: " & Contenu & vbCrLf & "Modèle de PC: " & objItem.Name )
					rapor.WriteLine("Total RAM: " & temp & " Mo" )	
					rapor.WriteBlankLines(2)
				End If 	
					
	     		next
		next
      Next
   Loop
   objTextStream.Close
   Set objTextStream = Nothing
End If
Set Fso  = Nothing 



Ici, le If (temp<ram) ne fonctionne pas, meme si mon script s'execute. Les valeurs de "RAM" et "TEMP" ont été vérifié par des echo et sont correct.

Merci de votre aide, et bonne journée.

4 réponses

phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
11 déc. 2007 à 14:08
essaies de convertir en long

If (CLng(temp) < CLng(ram)) Then
0
Merci beaucoup, le script fonctionne ;)

Bonne journée
0
Salut, c'est encore moi !

A l'execution du script une erreur survient : "le serveur distant n'existe pas ou n'est pas disponible :'GetObject'", pour la ligne Set objWMIService = GetObject("winmgmts:\\" & Contenu & "\root\CIMV2").

Pourtant les postes analysés sont allumés et bien pingué.

Merci de votre aide pour la résolution du problème
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
12 déc. 2007 à 14:53
ça parle du serveur pas des workstations (mais la partie seerveur tourne sur une workstation, mais ne te poses pas de question). primo
WMI est un service qui doit être activé dans les workstations. à vérifier.

https://docs.microsoft.com/en-us/previous-versions/tn-archive/bb684728(v=technet.10)?redirectedfrom=MSDN

là dedans on trouve :

Diagnosing WMI Connection Errors
In some cases, the connection errors returned by the GetObject method when connecting with moniker strings might not provide enough detail. Use the error codes provided by the SWbemLocator.ConnectServer method to get more detail on connection errors. When SWbemLocator.ConnectServer completes, the Err object may contain one of the error codes in the following table. Other Microsoft Distributed Component Object Model (DCOM) errors may also be reported, for example DCOM "access denied" errors.

à essayer pour avoir plus d'info si les services WMI sont démarré sur la ws
0