Назад | Перейти на главную страницу

Как получить IP-адрес для подключения по локальной сети на Windows Server?

Я хочу создать пакетный или vbs-файл, который объединит URL-адрес и выполнит его. Часть этого URL-адреса должна быть фактическим IP-адресом машины. Как я могу получить этот IP-адрес в переменной, чтобы включить его в сценарий?

РЕДАКТИРОВАТЬ 1:

Я обнаружил, что приведенная ниже команда даст мне IP-адрес, но до сих пор не знаю, как передать это значение в переменную, чтобы использовать его в скрипте.

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

Node,IPAddress
IP-0AFB,{10.25.5.2}

Вот пример кода, который я использовал в предыдущем сценарии ...

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

Если вы хотите вернуть 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

Этот код взят прямо из Scriptomatic v2.0 из Microsoft TechNet Scriptcenter. Найдено здесь: http://technet.microsoft.com/en-us/scriptcenter/dd939957.aspx

Конвертирован для 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

Знаете, чтобы сделать это ДЕЙСТВИТЕЛЬНО полезным, я добавил /node:%1 (для получения IP-адреса удаленного компьютера) Экономия времени для системных и сетевых администраторов по сравнению с ping или nslookup. Я уверен, что еще я добавлю «проверку ошибок», чтобы, если система окажется недоступной, сценарий может «записать эту информацию», например 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

Вот способ извлечь результаты 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

Обратите внимание, что, поскольку может быть несколько сетевых адаптеров, мы должны перебрать вывод WMIC в цикле, что достигается вызовом: SETVAR для каждой строки вывода WMIC (однако, пропуская первую и проверяя наличие пустых завершающих строк. Создается переменная для каждой найденной включенной сетевой карты - переменные будут% NIC1%,% NIC2% и т. д.

Строка 12, начиная с "echo NIC", можно удалить, как только он вам понравится.

Я знаю, что вы просили скрипт в стиле VBS или пакетной обработки, но я подумал, что добавлю и фрагмент PowerShell, если вы захотите попробовать этот маршрут или для кого-то еще, смотрящего на этот вопрос ...

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

Это вернет все IP-адреса, назначенные аппарату в настоящее время.