johnsch
Goto Top

Hardware per WMI mit VB Script auslesen und in Textdatei schreiben

Hallo,
ich bin kein VB Script Freak aber mit cmd kann ich leider nicht das realisieren was ich brauche.
ich möchte per VB Script bestimmte Hardware und Angaben des Rechners auslesen und in eine Textdatei schreiben.
z. Bsp. BIOS serial Nummer, Grafikkarte, wieviel Arbeitsspeicher und welche RAM module, die Netzwerkkarten inklusive Bluetooth und die MAC Adressen.

Als Anregung habe ich mir das WMI Script von der PC Welt heruntergeladen, das war recht einfach gehalten.
Leider passt meine Denkweise nicht.


Mein VB Code funktioniert nicht so wie ich es mir vorstellen würde:

on error resume next
set wmi = GetObject("winmgmts:")

WScript.Echo wmi.ExecQuery('select * from win32_BIOS')

habe auch schon andere Möglichkeiten probiert:

on error resume next
set wmi = GetObject("winmgmts:")
erg = "select * from win32_BIOS"
set ergebnis = wmi.ExecQuery(erg)

WScript.Echo wmi.ExecQuery(ergebnis)

wo liegt mein Denkfehler?

und gleich noch ne Frage, wie kann ich die WMI Abfrage so anpassen das nicht alle Werte zum Query ausgegeben werden sonder nur bestimmte,
z. Bsp. beim BIOS nur die SerialNumber ?

Content-Key: 103502

Url: https://administrator.de/contentid/103502

Printed on: April 26, 2024 at 16:04 o'clock

Member: dog
dog Dec 07, 2008 at 22:15:06 (UTC)
Goto Top
' WMI Provider - SWbemServices  
Set wmi = GetObject("winmgmts:\\.\root\cimv2")  
'SWbemObjectSet  
set biosSet = wmi.ExecQuery("SELECT * FROM Win32_BIOS")  
'SWbemObject  
Set biosInfo = biosSet.ItemIndex(0)
' String  
Msgbox biosInfo.SerialNumber

Grüße

Max
Member: bastla
bastla Dec 07, 2008 at 22:24:17 (UTC)
Goto Top
Hallo johnsch und willkommen im Forum!

Das Ergebnis der Abfrage erhältst Du generell in Form einer Aufzählung.

Mit dem WMI Code Creator kannst Du ein entsprechendes Script erzeugen lassen - etwas gekürzt sähe das etwa so aus:
strComputer = "."   
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")   
Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_BIOS")   
For Each objItem in colItems 
    Wscript.Echo "SerialNumber: " & objItem.SerialNumber  
Next
Grüße
bastla
Member: johnsch
johnsch Dec 08, 2008 at 15:52:19 (UTC)
Goto Top
hallo, danke f. die antworten.
der tipp mit dem wmi code creator war sehr hilfreich.

so geht es:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)
For Each objItem in colItems
Wscript.Echo "SerialNumber: " & objItem.SerialNumber
Next

aber jetzt frag ich mich, muss man das mit einer For Each schleife auslesen oder kann man das Item SerialNumber nicht direkt ansprechen?

Und was bedeutet die 48 in
objWMIService.ExecQuery( _
"SELECT * FROM Win32_BIOS",,48)

gruss john
Member: bastla
bastla Dec 08, 2008 at 16:21:28 (UTC)
Goto Top
Hallo johnsch!

So geht es:
Freut mich, dass wir einigermaßen übereinstimmende Scripts erhalten haben (allerdings ist meines schöner formatiert face-wink) ...

muss man das mit einer For Each schleife auslesen oder kann man das Item SerialNumber nicht direkt ansprechen?
Ja face-wink
colItems(0).SerialNumber
scheitert bei mir mit "SWbemObjectSet: Allgemeiner Fehler" - warum, kann ich Dir leider (auch mit Hilfe von Accessing a Collection) nicht beantworten.

Und was bedeutet die 48 ...
http://msdn.microsoft.com/en-us/library/aa393866(VS.85).aspx

Grüße
bastla
Member: johnsch
johnsch Dec 08, 2008 at 16:41:04 (UTC)
Goto Top
hi, bin gerade am bastlen und wieder auf das nächste problem gestossen.

Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NetworkAdapter",,48)
For Each objItem in colItems
Wscript.Echo "Description: " & objItem.Description
Next

Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NetworkAdapter",,48)

For Each objItem in colItems
Wscript.Echo "MACAddress: " & objItem.MACAddress
Next

hiermit lasse ich mir die netzwerkkarten auflisten und dann die mac adressen.
wie bekomme ich die MAC adressen zu der dazugehörigen netzwerkkarte?
sonst hab ich nur eine liste mit netzwerkkarten, wobei hier auch die ganzen WAN Miniport und Virtual Machine Network Services Driver usw. mit aufgelistet werden. und darunter alle mac adressen, da man dann manuell der richtigen netzwerkkarte zuweisen müsste.

das wäre auch für andere angaben hilfreich, z. bsp. wenn man die festplatten mit der entsprechenden größe auflistet. so hat man immer 2 listen, die man dann verhackstücken muss.

gruss john
Member: bastla
bastla Dec 08, 2008, updated at Jul 24, 2012 at 07:01:03 (UTC)
Goto Top
Hallo johnsch!

Einfach alles in einer Schleife abhandeln (sind ja jeweils nur unterschiedliche Eigenschaften des gerade aktuellen Objektes):
For Each objItem in colItems
    Wscript.Echo "Description: " & objItem.Description  
    Wscript.Echo "MACAddress: " & objItem.MACAddress  
Next
Grüße
bastla
Member: johnsch
johnsch Dec 08, 2008 at 16:55:22 (UTC)
Goto Top
ja super, da hätte ich auch selber drauf kommen können.
danke
gruss john