Solved

Calling An External VBScript Function/Routine With Return Parameters

Posted on 2009-07-05
9
1,452 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
 
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
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 

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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Welcome to part one of a multi-part tutorial series, VBScript for Windows System Administrators.  The goal of this series is to teach non-programmers how to write useful VBS code to automate their environment, and perform tasks faster, and in a more…
Unlike scripting languages such as C# where a semi-colon is used to indicate the end of a command, Microsoft's VBScript language relies on line breaks to determine when a command begins and ends. As you can imagine, this quickly results in messy cod…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

747 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

8 Experts available now in Live!

Get 1:1 Help Now