VBS Runtime error 800A000D - Type mismatch

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
David RegevHomeAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ChloesDadCommented:
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
David RegevHomeAuthor Commented:
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
ChloesDadCommented:
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
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

David RegevHomeAuthor Commented:
I'm sorry  , I'm new in this

where do i put this lines please ?

Thx
0
ChloesDadCommented:
in your function stringtobytearray, remove the code that you have there
0
David RegevHomeAuthor Commented:
Hi

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

David
0
ChloesDadCommented:
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
David RegevHomeAuthor Commented:
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
ChloesDadCommented:
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
RobSampsonCommented:
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
David RegevHomeAuthor Commented:
hi

how do you Recommend Re- phrase the question ?

Thx
0
RobSampsonCommented:
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
David RegevHomeAuthor Commented:
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
RobSampsonCommented:
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
David RegevHomeAuthor Commented:
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
RobSampsonCommented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
David RegevHomeAuthor Commented:
Works like a charm
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
VB Script

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.