Gå til innhold

WScript som bruker WMI


Anbefalte innlegg

Heisann

 

Jeg holder på med et script i WScript som henter ut Manufacture og Model fra en liste over maskinnavn.

 

Problemet er at når scriptet ikke får tak i en maskin, så gir den bare output'en fra forrige objitem.model. Dette blir veldig feil.

 

Hvordan kan jeg få scriptet til å gi ut blankt objitem.model felt dersom den ikke får tak i maskinen?

 

Her er koden jeg bruker:

On Error Resume Next
set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Add
intRow = 2

objExcel.Cells(1, 1).Value = "Maskinnavn"
objExcel.Cells(1, 2).Value = "Manufacturer"
objExcel.Cells(1, 3).Value = "Model"

set fso = CreateObject("Scripting.FileSystemObject")
set inputfile = fso.OpenTextFile("ting.txt")
do while not (InputFile.atEndOfStream)
strComputer = InputFile.ReadLine

set objWMIservice = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set colitems = objWMIservice.ExecQuery("Select * from Win32_ComputerSystem",,48)
For each objitem in colitems
objExcel.Cells(intRow, 1).Value = strComputer
objExcel.Cells(intRow, 2).Value = objitem.manufacturer
objExcel.Cells(intRow, 3).Value = objitem.Model
intRow = intRow + 1
Next

objExcel.Cells.EntireColumn.AutoFit
loop

Wscript.echo "Ål Dønn"

Lenke til kommentar
Videoannonse
Annonse

Ingen som vet? Jeg har prøvd å sette:

Set objitem.model = Nothing

Set objitem.model = ""

men ingen av dem hjalp noen ting.

 

Scriptet fungerer fint så lenge alle maskiner den søker gjennom står på. Når den kommer til en som ikke står på eller ikke får tilgang til, skriver den bare ut den forrige objitem.model, noe som kan være både feil og er irriterende.

 

Håper noen kan hjelpe!

Lenke til kommentar

Du bør kunne fikse det med for eksempel error-objektet. Her er et lite eksempel:

 

On Error Resume Next
comp = Array("dole","ole",".","doffen",".","hansen") 'manifacturer-liste
For i = 0 To UBound(comp) 
strcomputer =comp(i)
set objWMIservice = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
If err.number = 0 Then
set colitems = objWMIservice.ExecQuery("Select * from Win32_ComputerSystem",,48)
For each objitem in colitems
x =  x & objitem.manufacturer & vbcrlf
Next
MsgBox(x)
x=""
Else
err.clear
End If
Set colitems = nothing
Set objWMIservice = Nothing
Next

I manifacturer-listen er ole, dole og hansen ment som ugyldige maskinnavn mens "." er navnet på maskinen der scriptet kjøres. Merk deg at i listen er "." satt inn to ganger, men det er bare for demoens skyld. Kjør scriptet, og du får ditt manifacturer-navn ut to ganger i en msgbox. Tar du vekk den ene "." får du det ut bare en gang. Merk deg hvordan err.number og err.clear brukes i scriptet. Legg det så passende inn i ditt eget script.

Endret av backup
Lenke til kommentar

Jeg prøvde med denne koden nå, men det hjalp ingenting!

 

On Error Resume Next
set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Add
intRow = 2

objExcel.Cells(1, 1).Value = "Maskinnavn"
objExcel.Cells(1, 2).Value = "Manufacturer"
objExcel.Cells(1, 3).Value = "Model"

set fso = CreateObject("Scripting.FileSystemObject")
set inputfile = fso.OpenTextFile("ting.txt")
do while not (InputFile.atEndOfStream)
strComputer = InputFile.ReadLine

set objWMIservice = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
if err.number = 0 Then
set colitems = objWMIservice.ExecQuery("Select * from Win32_ComputerSystem",,48)
For each objitem in colitems
x = strComputer
y = objitem.manufacturer
z = objitem.model
objExcel.Cells(intRow, 1).Value = x
objExcel.Cells(intRow, 2).Value = y
objExcel.Cells(intRow, 3).Value = z
intRow = intRow + 1
Next

objExcel.Cells.EntireColumn.AutoFit
x = ""
y = ""
z = ""
Else
err.Clear
End If
loop

Wscript.echo "Ål Dønn"

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...