我想创build一个批处理或vbs文件,将放在一起的URL和执行。 该url的一部分需要是机器的实际IP地址。 我怎样才能得到一个variables的IP地址,以包括它的脚本?
编辑1:
我发现下面的命令会给我的IP地址,但仍然不知道如何获得这个值到一个variables,以在脚本中使用它。
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地址返回到variables,您可以执行以下操作:
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。 在这里find: http : //technet.microsoft.com/en-us/scriptcenter/dd939957.aspx
这是一种将WMIC结果提取到cmd脚本中的variables的方法:
@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的输出进行循环,这是通过调用:SETVAR来完成WMIC输出的每一行(跳过第一行,然后testing任何空白的尾行)。对于find的每个启用的NIC – variables将是%NIC1%,%NIC2%等
第12行,以“echo NIC”开头,只要你有满意的工作,就可以删除。
你知道,为了使这个REALLLLLY有用,我添加/node:%1
(获得远程计算机的IP)为系统pipe理员和networkingpipe理员与ping或nslookup保存一些legwork。 我确定我要添加的另一件事是“错误检查”,这样,如果系统碰巧不可用,那么脚本可以“logging这些信息” – 比如System %1 not available
– 然后继续抓取下一个系统的IP。
通常情况下,我做一个“蝙蝠”“调用一个蝙蝠”所以,我只是创build一个batch file,可能像下面的“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
转换为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
我知道你问了一个VBS或批处理样式的脚本,但我想我也会添加一个PowerShell代码片段,如果你想尝试这个路线或其他人看这个问题…
[System.Net.Dns]::GetHostAddresses([System.Net.Dns]::GetHostName()) | foreach {write $_.IPAddressToString}
这将返回当前分配给机器的所有IP地址。