3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

WindowsPCのIPアドレスをVBScript(WSH)で簡単設定

WindowsPCのIPアドレスをコマンドプロンプト,バッチファイルで簡単設定で netsh を使ったIPアドレス設定方法を書きましたが、唯一のネックはネットワークアダプタ名を(ネットワークインターフェイス名、NIC名)を指定しないといけないことです。

環境によってネットワークアダプタ名は異なりますし、複数NICがある場合もあります。

ということで、ある程度エンドユーザが設定しやすくするにはネットワークアダプタ名を自動で取得するように、また複数あるときはどのNICを使うか選べるように VBScript で作ってみました。

ネットワークアダプタ名を自動的に取得し、NICが一つしかなければそれに対して設定し、複数ある場合はどれに設定するか選ぶようにするというものです。

Option Explicit

Dim New_IP, SubNet_Mask , D_Gateway ,DnsSv1 , DnsSv2

Dim objShell,iName,i,WSHShell,networks,Item

'IPアドレス

New_IP = "192.168.0.100"

'サブネットマスク

SubNet_Mask = " 255.255.255.0"

'デフォルトゲートウェイ

D_Gateway = "192.168.0.1"

'プライマリDNSサーバ

DnsSv1 = "192.168.125.2"

'セカンダリDNSサーバ

DnsSv2 = "192.168.125.3"

 

Set objShell = CreateObject("Shell.Application")

'ネットワークカード情報取得

Set networks = objShell.Namespace(&H31&)'NETWORK_CONNECTIONS

'NIC選択ダイアログに表示する As String

iName = ""

'ネットワークカード名の配列

Dim iNameAry()

ReDim iNameAry(networks.Items.Count)

 

i=0

For Each Item in networks.Items

'ネットワークアダプタ名を取得

iName = iName & vbCrLf & i & ": """ & Item.Name & """"

iNameAry(i) = """" & Item.Name & """"

i=i+1

Next

'NICが複数あれば選択させる

If networks.Items.Count > 1 Then

Dim nicSelect

nicSelect = InputBox("設定するネットワークカードの数字を入力してOK押下選んでください。(0~" & networks.Items.Count-1 & "の値)" & _

vbCrLf & iName,"入力ダイアログ","0")

If IsEmpty(nicSelect ) Then

MsgBox "キャンセルしました。"

WScript.Quit

End If

If Not IsNumeric(nicSelect) Then

MsgBox "設定した値に誤りがあります。もう一度実行し直してください。"

WScript.Quit

ElseIf CDbl(nicSelect) > (networks.Items.Count-1) Or nicSelect*1000 Mod 1000 <> 0 Or CDbl(nicSelect) < 0 Then

MsgBox "設定した値に誤りがあります。もう一度実行し直してください。"

WScript.Quit

Else

End If

End If

Set WSHShell = WScript.CreateObject("WScript.Shell")

'netshコマンドを使って設定

WSHShell.Run "cmd.exe /c netsh interface ip set address " & iNameAry(nicSelect) & " static " & New_IP & " " & SubNet_Mask & " " & D_Gateway & " none", 0, True

WSHShell.Run "cmd.exe /c netsh interface ip set dns " & iNameAry(nicSelect) & " static " & DnsSv1 , 0, True

WSHShell.Run "cmd.exe /c netsh interface ip add dns " & iNameAry(nicSelect) & " addr=" & DnsSv2 ,0, True

 

MsgBox "IPアドレスの設定が終了しました。"

このスクリプト冒頭のIPアドレス情報を変更して、それぞれの設定をファイル毎に持たしておいて後は実行すればOKですね。