Toon posts:

[VBScript] Probleem met declaratie variable

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi beste Tweakers,

Me eerste post hierzo (een keer moet de eerste keer zijn :) ) en ik zit met een probleem war ik niet echt uitkom.

Ik heb searches via google, google groups gebruikt en de tweakert search maar kom er niet echt uit. Ik ben net begonnen met VBScript (WSH) en zit een beetje vast, hiervoor met Batch files gewerkt maar als systeembeheerder ben ik niet zoeen codeschrijf guru en aangezien dit net me eerste stapjes in VBScript zijn ben ik nogal een behoorlijke Noob :D

Het probleem is het volgende ik ben bezig met een script te maken wat:

1) Script wat het de systeemspecificaties uitleest en naar een logbestand laat schrijven.

2) De volgende zaken uitleest: Processor, Harddisk, Memory, Computernaam, Werkgroep, Videokaart, Domein, Usernaam, Model en Manufacturer, Operating System, Netwerkmappings.

Nu lukt het al aardig met het spelen met de syntax, scriptomatic en codeschrijven en google maar kom er niet uit ik krijg namelijk de volgende foutmelding:

H:\Test Scripts\PCSpecsV3.vbs(91, 2) Microsoft VBScript runtime error: Object variable not set

En het gaat naar een verwijzing naar dit stukje code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Harddisk
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\harddisk.txt", True)
Set colItems = objWMIService.ExecQuery( "Select * from Win32_DiskDrive",,48)
For Each objItem in colItems
    MyFile.WriteLine("Harddisk(s)" & vbCrLf _
           & "    Manufacturer:            " _
           & objItem.Manufacturer & vbCrLf _
           & "    Model:                   " _
           & objItem.Model & vbCrLf _
           & "    Size:                    " _
           & Int( ( objItem.Size + 536870912 ) / 1073741824 ) _
           & " GB" & vbCrLf & vbCrLf)
    MyFile.Close
Next


Ik heb de variables wel gedeclareerd via Dim maar hij wil er toch niet aan wie kan me helpen?? Dit is trouwens de voledige code:

Kortom: wie van de guru's kan me een handje helpen, heb het idee dat ik behoorlijk ver ben en dat ik wat over het hoofd zie.

Alvast bedankt!!

Jeroen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Option Explicit

Dim objItem, colItems, strComputer, objWMIService
Dim coll, network, i
Dim fso, MyFile

' Processor
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\Processor.txt", True)
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",,48)
For Each objItem in colItems
    MyFile.WriteLine("Name: " & objItem.Name)
    MyFile.Close
Next

' Domein, Model en Manufacturer, Computernaam, Usernaam, Werkgroep
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\Domein Model en Manufacturer Computernaam Usernaam Werkgroep.txt", True)
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
For Each objItem in colItems
    MyFile.WriteLine("Domain: " & objItem.Domain & " " & "Manufacturer: " & objItem.Manufacturer)
    MyFile.WriteLine("Model: " & objItem.Model & " " & "Name: [" & objItem.Name)
    MyFile.WriteLine("UserName: " & objItem.UserName)
    MyFile.WriteLine("Workgroup: " & objItem.Workgroup)
    MyFile.Close
Next

' Operating System 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\Operating System.txt", True)
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
    MyFile.WriteLine("Caption: " & objItem.Caption & " " & "CSDVersion: " & objItem.CSDVersion)
    MyFile.Close
Next

' Videokaart
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\videokaart.txt", True)
Set colItems = objWMIService.ExecQuery("Select * from Win32_VideoController",,48)
For Each objItem in colItems
    MyFile.WriteLine("Name: " & objItem.Name)
    MyFile.Close
Next

' Netwerkmappings
Set Network = WScript.CreateObject("WScript.Network")
Set coll = Network.EnumNetworkDrives
For i = 0 To coll.Count - 1 Step 2
    WScript.Echo coll(i) & " = " & coll(i+1)
Next

' Memory
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\geheugen.txt", True)
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalMemoryConfiguration",,48)
For Each objItem in colItems
    MyFile.WriteLine("Memory" & vbCrLf _
           & "    Total Physical Memory:   " _
           & Int( ( objItem.TotalPhysicalMemory + 1023 ) / 1024 ) _
           & " MB" & vbCrLf & vbCrLf)
    MyFile.Close
Next

' Harddisk
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\harddisk.txt", True)
Set colItems = objWMIService.ExecQuery( "Select * from Win32_DiskDrive",,48)
For Each objItem in colItems
    MyFile.WriteLine("Harddisk(s)" & vbCrLf _
           & "    Manufacturer:            " _
           & objItem.Manufacturer & vbCrLf _
           & "    Model:                   " _
           & objItem.Model & vbCrLf _
           & "    Size:                    " _
           & Int( ( objItem.Size + 536870912 ) / 1073741824 ) _
           & " GB" & vbCrLf & vbCrLf)
    MyFile.Close
Next

WScript.Quit

[ Voor 22% gewijzigd door Verwijderd op 23-06-2004 15:06 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Welkom @ GoT! :)
Wat is nou regel 91? Zet ff [code] tags om je code heen, dat leest stukken prettiger. :)

Dat kan trouwens met het edit (Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif) knopje. :)

Zie ook de FAQ voor meer UBB codes die ondersteund worden. :P

[ Voor 59% gewijzigd door NMe op 23-06-2004 15:01 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Thnx! :)

Ok ff kijken hoor het gaat om dit stukje:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' Harddisk
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\harddisk.txt", True)
Set colItems = objWMIService.ExecQuery( "Select * from Win32_DiskDrive",,48)
For Each objItem in colItems
    MyFile.WriteLine("Harddisk(s)" & vbCrLf _
           & "    Manufacturer:            " _
           & objItem.Manufacturer & vbCrLf _
           & "    Model:                   " _
           & objItem.Model & vbCrLf _
           & "    Size:                    " _
           & Int( ( objItem.Size + 536870912 ) / 1073741824 ) _
           & " GB" & vbCrLf & vbCrLf)
    MyFile.Close
Next


En dit zijn de gedeclareerde variables:

code:
1
2
3
4
5
Option Explicit

Dim objItem, colItems, strComputer, objWMIService
Dim coll, network, i
Dim fso, MyFile


Regel 91 betreft dit stukje:

code:
1
MyFile.WriteLine("Harddisk(s)" & vbCrLf _ etc.


Ik hoop dat dit duidelijker is en dat de tags zo goed staan :P :D

[ Voor 55% gewijzigd door Verwijderd op 23-06-2004 15:06 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 23 juni 2004 @ 14:45:

Ik hoop dat dit duidelijker is en dat de tags zo goed staan :P :D
Nee dus :P

[plain]
code:
1
test
[/]

Geeft het volgende:

code:
1
test


Dus niet tussen [ ] haken ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
BtM909 schreef op 23 juni 2004 @ 14:51:
[...]

Nee dus :P

[plain]
code:
1
test
[/]

Geeft het volgende:

code:
1
test


Dus niet tussen [ ] haken ;)
Argh!! HAHAHAHA Sorry, zoals ik al zei = Welcome to Noob City ;) :D 8)7 |:(

Ik heb het ff aangepast.

[ Voor 5% gewijzigd door Verwijderd op 23-06-2004 15:08 ]


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

krijg je niet een foutmelding met de regel waar de fout is opgetreden?

Verwijderd

Als het goed is selecteert ie vanzelf de opdracht waar het fout is gegaan.
Na option explicit zie je in VB een horizontale lijn toch? Die lijn loop toch hopelijk wel onder de gedeclareerde variabelen en niet erboven? (t zou zo'n Kwalitatief Uitermate Teleurstellend foutje zijn)

[ Voor 64% gewijzigd door Verwijderd op 24-06-2004 11:45 ]


  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 27-04 16:49
Voor alle volledigheid; het volgende stukje geeft de fout dus:

code:
1
2
3
4
5
6
7
8
9
    MyFile.WriteLine("Harddisk(s)" & vbCrLf _
           & "    Manufacturer:            " _
           & objItem.Manufacturer & vbCrLf _
           & "    Model:                   " _
           & objItem.Model & vbCrLf _
           & "    Size:                    " _
           & Int( ( objItem.Size + 536870912 ) / 1073741824 ) _
           & " GB" & vbCrLf & vbCrLf)
    MyFile.Close

Twee opmerkingen hierover:
1. Stop het eerste even in een aparte string en doe dan een WriteLine
2. Volgens mij gaat dit stukje fout in het samenstellen van de string

Daarnaast kan het zijn dat je script (die als apart proces wordt uitgevoerd) geen rechten heeft om een bestand te maken/te wijzigen. Misschien dat je daar nog even naar moeten zoeken

Succes!

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

misschien kan die de size van de harddisk niet converteren naar Int, omdat je een float berekent? Moet je ff testen, ik heb al een tijdje niet meer met vbscript gewerkt....

Verwijderd

Topicstarter
Dank voor de reacties, ben ff op vakantie geweest en ben terug met een frisse blik als het ware, ik heb het stukje wat een errormelding geeft simpeler gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
' Harddisk
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\harddisk.txt", True)
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48)
For Each objItem in colItems
    MyFile.WriteLine("Name: " & objItem.Name & " " & "Size: " & objItem.Size)
    MyFile.Close
Next


Nog steed doet het niks en krijg ik wederom de volgende foutmelding:

code:
1
H:\Test Scripts\PCSpecsV3.vbs(91, 2) Microsoft VBScript runtime error: Object variable not set


Ik weet echt niet meer welke variable hij bedoelt :(

Verwijderd

Als je die MyFile.Close nu eens uit je For lus haalt en die buiten de for lus haalt... MyFile bestaat blijkbaar niet bij de tweede keer gok ik waardoor je niks meer kan schrijven naar de file....

Verwijderd

Topicstarter
Verwijderd schreef op 05 juli 2004 @ 11:09:
Als je die MyFile.Close nu eens uit je For lus haalt en die buiten de for lus haalt... MyFile bestaat blijkbaar niet bij de tweede keer gok ik waardoor je niks meer kan schrijven naar de file....
Lange tijd niet naar gekeken vanwege andere server probs, jouw suggestie geprobeerd en dat werkte!! THANX!! Alsnog ;) :D
Pagina: 1