VBScript foutcodes, voorbeeldscripts en uitleg
- Introductie
- VBScript syntax foutcodes en voorbeeldscripts
- VBScript runtime foutcodes en voorbeeldscripts
- WMI-foutcodes en voorbeeldscripts
- Voorbeelden van foute scripts
- Links
Introductie
Reeksen van foutcodes
Er zijn de volgende soorten foutcodes:
- 1-999: run-time fouten;
- 1000-1099: syntax fouten;
- 5000-5100: run-time fouten;
- 0x8xxxxxxx: WMI- en ADSI-fouten.
Deze zijn verder onder te verdelen in:
- 0x80040xxx: Fouten die uit DCOM voortkomen.
De DCOM-configuratie voor operaties op een remote computer zou bv. incorrect kunnen zijn. - 0x800410xx - 0x800440xx: Fouten die uit WMI zelf voortkomen.
Dat kan komen door een fout in het verzoek, bv. een WQL-query die faalt of een account dat niet voldoende rechten heeft, of door een probleem met de WMI infrastructuur, zoals een incorrecte DCOM-registratie. - 0x80005xxx: Fouten die uit ADSI
of LDAP voortkomen.
Op deze pagina vind je informatie over ADSI, LDAP en andere foutcodes. - 0x8007xxxx: Fouten die uit het operating system zelf voortkomen.
Dat zou door een externe fout kunnen komen, bv. een DCOM-veiligheidsprobleem.
- 0x80040xxx: Fouten die uit DCOM voortkomen.
Bron van de fout
Hoe weet je met wat voor soort fout je te maken hebt?
Vaak staat de bron van de fout in de eigenschap (property)
Err.Source
, bv.:
Microsoft VBScript runtime error
Met WMI-fouten is de waarde van Err.Source
soms leeg.
Dat kan je verhelpen door de manier van aanroepen.
De 1e methode (die een lege string oplevert) is de volgende constructie:
strComputer = "fictional"
Set objWMIService = GetObject("winmgmts:\\" & strComputer)
De 2e methode levert wel waardevolle informatie op:
strComputer = "localhost"
strPrinter = "TestPrinter"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objPrinter = objWMIService.Get("Win32_Printer.Name='" & strPrinter & "'")
Er van uitgaande dat de printer niet bestaat, krijg je nu de volgende waarde
in Err.Source
:
SWbemServicesEx
De clou in de 2e methode is dus dat je eerst verbinding maakt met de WMI service, en dan pas met de printer.
Toelichting op de tabellen
Omdat de betekenis niet altijd even verhelderend is, staan in onderstaande tabellen voor een aantal foutcodes stukjes voorbeeldscript die zo'n code tot gevolg hebben, met enige uitleg erbij.
Standaard zijn de tabellen gesorteerd op foutcode, tenzij je JavaScript hebt uitgeschakeld in je browser.
VBScript syntax foutcodes en voorbeeldscripts
Deze foutcodes + uitleg vindt je o.a. op deze pagina.
Code (dec) | Code (hex) | Script(gedeelte) | Beschrijving |
---|
VBScript runtime foutcodes en voorbeeldscripts
Deze foutcodes + uitleg vindt je o.a. op deze pagina.
Code (dec) |
Code (hex) |
Script(gedeelte) | Beschrijving |
---|---|---|---|
462 | 0x1CE |
strComputer = "fictional"
Set objWMIService = GetObject("winmgmts:\\" & strComputer)
|
De foutmelding betekent "The remote server machine does not exist or is
unavailable" Je probeert verbinding te maken met een computer die niet bestaat of niet beschikbaar is. |
WMI-foutcodes en voorbeeldscripts
Op deze pagina kan je een lijst van WMI-foutcodes vinden, en hun betekenis.
Foutcode | Script(gedeelte) | Beschrijving |
---|---|---|
0x80041002 |
strComputer = "."
strService = "Alerte"
Set objWMIService = &_
GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objService = &_
objWMIService.Get("Win32_Service.Name='" & strService & "'")
|
De foutmelding betekent "Not found."
(WBEM_E_NOT_FOUND ) De naam van de service is onjuist (het moet Alerter )
zijn.
|
0x80041008 |
On Error Resume Next
strComputer = "." 'Change to non-existent host to create binding error.
Const HKLM = &H80000002
'Connect to WMI and StdRegProv class.
Set objReg = GetObject("winmgmts:\\" & strComputer & _
"\root\default:StdRegProv")
'Get string value from entry and check for error.
intRet = objReg.GetStringValue(HKLM, strSubKeyName, strEntryName, strValue)
|
De foutmelding betekent "Invalid parameter."
(WBEM_E_INVALID_PARAMETER ) Dat klopt wel, want doordat 2 van de parameters van GetStringValue niet gedefiniëerd zijn,
vraag je de waarde op van de registersleutel HKLM\\
|
0x80041010 |
strComputer = "."
Set oReg=GetObject("winmgmts:\\" &_
strComputer & "\root\cimV2:StdRegProv")
|
De foutmelding betekent "Specified class is not valid."
(WBEM_E_INVALID_CLASS ) \root\cimV2:StdRegProv is blijkbaar een class,
maar het had moeten zijn \root\default:StdRegProv
|
0x80041021 |
' strComputer = "."
GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
|
De foutmelding betekent "Query is syntactically not valid."
(WBEM_E_INVALID_SYNTAX )Dat klopt, want ik heb van de 1e regel commentaar gemaakt, waardoor in de 2e regel de variabele strComputer niet
gedefiniëerd is.
|
0x8004103A |
strPrinter = "TestPrinter"
Set objPrinter = GetObject _
("winmgmts:root\cimv2:Win32_Printer.Name='" & strPrinter & "'")
|
De foutmelding betekent "Specified object path was not valid."
(WBEM_E_INVALID_OBJECT_PATH ) De printer in het script bestaat niet of is niet beschikbaar. |
Voorbeelden van foute scripts
In deze sectie ga ik allerlei fouten opnemen waar ik zelf tegenaan gelopen ben (want als het mij gebeurt zal het ongetwijfeld ook anderen overkomen).
Foutcode 0x8000500
Ik kreeg deze foutcode bij het volgende script, waarmee ik wilde bepalen of een gebruiker administrator was:
myUser = "Henk"
Set objGroup = GetObject("WinNT://" & strComputer & "/ Administrators")
For Each objUser in objGroup.Members
If objUser.Name = myUser Then
WScript.Echo myUser & " is a local administrator"
End If
Next
De foutcode treedt op in regel 2, het 1e teken, en lijkt volgens
deze pagina
het volgende te betekenen:
An invalid ADSI pathname was passed.
En als je even goed kijkt naar regel 2, dan is de fout natuurlijk heel
duidelijk: ik gebruik de variabele strComputer
,
die ik nergens heb gedefinieerd.
Het kan dus wel kloppen dat de padnaam (het ding wat ik als parameter aan
GetObject
meegeef) niet klopt.
Links
Reageer via E-mail (dalmolen@xs4all.nl)
Deze pagina is voor het laatst gewijzigd op: 12-02-23 13:28:55