2017-03-08 7 views
3

WinPE 환경에 스크립트를 작성하여 PXE 서버를 찾고 내 MAC 주소를 보내 프로비저닝 스크립트를 검색하려고합니다. 여러 네트워크 어댑터가됩니다ipconfig에서 MAC 및 DHCP 서버 가져 오기

  • 서버 :

    는 여기에 내가 처리해야 할 것입니다. 하나만 내 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

'FOR/F' 명령을 사용하여'IPCONFIG' 명령의 출력을 구문 분석하십시오. 아마도'IPCONFIG'의 출력을'FIND' 명령으로 파이프하려고 할 것입니다. – Squashman

+0

그런 식으로 DHCP 서버를 얻을 수 있습니다. 하지만 올바른 DHCP 서버를 찾으면 어떤 MAC을 사용할지 어떻게 알 수 있습니까? AFAIK 특정 어댑터에 대해서만 ipconfig를 얻을 수 없습니다. –

답변

1

가능한 경우 WinPE에서 ipconfig 대신 wmic을 사용합니다. 47 : 40 : 4D : 42 : (4C), 무선 네트워크 연결
내 컴퓨터, 58, 00 : 50 : 56 : C2

모든 활성 인터페이스를

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

내 컴퓨터 (13), (40)을 얻으려면 : 20 : 01, VM웨어 네트워크 어댑터 VMnet1은

는 그리고 당신은 각 InterfaceIndex

wmic nicconfig get InterfaceIndex,DHCPServer /format:csv 
에 대해 DHCP 서버와이 결합해야 16,

내 컴퓨터, 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 Btw는

.필자는 필자가 필요로하지 않는 여분의 열 하나를 항상 가져 오지만, 마지막 열은 CR 문자로 끝나는 것이 문제를 피하기위한 것이다.

+0

불행히도 WinPE에서는 wmic을 사용할 수 없습니다. :( –

1

여기에 ipconfig /ALL 출력을 구문 분석하여 wmic 개의 결과를 시뮬레이트하는 내 이전 프로젝트 (cca 2½ 년 전)의 스크립트가 있습니다. 그것을 적응하는이 솔루션은 사용 여부를 수 있는지 모르겠어요 IPv4의 주소 및 IPv6 주소 당신을 위해 힘든 일 안 대신 DHCP 서버 ...

@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

를 얻으려면 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 
관련 문제