Jump to content

Ausgabe eines einzigen Elements Collection(Array) in WMI


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Guten Tag Zusammen,

 

Ich habe eine Frage zum Thema WMI Scripting mit VbSkript. Ich habe folgendes Problem, normalweise gibt man die Eigenschaften einer Klasse in WMI so aus:

 

dim strPC, strNetworkAdapter

 

strPC = MeinPC

 

set objWbemServices = GetObject("winmgmts:\\" & strPC & "\root\cimv2")

set objNetworkAdapter = objWbemServices.ExecQuery("Select * from Win32_NetworkAdapter where AdapterType = 'Ethernet 802.3'")

 

for each strNetworkAdapter in objNetworkAdapter

 

'Nur den Namen des Netzwerkadapters ausgeben ...

MsgBox strNetworkAdapter.Name

 

next

 

Nun möchte ich, aber nur eine Eigenschaft ausgeben und diese direkt in einer Variable speichern und das ohne den for each. Jemand eine Idee?

 

Danke im Voraus

Link zu diesem Kommentar

Hallo,

Anstelle des Sterns in der Query kannst du ein oder mehrere, durch komma getrennte, Properties eintragen. Das ist besonders bei Queries über Netzwerk sinnvoll

siehe die Tabelle in Microsoft Windows 2000 Scripting Guide - Retrieving Managed Resources Using WMI Query Language

 

Da das zurückgegebene Objekt eine Collection ist, wirst du um ein "foreach" nicht rumkommen.

 

cu

blub

Link zu diesem Kommentar

:( das hört sich, aber gar nicht gut an, den mein Problem ist das ich von einem Domain Controller aus, alle PC's in der Domain durchgehen muss und deren Port Geschwindigkeit messen soll, dann taucht nämlich ein Problem auf ... ich werde später ein backup von meiner notebook festplatte machen(mein Notebook ist kaputt) und den code dann hier posten und weiter auf's Problem eingehen.

Link zu diesem Kommentar

Hab es nun hinbekommen, mit dem folgenden Code kann man in einer Domäne von jedem Computer die Port Geschwindigkeit auslesen, soweit man Rechte hat.

 

Mh, die Formatierung scheint hier nicht richtig zu funktionieren ;(

Option Explicit
On Error Resume Next

Const strFilePath = "c:\"
Const strFileName = "PortSpeed.txt"

dim objSearchDomains, strDomain, strDomainList, arrDomainList(), iCount, strDomainInput, strDomainExist, objAnalyzeDomain
dim objFs, objFile, objWbemServices
dim colNetAdapterList, colNetAdapterSpeed
dim strPC
dim strAdapterName, strAdapterSpeed

iCount = 0
strDomainExist = false

set objSearchDomains = GetObject("WinNT:")

for each strDomain in objSearchDomains

  if iCount <= 0 then

   ReDim arrDomainList(iCount)
   arrDomainList(iCount) = strDomain.Name

  else

   ReDim Preserve arrDomainList(iCount)
   arrDomainList(iCount) = strDomain.Name

end if

  iCount = iCount + 1
  strDomainList = strDomainList & strDomain.Name & vbCr

next


if strDomainList <> "" then

  strDomainInput = InputBox("Bitte geben Sie die gewünschte Domain ein." & vbCr _
                          & "Gefundene Domains:" & vbCr & strDomainList, "Domain Eingeben")

  if strDomainInput <> "" then	

   for iCount=0 to uBound(arrDomainList)

	   if StrComp(arrDomainList(iCount), uCase(strDomainInput)) = 0 then

		   strDomainExist = true
		   exit for

		end if

	next

	if strDomainExist = true then

        set objAnalyzeDomain = GetObject("WinNT://" & strDomainInput)

      objAnalyzeDomain.Filter = array("Computer")

      set objFs = CreateObject("Scripting.FileSystemObject")
      set objFile = objFs.CreateTextFile(strFilePath & strFileName, true)

        for each strPC in objAnalyzeDomain

           set objWbemServices = GetObject("winmgmts:\\" & strPC.Name & "\root\cimv2")

           if Err.Number = 462 then

            objFile.WriteLine "PC: " & strPC.Name & " ||" & " NetController: " & "n/a" & " ||" & " PortSpeed: " & "n/a" & vbCr
            Err.Clear


           else

  				set colNetAdapterList = objWbemServices.ExecQuery("Select Name from Win32_NetworkAdapter where AdapterType = 'Ethernet 802.3'")

            for each strAdapterName in colNetAdapterList

               set colNetAdapterSpeed = objWbemServices.ExecQuery("Select CurrentBandwidth from Win32_PerfRawData_Tcpip_NetworkInterface where Name = '" & strAdapterName.Name & "'")

               for each strAdapterSpeed in colNetAdapterSpeed

  				      if strAdapterSpeed.CurrentBandwidth <> "" then

   		             objFile.WriteLine "PC: " & strPC.Name & " ||" & " NetController: " & strAdapterName.Name & " ||" & " PortSpeed: " & (strAdapterSpeed.CurrentBandwidth / 1000) / 1000 & " MBit/s" & vbCr

		          end if

			      exit for

	           next

            next


			end if

			objFile.WriteLine vbCr


        next

      objFile.close

      MsgBox "Die Daten wurden erfolgreich in die Datei " & strFilePath & strFileName & " geschrieben.", 0, "Schreiben erfolgreich" 

   else

        MsgBox "Diese Domain existiert nicht.", 0, "Fehler: Domain existiert nicht."

	end if

  else

     MsgBox "Es wurde keine Domain eingegeben.", 0, "Fehler: Keine Domain Eingabe"

  end if

else 

  MsgBox "Es konnte keine Domains gefunden werden.", 0, "Fehler: Kein Domains vorhanden"

end if 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...