Pass parameters in VBScript
#1
Posted 16 July 2009 - 02:31 PM
First thanks for all the help in the past.
A little background I have an image that I deploy out to a company that they are wanting to switch to end user installs. Becasue of that I need to hide the cd key and the admin password. What I thought is to dynamically build a script that the boot.wim would create a VBS file that would set the CD key and password parameters\variables. What I want to do is then pass them to my script that builds the sysprep.inf file dynamically.
So my question is how do I set values in a vbs and then call that vbs to pass parameters?
The first part is easy I believe:
ProdID = "1234-5678-abcd-efgh-ijkl"
AdminPassWord = "Password"
Except when I call this from my other script the values don't get set.
objWShell.Run "x:\settingVariables.vbs",0, True
'MsgBox ProdID' is blank
So what am I doing wrong?
Thanks for your help,
Randy
#2
Posted 16 July 2009 - 02:50 PM
WshShell.Run "temp.vbs Text1 Text2 Text3", 1, True
Params containing white spaces
WshShell.Run "temp.vbs ""Mon Text 1"" ""Mon Text 2"" ""Mon Text 3""", 1, True
Named params:
WshShell.Run "temp.vbs /paramA:Text1 /paramB:Text2 /paramC:Text3", 1, True
Collect parameters aka arguments:
If only one:
Arg = WScript.Arguments(0)
If sevral:
Set Args = Wscript.Arguments For Each a in Args Arg=a Next
Taking named arguments
Set NamedArgs = Wscript.Arguments.Named
A = NamedArgs("ParamA")
B = NamedArgs("ParamB")
C = NamedArgs("ParamC")
Taking named and unamed arguments:
Set NamedArgs = Wscript.Arguments.Named
Set UnNamedArgs = Wscript.Arguments.Unnamed
A = NamedArgs("ParamA")
B = NamedArgs("ParamB")
C = NamedArgs("ParamC")
MyVar0 = UnNamedArgs(0)
MyVar1 = UnNamedArgs(1)
MyVar2 = UnNamedArgs(2)
#3
Posted 16 July 2009 - 04:41 PM
Plus I'm not sure about the temp.vbs is this creating it or is it already created? It's kind of confusing to a noobe...
#4
Posted 17 July 2009 - 08:00 AM
The code to capture the parameter in hta is the following:
Here "testcmdl" is also an example, you can name the way you want, just without white space.
"testcmdl.commandLine" will return the entire command line used to launch the hta (including the param), so you will have to crop the text from the command line that you need.
<HEAD> <HTA:APPLICATION ID="testcmdl"> <script LANGUAGE="VBScript"> Sub window_onLoad() MyParam = testcmdl.commandLine End Sub </SCRIPT> </HEAD>
#5
Posted 17 July 2009 - 09:24 AM
you are saying
Sub window_onLoad()
MyParam = z:\MYvbScript.vbs.commanline
End Sub
I get 'Error: Expected Statement'
Here is what I'm trying to do, I have a vbScript that sets the parameter:
Dim ProdID, AdminPassword
ProdID = "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
AdminPassword = "Password"
This is saved as settingvariables.vbs ... very simple. I have that file in my boot structure under the BOOT.WIM file.
What I need to do is some how call that file and the parameters be usable in my HTA file.
I have tried
Sub window_onLoad()
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run("x:\settingvariables.vbs"),0,True
End Sub
MsgBox ProdID
But the paramters do not get passed and are blank.
Thanks again for your help,
Randy
#6
Posted 17 July 2009 - 10:52 AM
1:\ You have a vbs file that looks like this
Quote
Dim ProdID, AdminPassword ProdID = "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" AdminPassword = "Password"
I am going assume this
2:\ That you want the hta to get the ID and PW from the hta, then try this
Quote
<HTA:APPLICATION ID='Install_MS'
Scroll='No'
SCROLLFLAT ='No'
SingleInstance='Yes'
SysMenu='Yes'
MaximizeButton='No'
MinimizeButton='Yes'
Border='Thin'
BORDERSTYLE ='complex'
INNERBORDER ='Yes'
Caption='Yes'
WindowState='Normal'
APPLICATIONNAME='InstallMS'
Icon='%SystemRoot%\explorer.exe'>
<STYLE Type='text/css'>
Body
{
Font-Size:9.95pt;
Font-Weight:Bold;
Font-Family:segoeui,helvetica,verdana,arial;
Color:#001142;
BackGround-Color:Transparent;
Filter:progid:DXImageTransform.Microsoft.Gradient
(StartColorStr='#ece6e0',EndColorStr='#c0bab4');
Margin-Top:2;
Margin-Bottom:2;
Margin-Left:2;
Margin-Right:2;
Padding-Top:2;
Padding-Bottom:2;
Padding-Left:2;
Padding-Right:2;
Text-Align:Left;
Vertical-Align:Top;
Border-Top:2px Solid #cbc7c3;
Border-Bottom:3px Solid #a6a29e;
Border-Left:2px Solid #bcb8b4;
Border-Right:3px Solid #b2aeaa;
}
</STYLE>
<script Language="VBScript">
Dim Act :Set Act = CreateObject("Wscript.Shell")
Dim Fso :Set Fso = CreateObject("Scripting.FileSystemObject")
Dim Vbs :Vbs = Act.CurrentDirectory & "\MYvbScript.vbs"
window.resizeTo 475,271
Function Window_onLoad()
CheckForFile()
End Function
Function CheckForFile()
If Fso.FileExists(Vbs) Then
Txt1.innerHTML = "Confirm"
Dim Ts, Z1, Z2
Set Ts = Fso.OpenTextFile(vbs,1)
Do Until Ts.AtEndOfStream
Z1 = Ts.Readline
If Instr(Z1,"ProdID =") Or Instr(Z1,"AdminPassword =") Then
Z2 = Z2 & Z1 & "<BR>"
End If
Loop
Txt1.innerHTML = "Confirm : " & Vbs & "<BR>" & Z2
Else
Txt1.innerHTML = "Missing"
End If
End Function
</SCRIPT>
<BODY>
<TABLE Align='Left'><DIV ID='Txt1'> </DIV></TABLE>
</BODY>
#7
Posted 17 July 2009 - 10:58 AM
I figured it out...
Instead of creating the vbScript file I just needed to create a text file and read the lines on it into variables/arguments.
Const ForReading = 1
Set Fso = CreateObject("Scripting.FileSystemObject")
Set objFile = FSO.OpenTextFile("x:\settingVariables.txt", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
Execute strLine
Loop
objFile.Close
MsgBox ProdID
MsgBox AdminPassWord
Contents of the settingVariables.txt:
ProdID = "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
AdminPassWord = "Password"
You can now use it to hide important things like the CD ket and admin password inside your boot structure. I hope this helps someone besides me out...
Thanks again guys...
#8
Posted 17 July 2009 - 03:48 PM
Instead of a loop you can type:
Execute ObjFile.ReadAll
Be careful to respect vbs syntax in the text file.
#9
Posted 22 July 2009 - 07:54 AM
Place this above any other <script> tags:
<script Language=vbscript src="./yourfile.vbs"></script>
yourfile.vbs will have these line contained within:
Dim ProdID, AdminPassword ProdID = "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" AdminPassword = "Password"
That's it.
#10
Posted 23 July 2009 - 03:15 PM
I don't know if you can add a second script in vbscript inside the hta if you do that.
#11
Posted 23 July 2009 - 05:11 PM
I have several .hta's that I do this with. I have common script files that contain frequently used functions and subroutines. If I edit any of these common script files, my .hta's automatically have the update included. I find it very useful. Give it a try.
Here is my actual include statements for one of my HTA's:
<script Language=javascript src="./js/variables.js"></script> <script Language=javascript src="./js/functions.js"></script> <script language=javascript> window.onbeforeunload=preUnload; </script> <script Language=vbscript src="./vbs/objects.vbs"></script> <script Language=vbscript src="./vbs/constants.vbs"></script> <script Language=vbscript src="./vbs/subroutines.vbs"></script> <script Language=vbscript src="./vbs/functions.vbs"></script>
#12
Posted 02 August 2009 - 07:11 AM
I seldom use the same functions from one script to another but it's useful to know.
What does this mean:
window.onbeforeunload=preUnload;
?
#13
Posted 03 August 2009 - 10:43 PM
Fredledingue, on Aug 2 2009, 09:11 AM, said:
- ← COM Library for VB6 with VB2005 Express
- Programming (C++, Delphi, VB/VBS, CMD/batch, etc.)
- how to glean a line from an xml doc →



Help

Back to top










