如何获取 Windows Server 上本地连接的 IP 地址?

如何获取 Windows Server 上本地连接的 IP 地址?

我想创建一个批处理或 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}

答案1

这是我在以前的脚本中使用的一些示例代码...

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

答案2

如果您想将 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

答案3

以下是将 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 行,开头为“回显网卡”,一旦您对其工作满意,就可以将其删除。

答案4

已转换为 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

相关内容