Solved

VBS Runtime error 800A000D - Type mismatch

Posted on 2014-09-27
17
480 Views
Last Modified: 2014-09-29
Set wshShell = CreateObject( "WScript.Shell" )
Set objNetwork = CreateObject("Wscript.Network")
strComputer = LCase (objNetwork.ComputerName)
strComputer1 = objNetwork.ComputerName

wshShell.RegWrite "HKCU\New\",""
wshShell.RegWrite "HKCU\New\" & strComputer1 & "\",""
wshShell.RegWrite "HKCU\New\" & strComputer1 & "_For" &  "\",""

wshShell.RegWrite "HKCU\New\" & strComputer1 & "\Test\",""
wshShell.RegWrite "HKCU\New\" & strComputer1 & "_For" &  "\Test\",""

wshShell.RegWrite "HKCU\New\" & strComputer1 & "\Test" & "\Password", strComputer , "REG_BINARY"
wshShell.RegWrite "HKCU\New\" & strComputer1 & "_For" & "\Test" & "\Password", strComputer & "_For" , "REG_BINARY"

But when I run i get this error "VBS Runtime error 800A000D - Type mismatch" on line 13


i try to replace this line to :

'wshShell.RegWrite "HKCU\New\" & strComputer1 & "_For" & "\Test" & "\Password", StringToByteArray(strComputer & "_For"), "REG_BINARY"

with this function
Function StringToByteArray(parmString)
      Dim OStream
      Set OStream = CreateObject("ADODB.Stream")
      oStream.Open
      oStream.Type = 1            '=adTypeBinary
      oStream.WriteText parmString
      StringToByteArray = oStream.Read
End Function
But when I run i get this error "VBS Runtime error 800A0C93 - Operation is not allowed in this context"

Any know why is not working or what is needed to change to make work?
Thank you
0
Comment
Question by:David Regev
  • 8
  • 5
  • 4
17 Comments
 
LVL 15

Expert Comment

by:ChloesDad
Comment Utility
I note that you have used 2 variables, strComputer1 and strComputer, but you are trying to write a binary value, which should be an integer.

What is the value of strComputer as it looks like its a string not an integer. If it is a string then why do you need to force it to be an integer in the registry?
0
 

Author Comment

by:David Regev
Comment Utility
Hi

i fix the vbs

the purpose  of the vbs is to create key (password) with binary value of the computer name

but now i got this error - (23, 2) ADODB.Stream: Operation is not allowed in this context.

is there any way to fix this problem

Set wshShell = CreateObject( "WScript.Shell" )
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName

wshShell.RegWrite "HKCU\New\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "\",""
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "\Test\",""
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\Test\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer)) , "REG_BINARY"
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer & "_For")), "REG_BINARY"


Set wshShell = Nothing

Function StringToByteArray(parmString)
      Dim OStream
      Set OStream = CreateObject("ADODB.Stream")
      oStream.Open
      oStream.Type = 1            '=adTypeBinary
      oStream.WriteText parmString
      StringToByteArray = oStream.Read
End Function

Thx
0
 
LVL 15

Expert Comment

by:ChloesDad
Comment Utility
To create the byte array, use this

iAddressLength = len(parmString)
Dim ByteArray(iAddressLength-1)

For x = 1 to iAddressLength
      ByteArray(x-1) = Asc(Mid(parmString, x ,1))
Next
0
 

Author Comment

by:David Regev
Comment Utility
I'm sorry  , I'm new in this

where do i put this lines please ?

Thx
0
 
LVL 15

Expert Comment

by:ChloesDad
Comment Utility
in your function stringtobytearray, remove the code that you have there
0
 

Author Comment

by:David Regev
Comment Utility
Hi

Can you copy paste this line to the code please ??

David
0
 
LVL 15

Expert Comment

by:ChloesDad
Comment Utility
Function StringToByteArray(parmString)
iAddressLength = len(parmString)
 Dim ByteArray(iAddressLength-1)

 For x = 1 to iAddressLength
       ByteArray(x-1) = Asc(Mid(parmString, x ,1))
 Next
 StringToByteArray=ByteArray
 End Function
0
 

Author Comment

by:David Regev
Comment Utility
Hi

Set wshShell = CreateObject( "WScript.Shell" )
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName

wshShell.RegWrite "HKCU\New\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "\",""
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "\Test\",""
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\Test\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer)) , "REG_BINARY"
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer & "_For")), "REG_BINARY"

Set wshShell = Nothing

Function StringToByteArray(parmString)
iAddressLength = len(parmString)
 Dim ByteArray(iAddressLength-1)

 For x = 1 To iAddressLength
       ByteArray(x-1) = Asc(Mid(parmString, x ,1))
 Next
 StringToByteArray=ByteArray
 End Function

now i got this error  - 21, 16) Microsoft VBScript compilation error: Expected integer constant

Thx
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 15

Expert Comment

by:ChloesDad
Comment Utility
OK, it seems that RegWrite cannot accept a byte array, just an integer when you use REG_Binary as a parameter. This is beyond my knowledge as its a different issue to the original question.
0
 
LVL 65

Expert Comment

by:RobSampson
Comment Utility
I believe if you are trying to declare a variable (in this case ByteArray) as an array, but use a variable value, you will get this error.  To get around this, you should be able to use ReDim instead.
Change
  Dim ByteArray(iAddressLength-1)
to
  ReDim ByteArray(iAddressLength-1)

Regards,

Rob.
0
 

Author Comment

by:David Regev
Comment Utility
hi

how do you Recommend Re- phrase the question ?

Thx
0
 
LVL 65

Expert Comment

by:RobSampson
Comment Utility
I don't think you need to rephrase it.  You were originally dealing with a binary value, and still are, so I think it's appropriate.

Rob.
0
 

Author Comment

by:David Regev
Comment Utility
Hi Rob

i try to replace this to what you suggest

but now i got this error : (13, 1) Microsoft VBScript runtime error: Type mismatch , 800A000D

Set wshShell = CreateObject( "WScript.Shell" )
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName

wshShell.RegWrite "HKCU\New\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "\",""
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "\Test\",""
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\Test\",""

wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer)) , "REG_BINARY"
wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer & "_For")), "REG_BINARY"

Set wshShell = Nothing

Function StringToByteArray(parmString)
iAddressLength = len(parmString)
ReDim ByteArray(iAddressLength-1)

 For x = 1 To iAddressLength
       ByteArray(x-1) = Asc(Mid(parmString, x ,1))
 Next
 StringToByteArray=ByteArray
 End Function


Thx
0
 
LVL 65

Expert Comment

by:RobSampson
Comment Utility
Oh, I just remembered, RegWrite does not support writing to Binary values:
http://msdn.microsoft.com/en-us/library/yfdfhz1b(v=vs.84).aspx

You need to use the SetBinaryValue method:
http://msdn.microsoft.com/en-us/library/aa393286(v=vs.85).aspx

So with your byte array, try this:
Set wshShell = CreateObject( "WScript.Shell" )
 Set objNetwork = CreateObject("Wscript.Network")
 strComputer = objNetwork.ComputerName

Const HKEY_CURRENT_USER = &H80000001
Set objRegistry = GetObject("Winmgmts:root\default:StdRegProv")

 wshShell.RegWrite "HKCU\New\",""

 wshShell.RegWrite "HKCU\New\" & strComputer & "\",""
 wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\",""

 wshShell.RegWrite "HKCU\New\" & strComputer & "\Test\",""
 wshShell.RegWrite "HKCU\New\" & strComputer & "_For" &  "\Test\",""

 'wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer)) , "REG_BINARY"
 'wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer & "_For")), "REG_BINARY"
intReturn = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, "New\" & strComputer & "_For\Test\Password", "", StringToByteArray (LCase (strComputer & "_For")))

 Set wshShell = Nothing

 Function StringToByteArray(parmString)
 iAddressLength = len(parmString)
 ReDim ByteArray(iAddressLength-1)

  For x = 1 To iAddressLength
        ByteArray(x-1) = Asc(Mid(parmString, x ,1))
  Next 
  StringToByteArray=ByteArray
  End Function

Open in new window

0
 

Author Comment

by:David Regev
Comment Utility
Hi Rob

now i don't get any error on the script but no value is written to registry

i attach the registry file .
0
 
LVL 65

Accepted Solution

by:
RobSampson earned 500 total points
Comment Utility
Try this.  I was trying to write to the default value in the Password key, but instead it looks you want to write the Password value in the Test key.

Regards,

Rob.

Set wshShell = CreateObject( "WScript.Shell" )
 Set objNetwork = CreateObject("Wscript.Network")
 strComputer = objNetwork.ComputerName

Const HKEY_CURRENT_USER = &H80000001
Set objRegistry = GetObject("Winmgmts:root\default:StdRegProv")

 wshShell.RegWrite "HKCU\New\",""

 wshShell.RegWrite "HKCU\New\" & strComputer & "\", ""
 wshShell.RegWrite "HKCU\New\" & strComputer & "_For\", ""

 wshShell.RegWrite "HKCU\New\" & strComputer & "\Test\", ""
 wshShell.RegWrite "HKCU\New\" & strComputer & "_For\Test\", ""

 'wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer)) , "REG_BINARY"
 'wshShell.RegWrite "HKCU\New\" & strComputer & "_For" & "\Test" & "\Password", StringToByteArray (LCase (strComputer & "_For")), "REG_BINARY"
intReturn = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, "New\" & strComputer & "\Test\", "Password", StringToByteArray (LCase (strComputer)))
intReturn = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, "New\" & strComputer & "_For\Test\", "Password", StringToByteArray (LCase (strComputer & "_For")))

 Set wshShell = Nothing

 Function StringToByteArray(parmString)
 iAddressLength = len(parmString)
 ReDim ByteArray(iAddressLength-1)

  For x = 1 To iAddressLength
        ByteArray(x-1) = Asc(Mid(parmString, x ,1))
  Next 
  StringToByteArray=ByteArray
  End Function

Open in new window

0
 

Author Comment

by:David Regev
Comment Utility
Works like a charm
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Suggested Solutions

Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now