Como obter o endereço IP da sua conexão local no Windows Server?

4

Eu quero criar um arquivo batch ou vbs que irá montar um url e executá-lo. Parte desse URL precisa ser o endereço IP real da máquina. Como posso obter esse endereço IP em uma variável para incluí-lo no script?

EDIT 1:

Descobri que o comando abaixo me fornecerá o endereço IP, mas ainda não sei como obter esse valor em uma variável para usá-lo em um script.

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

Node,IPAddress
IP-0AFB,{10.25.5.2}
    
por Geo 31.07.2009 / 17:14

6 respostas

5

Veja um exemplo de código que usei em um script anterior ...

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
    
por 31.07.2009 / 17:30
2

Se você quiser retornar o endereço IP para uma variável, faça o seguinte:

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

Este código é retirado diretamente do Scriptomatic v2.0 do TechNet Scriptcenter da Microsoft. Encontrado aqui: link

    
por 31.07.2009 / 17:50
1

Aqui está uma maneira de extrair os resultados da WMIC em uma variável em um script 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

Observe que, como pode haver vários NICs, temos que percorrer a saída do WMIC, o que é feito chamando: SETVAR para cada linha de saída WMIC (ignorando o primeiro, porém, e testando as linhas finais em branco. variável é criada para cada NIC ativada encontrada - as variáveis serão% NIC1%,% NIC2%, etc.

A linha 12, começando com "echo NIC" , pode ser removida assim que você trabalhar satisfatoriamente.

    
por 18.08.2009 / 12:52
1

Você sabe, para tornar isso REALMENTE útil, adicionei /node:%1 (para obter o IP do computador remoto) Poupa algum trabalho para os administradores do sistema & administradores de rede vs. ping ou nslookup. Eu tenho certeza que a outra coisa que eu vou adicionar é 'verificação de erros' para que, se o sistema não estiver disponível, o script possa "registrar essa informação" - como System %1 not available - e então seguir em frente para pegar o ip do próximo sistema.

Muitas vezes, eu faço um 'bastão' para 'chamar um morcego' Então, eu criaria um arquivo de lote como "getall.bat" abaixo:

Em seguida, basta executá-lo assim: getall > getall-log.txt 2>&1

(Acima irá enviar todas as informações para um arquivo de texto, incluindo erros encontrados)

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
    
por 01.06.2012 / 15:55
1

Convertido para 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
    
por 29.08.2012 / 04:10
0

Eu sei que você pediu um script de estilo VBS ou em lote, mas eu pensei em adicionar um trecho de código do PowerShell também se você quisesse experimentar essa rota ou para qualquer outra pessoa que estivesse olhando para essa questão ...

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

Isso retornará todos os endereços IP atualmente atribuídos à máquina.

    
por 01.06.2012 / 16:27