2012-01-02 71 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

相關問題