2012-01-02 4 views
0

私は現在以下のコードを持っていますが、コレクションを扱うのは熟練していません。したがって、ループの各ラウンドでルールプロパティから各名前の値を取得する方法を考えることができません。VBScriptのfor ... eachループを使わずにコレクションのプロパティにアクセスする

colRules(c).nameの代わりに
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.item(c).name
  • colRules.name(c)
  • t = colRules.name/t(c)

...など

コレクションをWeb上で繰り返さずにコレクションを繰り返し処理する方法を研究していて、コレクションの操作方法の詳細については、こちらのコミュニティが解決策/情報源を使ってより迅速に学ぶことができると確信しています。

答えて

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

+0

申し訳ありませんが、上記のコメントを再編集できるようです。上記は質問であると考えられていました。 – user66001

+0

これを回避する方法は、元のINetFwRules変数を再利用しないようです。私の編集された答えを見てください。 – bobbymcr

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

残念ながら、これはうまくいかない - 'Error:オブジェクトはこのプロパティやメソッドをサポートしていません: 'colRules.ItemIndex''/http://i.imgur.com/ZVy3tny.png。誰かの質問に答えるときに仮定がなされておらず、代わりに理論が投稿される前に試みたことを親切に示唆します。 – user66001

関連する問題