Solved

Calling An External VBScript Function/Routine With Return Parameters

Posted on 2009-07-05
9
1,494 Views
Last Modified: 2012-05-07
I want to run a VBScript function from another VBScript with parameters.  How is this done?

'C:\Script1.vbs
Dim MyVar
MyVar = Blah(1, 2, 3)

'C:\Scrip2.vbs
Function Blah(Num1, Num2, Num3)
  Blah = Num1 + Num2 + Num3
End Function


Mike
0
Comment
Question by:shacho
  • 4
  • 3
  • 2
9 Comments
 
LVL 5

Assisted Solution

by:Tompa99
Tompa99 earned 200 total points
ID: 24782828
Hi there

Using one main script Main.wsf like the one in the Code Snippet in this I do include one vbs script
Function.vbs with the following code:

private function GetComputerName()

      Dim objWshNetwork
      Set objWshNetwork = WScript.CreateObject("WScript.Network.1")
      GetComputerName = objWshNetwork.ComputerName
      
end function

Best Regards Tompa


<job id="[NameOfJob]">
	<!-- Add more lines or remove line below depending on how many subscripts you need-->
	<script language="VBScript" src="Functions.vbs">
 
Call Main
 
'************************** Main () ******************
Sub Main
Dim strComputerName
		strComputerName = GetComputerName()
		MsgBox strComputerName
End Sub
 
</script>
</job>

Open in new window

0
 
LVL 65

Accepted Solution

by:
RobSampson earned 300 total points
ID: 24783092
Hi, you can also try using the ExecuteGlobal method inside Script1.vbs to read in the code from Script2.vbs and then execute it's function.  Something like the below may work.

Regards,

Rob.
' First read in the Script2.vbs contents and use ExecuteGlobal to include it's code
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const intForReading = 1
strFunctionsFile = "Script2.vbs"
Set objFunctions = objFSO.OpenTextFile(strFunctionsFile, intForReading, False)
strFunctionsCode = objFunctions.ReadAll
objFunctions.Close
ExecuteGlobal strFunctionsCode
 
'Now call a function
strReturnCode = Blah(1, 2, 3)
MsgBox "Return code from included function is " & strReturnCode

Open in new window

0
 

Author Comment

by:shacho
ID: 24783134

Tompa - I don't see how you are specifying the path to the second script.
Rob - Interesting approach.

Mike
0
Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

 
LVL 65

Expert Comment

by:RobSampson
ID: 24783154
Tompa's reference to the second script is this bit:
src="Functions.vbs"

The file is a WSF file, as opposed to a VBS file, so you can save it as WSF and try it.

You can also try my approach, let me know if it works out.

Regards,

Rob.
0
 

Author Comment

by:shacho
ID: 24783530
Hmm.  I suppose that would work.  But is there really no way to call functions script to script (vbs only) with return values?
0
 
LVL 5

Expert Comment

by:Tompa99
ID: 24783859
Hi,

Not that I know. WSF or like Rob suggested are 2 solutions.

Best Regards Tompa
0
 
LVL 65

Assisted Solution

by:RobSampson
RobSampson earned 300 total points
ID: 24790646
No, there is no other way.  They do not work like include files on a web page.  I guess one more option, although a bit harder to use, is to use objShell.Run in script1.vbs, to run script2.vbs, while passing some arguments, then in script2.vbs, you read those command line arguments with
wscript.arguments(#)

Then, script2.vbs can return one numeric value with
wscript.quit(intNumber)

which is caught by the objShell.Run method of script1.vbs.  If you want to return text though, you'll have to have script2.vbs write to a file, then Script1.vbs will read that file once Script2.vbs is complete.

Regards,

Rob.
0
 

Author Comment

by:shacho
ID: 24902384
Rob - that's a pretty clever workaround.  Thanks all for your comments.

Mike
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 24910317
Great, thanks for the grade,

Regards,

Rob.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When it comes to writing scripts for a Client/Server computing environment it is essential to consider some way of enabling the authentication functionality within a script. This sort of consideration mainly comes into the picture when we are dealin…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

772 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