VBS脚本运行库手册(15)-移除Dictionary的元素

发布时间:2020-09-15编辑:脚本学堂
VBS脚本运行库手册,移除Dictionary的元素。

一些脚本,比如监视脚本,作着同样的动作,会将信息存在一个 Dictionary 中,然后要么在屏幕上显示,要么存储在文本文件中或者数据库中。
然后,脚本停止几分钟,收集更新后的信息,循环往复。

如果你用 Dictionary 来作为临时的数据存储收集信息数据,你可能希望在收取新的信息之前清空 Dictionary 的内容。为了做到这点,你可以用方法 RemoveAll 来移走所有的 Dictionary中的 key-item 对。例如,下面的脚本创建了一个含有三个元素的 Dictionary,然后显示 Dictionary 的 keys,脚本用 RemoveAll 方法移走所有的 key-item 对,bjDictionary.RemoveAll

为了检查元素是否被移走,在此回显 Dictionary 中 key 的信息
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.Add "Printer 1", "Printing"
objDictionary.Add "Printer 2", "Offline"
objDictionary.Add "Printer 3", "Printing"
colKeys = objDictionary.Keys
Wscript.Echo "First run: "
For Each strKey in colKeys
   Wscript.Echo strKey
Next
objDictionary.RemoveAll
colKeys = objDictionary.Keys
Wscript.Echo VbCrLf & "Second run: "
For Each strKey in colKeys
  Wscript.Echo strKey
Next

当脚本在 CScript 运行的时候,如下的信息显示在命令行中。和你看见的一样,第二次输出的时候是空的,因为 Dictionary 已经没有任何的 keys 了。
First run:
Printer 1
Printer 2
Printer 3
Second run:

和移走所有的 key-item 对不同,你有的时候可能向移走一个单独的 key 和 item。例如,假如你的脚本来从一系列的计算机上获得时间日志。脚本被设计成尝试联系每个计算机跟踪每个成功和失败。如果不能连接到计算机上,脚本尝试重新连接,知道连接到计算机并获得所有的日志信息。在这个假想的情况下,可能你的 Dictionary 中有如下的 keys:
atl-dc-01
atl-dc-02
atl-dc-03
atl-dc-04
atl-dc-05

当脚本运行的时候,它可能不能连接到计算机 atl-dc-03,atl-dc-04,在这种情况下,脚本去尝试重新连接这些计算机。但是脚本怎么知道哪个计算机需要连接,哪个不需要那?
一个解决的办法就是简单的移走已经成功连接的计算机。在第一段脚本被编译结束之后,那这个Dictionary 中只是包含如下的元素:
atl-dc-03
atl-dc-04
一旦一个计算机连接成功,就从 Dictionary 中移走这个元素,这样,如果 Dictionary 中不再含有任何元素的时候,那么所有的计算机就都连接成功了,脚本运行结束了。
为了移走单个的元素,用 Remove 方法,输入 key 的名字作为唯一的参数。例如如下的脚本语句移走了 key 为 atl-dc-02 的 key 和它对应的 item。
objDictionary.Remove("atl-dc-02")

下面的脚本创建一个有三个元素的 Dictionary 对象,回显所有的 keys。然后移走 key为 printer 2 的 key 和它的 item,然后再次回显 Dictionary 的 keys:
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.Add "Printer 1", "Printing"
objDictionary.Add "Printer 2", "Offline"
objDictionary.Add "Printer 3", "Printing"
colKeys = objDictionary.Keys
Wscript.Echo "First run: "
For Each strKey in colKeys
    Wscript.Echo strKey
Next
objDictionary.Remove("Printer 2")
colKeys = objDictionary.Keys
Wscript.Echo VbCrLf & "Second run: "
For Each strKey in colKeys
   Wscript.Echo strKey
Next

当脚本在 CScript 运行的时候,在命令行中显示如下:
First run:
Printer 1
Printer 2
Printer 3
Second run:
Printer 1
Printer 3
在第二段脚本编译的末尾,printer 2 已经不再存在于 Dictionary 中了。