所以我经常使用VBScript,并且我有几个调用相同功能的脚本。目前,每个脚本都在底部复制了该功能,但是当我必须更新时,这是一个痛苦,因为我必须更新几个文件(我通常会忘记一些)。有没有办法我可以:
1。让“TestScript1”调用“TestScript2”
2。让“TestScirpt2”从“TestScript1”中获取一个参数(即一个特定的日期变量)
3。让“TestScript2”运行其功能,并将3个不同的参数传递回“TestScript1”
如果我能以某种方式完成所有这些工作并使其适用于与“TestScript2”交互的多个脚本,那么我将获得奖励。
答案 0 :(得分:0)
我在一些脚本中使用objShell.Exec
执行此操作。基本上我有一个以我想要的函数命名的脚本,我从另一个脚本调用它。
在“父脚本”中,我有一个名为runExternal
的函数:
Function runExternal(strScript,strComputer)
'strScript is the name of the script/function I'm calling
Set objExec = objShell.Exec("cmd.exe /c cscript.exe """ & strPath & strScript & ".vbs"" " & strComputer)
intDelay = Timer+5
intTimer = Timer
While objExec.Status = 0 And intTimer <= intDelay
intTimer = Timer
Wend
If objExec.Status = 1 Then
strReturn = objExec.StdErr.ReadAll
writeLog strScript & " returned " & strReturn
Else
objExec.Terminate 'terminate script if it times out
writeLog strScript & " timed/errored out and was terminated."
End If
End function
然后在每个“子”脚本中,我接受通过使用的传递给它的参数:
strComputer = WScript.Arguments(0)
然后输出我这样写:
WScript.StdErr.Write "whatever the output is"
答案 1 :(得分:0)
您是否考虑过使用HTA?如果要加载和组合多个脚本文件,这是一个如何使用HTA的示例:
<html>
<head>
<title>Demo IT</title>
<HTA:APPLICATION
ID="objShowMe"
APPLICATIONNAME="HTAShowMe"
SCROLL="yes"
SINGLEINSTANCE="yes"
WINDOWSTATE="maximize"
>
<SCRIPT Language="VBScript" src="testscript2.vbs"/>
<SCRIPT Language="VBScript">
Sub TakeOff
text = "1 2 3"
argArray = GiveMeThree(text)
msgbox argArray(0)
msgbox argArray(1)
msgbox argArray(2)
End Sub
</SCRIPT>
</head>
<body>
<h1>In the body</h1>
<input type="button" value="Click me!" onclick="TakeOff">
</body>
</html>
在testscript2.vbs
Public Function GiveMeThree(x)
GiveMeThree = split(x, " ")
End Function
答案 2 :(得分:0)
我认为最好的方法是创建一个Windows Script Component。这将把您的脚本公开为一个完全出炉的COM对象,您可以从任何地方调用它 - VBScript或任何其他支持COM的编程语言。
这是一些示例代码。这是一个扩展名为.wcs的文件。
<?XML version="1.0"?>
<?component error="false" debug="false"?>
<component id="SVInfo">
<registration
progid="Tmdean.ScriptFunctions"
description="Description of your COM object"
version="1.5"
clsid="{3267711E-8359-4BD1-84A6-xxxxxxxxxxxx}"/>
<!-- generate your own GUID to use in the line above -->
<public>
<method name="MyMethod"/>
</public>
<script language="VBScript">
<![CDATA[
Function MyMethod(param1, param2)
MyMethod = param1 + param2
End Function
]]>
</script>
</component>
使用以下命令将此文件注册到COM。
regsvr32 scrobj.dll /n /i:file://J:\scripts\scriptfunctions.wcs
然后,您可以使用在脚本组件中定义的ProgID调用VBScript中的方法。
Dim script_functions
Set script_functions = CreateObject("Tmdean.ScriptFunctions")
WScript.Echo script_functions.MyMethod(2, 2)