とっておきの手土産を教えて

Select * from Win32_NetworkAdapterConfigurationで
IPアドレスを取得しています。
できれば、000.000.000.000というようにゼロパディングした状態で
取得していたいと思っていますが、Web上に参考になるサンプルを見つけることができません。
何方かご教授お願いします。

A 回答 (3件)

こんにちは。



> イマイチ上手くできません。

何が上手くできないか、具体的に書いてほしいと思います。ロジックは
提示しましたよ。

....というのは横においといて。ソースを整形しました。私の好みで^^;

投稿用にインデントで全角 SP を使用してます。 VBS ファイルの場合は、
エディタで全角 SP 1個を半角 SP 2個または Tab に置換して下さい。

余談ですが、FSO の CreateTextFile で開いたファイルを閉じる処理の
追加、および CSV の保存先パス等はきちんと書いた方が良いですよ。

CSV の Close 処理は追加しておきましたが。。

Option Explicit

Call OutputIPAddress

Sub OutputIPAddress()

  Const WQ = """"

  Dim sComputer, sHostname, sql
  Dim wmi, net, fso, csv, netAdapters, netAdapter, ip
  
  sComputer = "."
  Set wmi = GetObject("winmgmts:!\\" & sComputer & "\root\cimv2")
  Set net = CreateObject("WScript.Network")
  
  sHostname = UCase(net.ComputerName)
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set csv = fso.CreateTextFile(sHostname & ".csv")

  sql = ""
  sql = sql & "Select * "
  sql = sql & " From Win32_NetworkAdapterConfiguration"
  sql = sql & " Where IPEnabled = True"

  Set netAdapters = wmi.ExecQuery(sql)
  For Each netAdapter In netAdapters
    ' // Host Name
    csv.Write WQ & UCase(netAdapter.DNSHostName) & WQ & ","
    ' // Physical address
    csv.Write WQ & UCase(netAdapter.MACAddress) & WQ & ","
    ' // IP Address
    For Each ip In netAdapter.IPAddress
      csv.Write WQ & IPZeroPadding(ip) & WQ & ","
    Next
  Next
  
  csv.Close
  
  Set netAdapters = Nothing
  Set csv = Nothing: Set fso = Nothing
  Set net = Nothing: Set wmi = Nothing

End Sub

Function IPZeroPadding(ByVal sIPAddress)
  
  Dim v, i
  v = Split(Trim(sIPAddress), ".")
  For i = 0 To 3
    v(i) = Right("000" & v(i), 3)
  Next
  sIPAddress = Join(v, ".")
  IPZeroPadding = sIPAddress

End Function
    • good
    • 0
この回答へのお礼

KenKen_SP様
整形して頂いた作成したソースを参考に、
思い通りのScriptが作成できました。ありがとう御座いました。
VBScriptはまだ初心者なので、これからもっと勉強します。
また機会がありましたらご教授よろしくお願いします。

お礼日時:2009/02/16 22:29

ああ、投稿後に気づきましたが、



' // IP Address
For Each ip In netAdapter.IPAddress()
  csv.Write WQ & IPZeroPadding(ip) & WQ & ","
Next
csv.WriteBlankLines 1 ' <--- 追加

改行入れた方がいいかもしれませんね。
ネットワークカードの2枚刺し環境等考えられますから。
    • good
    • 0

こんにちは。



環境が書かれておりませんので VB/VB(A) で回答します。
ほとんど Microsoft スクリプトセンターの流用です。。。

strComputer = "."
Set objWMIService = GetObject _
          ("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery _
         ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objAdapter In colAdapters
  For Each ip In objAdapter.IPAddress
    ' // *** zero padding ****
    v = Split(ip, ".")
    For i = 0 To 3
      v(i) = Right$("000" & v(i), 3)
    Next i
    Debug.Print Join$(v, ".")
  Next
Next

こういうことですか?

この回答への補足

KenKen_SPさん、回答ありがとうございます。
環境はWindowsXPでvbsファイルを実行してホスト名やIPを取得する
Scriptを作成しています。
このような感じでIPを取得していますが上手く
ゼロパディングできればと。。。

strComputer = "."
Set objWMIService = GetObject ("winmgmts:" & "!\\" & strComputer & "\root\cimv2")

Set WshNetwork = CreateObject("WScript.Network")
strCompName = WshNetwork.ComputerName

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.CreateTextFile(strCompName & ".csv")

Set colItems = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")

For Each objAdapter in colItems
objFile.Write """" & UCase(objAdapter.DNSHostName) & """" & ","'ホスト名

If Not IsNull(objAdapter.IPAddress) Then
For i = LBound(objAdapter.IPAddress) To UBound(objAdapter.IPAddress)
objFile.Write """" & objAdapter.IPAddress(i) & """" & ","'IPアドレス

Next
End If
Next

KenKen_SPさんに提示していただいたソースの
' // *** zero padding ****以下を
上手く組み合わせればできそうですが、初心者なのでイマイチ上手く
できません。
どうかよろしくお願いします。

補足日時:2009/02/15 23:33
    • good
    • 0

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


おすすめ情報