2017-03-08 19 views
3

私はPXEサーバーを見つけて、MACアドレスを送信してプロビジョニングスクリプトを取得するWinPE環境にスクリプトを作成しています。複数のネットワークアダプタを持っていますipconfigからMACおよびDHCPサーバーを取得する

  • サーバー:

    は、ここで私が対処しなければならないものです。 1つだけがPXEサーバーに接続されています。

  • PXEサーバーは、常にそのネットワーク上のDHCPサーバーです。
  • 他のNICに他のDHCPサーバーが接続されている場合があります。
  • PXEサーバーもポート80で待機しています。
  • cURLはWinPEイメージで使用できます。

私は、スクリプトの最後の行になりたい:私はipconfig /allから必要なすべての情報を取得が、私はその出力を解析する方法が分からないことがわかり

curl -s -o %TEMP%/setup.cmd http://%PXE_IP%/cblr/svc/op/script/system/%MY_MAC%/?script=setup.cmd 

。例えば

私は、これは私に、各アダプタのDHCPサーバーのIPアドレスを与える

for /f "tokens=15 delims= " %%X in ('ipconfig /all ^| find "DHCP Server"') do echo %%X 

を行うことができます。私はどちらが正しいかを判断することができます。しかし、それでは?そのアダプタの対応するMACアドレスが必要です。その情報は出力にありますが、私はfindにそれを投げ捨てました。

+0

'IPCONFIG'コマンドの出力を解析するために' FOR/F'コマンドを使います。 'IPCONFIG'の出力を' FIND'コマンドにパイプしたいと思うでしょう。 – Squashman

+0

そのようにすれば、たとえばDHCPサーバーを手に入れることができます。しかし、正しいDHCPサーバーが見つかると、そのDHCPサーバーに使用するMACをどのように知ることができますか? AFAIK私は特定のアダプタのipconfigを取得することはできません。 –

答えて

1

可能であれば、WinPEではipconfigの代わりにwmicを使用します。 47:40:マイコンピュータ、13、40すべてのアクティブインターフェイスを

wmic nic where NetConnectionStatus=2 get InterfaceIndex, MACAddress,NetConnectionID /format:csv 

を取得する

4D:42:4C、ワイヤレスネットワーク接続
マイコンピュータ、58、00:50:56:C2 :01、VMwareのネットワークアダプタVMnet1

そしてあなただけの各ますInterfaceIndex

wmic nicconfig get InterfaceIndex,DHCPServer /format:csv 
のDHCPサーバーと組み合わせる必要があります:

マイコンピュータ、10.0.0.1、データをフェッチするために13
マイコンピュータ,, 58

あなたはこの

@echo off 
setlocal EnableDelayedExpansion 
REM *** Delete all previous variables beginning with "nic_" 
for /F "delims==" %%V in ('set nic[ 2^> nul') do set "%%V=" 

for /F "skip=2 tokens=1-4* delims=," %%1 in ('"wmic nic where NetConnectionStatus=2 get InterfaceIndex, MACAddress,NetConnectionID,Status /format:csv"') do (
    echo DEBUG: "%%4",%%2,%%3 
    set "nic[%%2].mac=%%3" 
) 

for /F "skip=2 delims=" %%L in ('"wmic nicconfig get InterfaceIndex,DHCPServer,IPAddress /format:csv"') do (
    set "line=%%L" 
    set "line=""!line:,=,"!"" --- Pump up the csv line with quotes to avoid empty columns col1,,col2 transformed to "col1","","col3" 
    for /F "tokens=1-4* delims=," %%1 in ("!line!") do (
    if "%%~2" NEQ "" (
     set nic[%%~3].dhcpServer=%%~2 
    ) 
) 
) 

set nic 

出力のようなものを使用します。

NIC [を13] .dhcpServer = 10.0.0.1
nic [13] .mac = 40:47:40:4D:42:4C
NIC [58]の.Mac = 00:50:56:C2:20:ところで01

。私は、私が必要としない1つの追加の列を常に取り出すので、ちょっと浮気していますが、最後の列はCR文字で終わるという問題を避けるためです。

+0

残念ながらwmicはWinPEでは利用できません。 :( –

1

ここでは、ipconfig /ALLの出力を解析してwmicの結果をシミュレートした私の古いプロジェクト(cca2½年前)のスクリプトです。このソリューションは、あなたの中で使用できるかどうかはわからない

@ECHO OFF 
@SETLOCAL enableextensions enabledelayedexpansion 
    set "HostName=" 
    set "NetConID=" 
    set "IP_Addr4=" 
    set "IP_Addr6=" 
    set "MAC_Addr=" 
for /F "tokens=1* delims=:" %%G in ('ipconfig /ALL') do (
    set "foo=%%~G" 
    if not "!foo:Host name=!"=="!foo!" (
    for %%I in (%%~H) do if not "%%~I"=="" set "HostName=%%~I" 
) 
    if "!foo:adapter=!"=="!foo!" (
    if not "!foo:Physical Address=!"=="!foo!" (
     for %%I in (%%~H) do if not "%%~I"=="" set "MAC_Addr=%%~I" 
    ) 
    if not "!foo:IPv4 Address=!"=="!foo!" (
     for %%I in (%%~H) do if not "%%~I"=="" set "IP_Addr4=%%~I" 
     set "IP_Addr4=!IP_Addr4:(preferred)=!" 
    ) 
    if not "!foo:local IPv6 Address=!"=="!foo!" (
     for %%I in (%%~H) do (
     if not "%%~I"=="" (
      for /F "delims=%%" %%p in ("%%~I") Do set "IP_Addr6=%%~p" 
      rem set "IP_Addr6=!IP_Addr6:(preferred)=!" 
     ) 
    ) 
    ) 
) else (
    if not "!IP_Addr6!,!IP_Addr4!"=="," (
     @echo #!HostName!,!NetConID!,{"!IP_Addr4!","!IP_Addr6!"},!MAC_Addr! 
    ) 
    set "MAC_Addr=" 
    set "IP_Addr4=" 
    set "IP_Addr6=" 
    set "NetConID=!foo:*adapter =!" 
) 
) 
if not "!IP_Addr6!,!IP_Addr4!"=="," (
    @echo =!HostName!,!NetConID!,{"!IP_Addr4!","!IP_Addr6!"},!MAC_Addr! 
) 
0

...代わりに のIPv4アドレス IPv6アドレス DHCPサーバーはあなたのために大変な仕事ではありません得るためにそれを適応させますIPとMAC​​アドレスを取得する場合?

@echo off 
Title Get IP and MAC Address 
@for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do (
    set "PXE_IP=%%a" 
) 

@For /f %%a in ('getmac /NH /FO Table') do (
    @For /f %%b in ('echo %%a') do (
     If /I NOT "%%b"=="N/A" (
      Set "MY_MAC=%%b" 
     ) 
    ) 
) 
echo PXE_IP : %PXE_IP% 
echo MAC Address : %MY_MAC% 
echo(
echo curl -s -o %TEMP%/setup.cmd http://%PXE_IP%/cblr/svc/op/script/system/%MY_MAC%/?script=setup.cmd 
pause>nul 
関連する問題