2012-01-02 68 views
0

我目前有以下代码,但显然我不擅长处理集合。因此,我似乎无法弄清楚如何在循环的每一轮中取出规则属性中的每个名称值。在VBScript中访问一个集合的属性,没有用于...每个循环

dim c,ExistingRules 
set objFWP = createobject("HNetCfg.FwPolicy2") 
set colRules = objFWP.rules 

for c = 1 to colRules.count - 1 
    ExistingRules = ExistingRules & colRules(c).name 
next 

在地方colRules(c).name,我已经试过了诸如:

  • colRules.item(c).name
  • colRules.name(c)
  • t = colRules.name/t(c)

...等

尽管研究如何遍历集合,而不是针对每个网络上的集合,并且了解有关如何使用集合的更多信息,但我确信此处的社区可以帮助我解决方案/资源以更快地学习。

回答

3

Rules对象是COM接口INetFwRules的一个实例。事实证明,无法通过索引从该集合中检索项目。 Item方法 的定义显示它通过名称检索规则。所以在这种特殊情况下,您必须使用For Each ... In

Dim rule 
For Each rule In colRules 
    WScript.Echo "Rule: " & rule.Name 
Next 

如果你想早日打破循环,然后再一一列举,需要重新分配规则集合:

Dim rule 
Dim colRules 

Set colRules = objFWP.Rules 
WScript.Echo "Loop first time..." 
For Each rule In colRules 
    WScript.Echo "Rule: " & rule.Name 
    Exit For 
Next 

' Reassign colRules 
Set colRules = objFWP.Rules 
WScript.Echo "Loop again..." 
For Each rule In colRules 
    WScript.Echo "Rule: " & rule.Name 
    Exit For 
Next 
+0

该死。所以没有办法移动索引(就像在ADO记录集中那样),或重置索引?想要迭代计数器的主要原因是似乎打破了循环,然后再次启动相同的循环不会重置回第一个“记录”。 – user66001 2012-01-02 18:47:31

+0

对不起,似乎我不能重新编辑我的上述评论。上述应该是一个问题。 – user66001 2012-01-02 19:02:37

+0

解决此问题的方法似乎不是重用原始INetFwRules变量。看到我编辑的答案。 – bobbymcr 2012-01-02 19:26:37

0
set objFWP = createobject("HNetCfg.FwPolicy2") 
set colRules = objFWP.rules 

' because index in VBScript is zero based 
for c = 0 to colRules.count - 1 
    'assuming name is one of the property for items in the collection 
    ExistingRules = ExistingRules & colRules.ItemIndex(c).name 
next 
+0

不幸的是,这不起作用 - 错误:对象不支持此属性或方法:'colRules.ItemIndex''/http://i.imgur.com/ZVy3tny.png。如果回答某人提出的问题时,假设不会被提出,而是在发布之前尝试理论,那么会好心建议。 – user66001 2013-09-10 18:11:06

相关问题