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
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アドレスの設定が終了しました。"