一步一步学VBScript(5)之WSH对象五
前沿:
当域控与脚本两者相遇的时候会产生什么呢.
哈哈.应该是一个问号.还有一个惊叹号.
这两天写了个脚本.DC上执行让AD中的计算机中的本地管理员组
添加一个域帐户.然后脚本顺利地执行下去了.奇迹般的成功了.
哇咔咔.如果我是一个企业服务器管理员.想让一个普通用户.
用来管理所有客户端的问题.防止最重要的域管理员密码泄露.
OK.这个是最好的办法.不是吗.
以后写道ADSI脚本方面的介绍的时候.我会陆续介绍这方面的内容
敬请期待~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
继续上篇话题
上篇要点:
1.介绍了WSH中处理输入输出流的方法概要
2.详细介绍了stdout,stdin,stderr.
本篇主要内容
介绍脚本的参数引入
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
脚本中的参数引入
(1)wscript.arguments概要
我们来看一张概要图
这个方法。同样还是WSH中的内容。
(WSH已经介绍了4篇了。内容会对有的朋友来说比较浅
但是我还是想慢慢点把内容说全。估计还要有好多篇可以说
等全部仔细说完了。我想脚本中最基本的东西您应该很清楚了)
那么这个方法干吗用的呢。
每个东西的存在总会有它的意义嘛。这个方法呢。就是你可以给脚本添加参数
那么有人要问来。直接把参数写脚本里不就好了?
呵呵。因为做不到阿。比如我用批处理来调用这个脚本。或者用起来的脚本来调用这个脚本。
那么有了这个参数后。这个脚本就像是一个更大的function了。
如果把一整套脚本看作是幢房子的话。那么某个脚本就是一个楼层,而arguments就是每层楼的地板哦
很伟大把。
具体我们来看看能做什么吧
Set colNamedArguments = WScript.Arguments.Named
strFN = colNamedArguments.Item("FirstName")
strLN = colNamedArguments.Item("LastName")
WScript.Echo "Your name is " & strFN & "." & strLN
WScript.Sleep 3000
OK,请您保存C:\Scripts\testarguments.vbs
然后在cmd中执行
cscript.exe c:\Script\testarguments.vbs /LastName:Xu /FirstName:Mark
结果呢。嘿嘿
不错吧。想到什么了吗?OK,我们继续。
(2)Arguments的属性
那么为什么他会去识别FirstName和LastName参数呢
细心的您有没有发现
Set colNamedArguments = WScript.Arguments.Named
对,就是他 Named.
OK,那么来介绍下
方法
Wscript.Arguments.Count
Wscript.Arguments.ShowUsage
属性
Wscript.Arguments.Named
Wscript.Arguments.Unnamed
Wscript.Arguments.Length
Wscript.Arguments.Item(n)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wscript.Arguments.Count
Wscript.Arguments.Length
先看段代码
WScript.Echo "Count: " & WScript.Arguments.Count
WScript.Echo "Length: " & WScript.Arguments.length
WScript.Sleep 3000
同样保存为vbs然后运行
cscript.exe c:\scripts\testarguments.vbs Mytest“My test”
执行后结果为
都为2。为什么呢。
废话。当然都为2,否则就有大问题了。。您的计算机不正常咯
两个均为计算参数的数量。注意哦 空格为分割哦
如果您在参数中有空格的话,请用“”来表达这个为一个参数
那么区别呢。
微软官方资料http://technet.microsoft.com/en-us/library/ee156618.aspx
当使用vbscript的时候2者是一样的。但是如果您使用JScript的话。
只能用Length。否则就会run-time error
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wscript.Argument.Named
Wscript.Argument.Unnamed
来段代码帮您理解
Set objarg1 = WScript.Arguments.Named
WScript.Echo "NamedCount: " & objarg1.Count
Set objarg2 = WScript.Arguments.Unnamed
WScript.Echo "UnNamedCount: " & objarg2.Count
WScript.Sleep 3000
同样保存为VBS
然后请您执行
cscript.exe c:\Scripts\testarguments.vbs /key1:mytest1 /key2:"my test1" "my test2" mytest2
执行结果为
结果为2个2对巴
这个就是我们想要的结果。对,他就是一个开关,来过滤是否有像 /key1:mytest1这样的参数
这个代码的升级版
Set objarg1 = WScript.Arguments.Named
WScript.Echo "NamedCount: " & objarg1.Count
WScript.Echo "Namedkey2 " & objarg1.Item("key2")
Set objarg2 = WScript.Arguments.Unnamed
WScript.Echo "UnNamedCount: " & objarg2.Count
WScript.Echo "Unnameditem1 " & objarg2.Item(1)
WScript.Sleep 3000
同样执行
cscript.exe c:\Scripts\testarguments.vbs /key1:mytest1 /key2:"my test1" "my test2" mytest2
结果为
明白了吧。他真的是过滤了。因为
当unnamed的时候 他的item参数是1,也就是第2个,并且当您用item(2)的话。会提示错误。超过范围。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wscript.Arguments.item
我们已经看了很多了吧。他用来具体定位到这个参数是什么
没有他。我们啥都传不进去哦
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wscript.Arguments.ShowUsage
更具官方的资料,这个方法是用在(.WSF)中的。这里我们不做介绍了哦
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(3)综合应用
iNumberOfArguments = WScript.Arguments.Count
Set colNamedArguments = WScript.Arguments.Named
If Not colNamedArguments.Exists("Server") Then
Wscript.Echo "Usage: /Server:<servername> is required."
Wscript.Quit
ElseIf iNumberOfArguments >= 2 Or iNumberOfArguments <= 4 Then Wscript.Echo iNumberOfArguments & " arguments entered"
Wscript.Echo "including Server Name: " & _ colNamedArguments.Item("Server")
Else
Wscript.Echo "Usage: Please enter between 2 and 4 arguments."
Wscript.Quit
End If
OK。这个脚本来自于微软官方网站。通过这次的内容。您现在可以看懂了吧。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
总结:
1.Wscript.Argument的概要介绍
2.Wscript.Argument的方法与属性的介绍和演示
3.综合脚本应用的介绍
下期中将会
1.介绍关于如何控制脚本的运行(sleep,quit,time-out)
2.介绍如何输出脚本环境的信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
期待您的观看。您的宝贵的意见与建议将是我继续的前行的动力。
如果您有什么意见与建议的话,请务必先联系我。
谢谢您耐心的观看。谢谢