Write Binary Value on vbscript

Hi
i need to write vb script that enter value in binary but i got error
(13, 1) Microsoft VBScript runtime error: Type mismatch

is there any way to to fix this problem


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"


Set wshShell = Nothing
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.

MurpheyApplication ConsultantCommented:
Hi David,

AFAIK you have to write it in Hex value:

Example for wb:WshShell.Regwrite "HKCU\New\Computer\MyKey", &H00123456, "REG_BINARY"

I assume this would be a stringvariable if you like to make it more flexible
0
aikimarkCommented:
If you need a binary array in the VBScript environment, you will need to use ADODB.Stream

I have stored 'binary' data in registries as a string of hex characters.
I have seen other instances where binary data was Base64 encoded and the encoded string was stored.
0
David RegevHomeAuthor Commented:
Hi aikimark

How do i use ADODB.Stream in my VB Script ?

Thx

David
0
The Ultimate Tool Kit for Technolgy Solution Provi

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 for valuable how-to assets including sample agreements, checklists, flowcharts, and more!

aikimarkCommented:
In my RTF conversion article (
http:A_14035-RichText-to-Text-conversion-fast-and-free.html ), I include this sample code for the VBScript developers.
Function StringToByteArray(parmString)
	Dim OStream
	Set oStream = CreateObject("ADODB.Stream")
	oStream.Open
	oStream.Type = 1		'=adTypeBinary
	oStream.WriteText parmString
	StringToByteArray = oStream.Read
End Function

Open in new window


MS ADODB.Stream reference:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675032(v=vs.85).aspx
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:
I'm sorry , I'm new in this this issue i don't under stand how can i mix the vb script  with this function

i want to use the computer name ( strComputer ) on the password section or the computer name ( strComputer & "_For"  ) also in password section with binary value

but istill got this error message

Thx
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"


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
0
aikimarkCommented:
Try this:
wshShell.RegWrite "HKCU\New\" & strComputer1 & "_For" & "\Test" & "\Password", StringToByteArray(strComputer & "_For") , "REG_BINARY"

Open in new window

0
David RegevHomeAuthor Commented:
Hi aikimark

now i got this error -  ADODB.Stream: Operation is not allowed in this context.
0
aikimarkCommented:
What statement and what was the error number?
0
David RegevHomeAuthor Commented:
Hi

thx for the response the error - Untitled.vbs(27, 2) ADODB.Stream: Operation is not allowed in this context.

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 & "_For" & "\Test" & "\Password", StringToByteArray(strComputer & "_For") , "REG_BINARY"
'wshShell.RegWrite "HKCU\New\" & strComputer1 & "\Test" & "\Password", strComputer , "REG_BINARY"
'wshShell.RegWrite "HKCU\New\" & strComputer1 & "_For" & "\Test" & "\Password", 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

Open in new window

0
aikimarkCommented:
Is the computer name more than four characters?

Although the error occurs in the function, maybe it should be viewed in the context of the RegWrite method.  According to MS, RegWrite has an 8 byte limit.

RegWrite will write at most one DWORD to a REG_BINARY value. Larger values are not supported with this method.
0
David RegevHomeAuthor Commented:
Hi aikimark
the computer name is more then 4 characters so i try to use other method that i find and still it doesn't work
 Const OverwriteIfExist = -1 
 Const FailIfExist      = 0 
 Const OpenAsASCII   =  0 
 Const OpenAsUnicode = -1 
 Const OpenAsDefault    = -2 


Set wshShell = CreateObject( "WScript.Shell" )
Set objNetwork = CreateObject("Wscript.Network")
Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oShell = CreateObject("Wscript.Shell") 
sTmpFile = oShell.ExpandEnvironmentStrings("%TEMP%") & "\Test.reg" 
Set fFile = oFSO.CreateTextFile(sTmpFile, OverwriteIfExist, OpenAsASCII) 
                                     
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 & "_For" & "\Test" & "\Password", StringToByteArray(strComputer & "_For"), "REG_BINARY"
'wshShell.RegWrite "HKCU\New\" & strComputer1 & "\Test" & "\Password", strComputer , "REG_BINARY"
'wshShell.RegWrite "HKCU\New\" & strComputer1 & "_For" & "\Test" & "\Password", strComputer & "_For" , "REG_BINARY"

 fFile.WriteLine "Windows Registry Editor Version 5.00" 
 fFile.WriteLine 
 fFile.WriteLine "[HKEY_CURRENT_USER\New\DUDURE_For\Test]"
 fFile.WriteLine """Password""=hex:" & strComputer 
 fFile.Close 
 ' Import the registry file 
 oShell.Run "regedit /s " & sTmpFile, 0, True 
oFSO.DeleteFile sTmpFile 

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

Open in new window

can you try this and see what wrong please and how should i fix it ?

David
0
aikimarkCommented:
Do you need to know how to convert a plain text string into a hex (string) encoding?
0
David RegevHomeAuthor Commented:
I need to use something that will work with my script
0
David RegevHomeAuthor Commented:
Hi
What the script need to do is
1 . Create the registry key
2 . Create password registry key with binary value and the binary value will be the computer name
0
aikimarkCommented:
please answer the question that I asked.
0
David RegevHomeAuthor Commented:
this is not  a solution to your problem
0
David RegevHomeAuthor Commented:
can you close this question  ?
0
David RegevHomeAuthor Commented:
I've requested that this question be deleted for the following reason:

test
0
David RegevHomeAuthor Commented:
I've requested that this question be deleted for the following reason:

i didnt got the write answer for this post please delete or close this case
0
MurpheyApplication ConsultantCommented:
aikimark give the right answer at least for 99%
0
aikimarkCommented:
According to Murphey2, I've answered 99% of the question, but I can't tell which of my comments should be accepted.  With the lack of participation and English skills of the OP, I think this question is abandoned/lost.
0
MurpheyApplication ConsultantCommented:
ID: 40345836
Was a good solution, if David can't implement it, it will not make the solution wrong.
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
Programming

From novice to tech pro — start learning today.