アプリ版:「スタンプのみでお礼する」機能のリリースについて

WSHについて教えてください。

コレクションの最初の要素(オブジェクト)のプロパティを参照したいのですが、やり方がわかりません。

例えば以下のようなWMIのクエリの結果のコレクションの要素(オブジェクト)は1つだけしかありません。
※ネットワークドライブ V: の情報を得る

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkConnection where LocalName=""V:""",,48)

なのにわざわざ

For Each objItem in colItems
Wscript.Echo "LocalName: " & objItem.LocalName
Next

のような表現をするのは、いかにも大変です。

For Eachを使わずに、上記の例での colItems の最初の要素(オブジェクト)の LocalName プロパティを取り出すには
どのようにコーディングすればいいのでしょうか?

A 回答 (3件)

#2 さんと同様、Excel VBA にて Microsoft WMI Scripting V1.2 Library を使ってみた。



Dim locatorObject As WbemScripting.SWbemLocator
Dim serviceObject As WbemScripting.SWbemServices
Set locatorObject = New WbemScripting.SWbemLocator
Set serviceObject = locatorObject.ConnectServer
serviceObject.Security_.ImpersonationLevel = 3

Dim connections As WbemScripting.SWbemObjectSet
Dim connection As WbemScripting.SWbemObject
Set connections = serviceObject.ExecQuery("SELECT * FROM Win32_NetworkConnection WHERE LocalName='V:'")

Debug.Print connections.Item("\\ホスト名\root\cimv2:Win32_NetworkConnection.Name=""\\\\サーバ名\\共有名 (V:)""").LocalName

結果
こんな書き方しても誰も得しない。

SWbemServiceObject の Get メソッドなら SWbemObject 単体を得られるが、書き方はこうなる。
Dim connection As WbemScripting.SWbemObject
Set connection = serviceObject.Get("\\SSD008\root\cimv2:Win32_NetworkConnection.Name=""\\\\afs001\\Home (W:)""")

<MSDN WMI スクリプト入門 : 第 3 部>
http://msdn.microsoft.com/ja-jp/library/ms974547 …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

おかげさまで、目的を達することができました!

VBScriptでは、以下のようにしました。
理屈はちっともわかりませんが、後々教えていただいたリンクを熟読して、理解したいと思います!

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2:Win32_NetworkConnection.Name=""\\\\ComputerName\\ShareName (V:)""")
Wscript.Echo objWMIService.LocalName

本当に助かりました。ありがとうございました!

お礼日時:2010/05/26 21:57

Excel の VBA にて


Microsoft WMI Scripting V1.2 Library
を参照設定に追加してみたところ、
colItems.Item( strObjectPath As String, [iFlags As Long] )
というメソッドがあることがわかりました。
おそらく、iFlags は省略可能だと思います。
適切な strObjectPath を与えれば、For Each を使用しなくても直接 objItem を取得できるのだと思いますが、残念ながら strObjectPath にどういう文字列を与えればよいのかまではわかりませんでした。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

temtecomai2さんのご返信で、無事解決することができました。

今後ともよろしくお願いいたします。

お礼日時:2010/05/26 22:01

試していないのですが、


colItems.Items(1).LocalName
ではダメでしょうか。

もしかすると
colItems.Items(0).LocalName
かも。

この回答への補足

回答とてもありがとうございます!

実行すると以下のようなメッセージが表示されてしまいます。
回答をいただいたときに、おおお!なるほど!!と思ったのですが・・・。
エラーの通り、WMIのコレクション(colItems)にはItemsプロパティは存在しないようです。

エラー: オブジェクトでサポートされていないプロパティまたはメソッドです。:'colItems.Items'
コード: 800A01B6
ソース: Microsoft VBScript 実行時エラー

取り急ぎ、報告まで。

補足日時:2010/05/25 20:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!