web-dev-qa-db-ja.com

Windows Serverでローカルエリア接続のIPアドレスを取得する方法

URLをまとめて実行するバッチまたはVBSファイルを作成したいのですが。そのURLの一部は、マシンの実際のIPアドレスである必要があります。そのIPアドレスを変数に入れてスクリプトに含めるにはどうすればよいですか?

編集1:

以下のコマンドでIPアドレスが得られることがわかりましたが、その値を変数に入れてスクリプトで使用する方法がわかりません。

c:\> wmic NICCONFIG WHERE IPEnabled=true GET IPAddress /format:csv

Node,IPAddress
IP-0AFB,{10.25.5.2}
4
Geo

これが、前のスクリプトで使用したサンプルコードです。

Dim myIPAddress : myIPAddress = ""
Dim objWMIService : Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Dim colAdapters : Set colAdapters = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
Dim objAdapter
For Each objAdapter in colAdapters
  If Not IsNull(objAdapter.IPAddress) Then myIPAddress = trim(objAdapter.IPAddress(0))
  exit for
Next

Wscript.echo "My IPAddress is " & myIPAddress
5
Dscoduc

IPアドレスを変数に戻したい場合は、次のようにします。

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
            strIPAddress = Join(objItem.IPAddress, ",")
            *yourFunctionName*(strIPAddress)
Next

このコードは、MicrosoftのTechNet ScriptcenterのScriptomatic v2.0から直接取得したものです。ここにあります: http://technet.Microsoft.com/en-us/scriptcenter/dd939957.aspx

2
Marcus

IPv6用に変換

@echo off
setlocal
set varcounter=0
set wmicmd="wmic NICCONFIG WHERE IPEnabled=true GET IPAddress"
for /f "tokens=2 delims={, skip=1" %%a in ('%wmicmd%') do call :SETVAR %%a
endlocal
goto :eof

:SETVAR
set /a varcounter=%varcounter% + 1
if not {%1}=={} (
    echo NIC %varcounter% IPv6 address is {%1}
    set NIC%varcounter%=%1
)
goto :eof
1
Dan Skinner

以下は、WMICの結果をcmdスクリプトの変数に抽出する方法です。

@echo off
setlocal
set varcounter=0
set wmicmd="wmic NICCONFIG WHERE IPEnabled=true GET IPAddress"
for /f "tokens=1 delims={, skip=1" %%a in ('%wmicmd%') do call :SETVAR %%a
endlocal
goto :eof

:SETVAR
set /a varcounter=%varcounter% + 1
if not {%1}=={} (
    echo NIC %varcounter% address is {%1}
    set NIC%varcounter%=%1
)
goto :eof

複数のNICが存在する可能性があるため、WMICの出力をループ処理する必要があることに注意してください。これは、WMIC出力の各行に対して:SETVARを呼び出して実行します(ただし、最初の行をスキップし、空白の後続行がないかテストします。変数が作成されます。有効になっている各NICが見つかりました-変数は%NIC1%、%NIC2%などになります。

12行目"echo NIC"で始まり、満足のいく動作が得られたら削除できます。

1
quux

これを本当に便利にするために、/node:%1を追加しました(リモートコンピューターのIPを取得するため)pingまたはnslookupに比べて、システム管理者とネットワーク管理者の手間を省きます。もう1つ追加するのは「エラーチェック」です。システムが使用できない場合、スクリプトはSystem %1 not availableのように「その情報をログに記録」して、次にグラブすることができます。次のシステムのIP。

多くの場合、「バット」を作成して「バットを呼び出す」ので、以下の「getall.bat」のようなバッチファイルを作成します。

次に、次のように実行します:getall > getall-log.txt 2>&1

(上記は、発生したエラーを含むすべての情報をテキストファイルにパイプします)

getall.bat

rem getall.bat
call getnic.bat workstation1
call getnic.bat workstation2
call getnic.bat server1
call getnic.bat server2
rem end of getall.bat

getnic.bat

rem - getnic.bat
@echo off
setlocal
set varcounter=0
set wmicmd="wmic /node:%1 NICCONFIG WHERE IPEnabled=true GET IPAddress"
for /f "tokens=1 delims={, skip=1" %%a in ('%wmicmd%') do call :SETVAR %%a
endlocal
goto :eof

:SETVAR
set /a varcounter=%varcounter% + 1
if not {%1}=={} (
    echo NIC %varcounter% address is {%1}
    set NIC%varcounter%=%1
)
goto :eof
rem end of getnic.bat
1
Jeff

VBSまたはバッチスタイルのスクリプトを要求したのは承知していますが、そのルートを試したい場合や、この質問を見ている人のためにPowerShellスニペットも追加すると思います...

[System.Net.Dns]::GetHostAddresses([System.Net.Dns]::GetHostName()) | foreach {write $_.IPAddressToString}

これにより、現在マシンに割り当てられているすべてのIPアドレスが返されます。

0
Brent Pabst