3

我编写了一个脚本来帮助在部署计算机后对其进行配置。该脚本执行设置计算机名称、启用 BitLocker 等操作。我正在努力解决的一件事是 IP 地址的设置。我正在使用的计算机(具体是服务器)有 4 个 NIC 端口,它们被命名为 Local area connection 和 Local area connection 2-4。问题是部署这些服务器的技术人员并不总是插入同一个端口,此外,部署映像并不总是将以太网局域网连接分配给 NIC 端口 1。

这是我拥有的脚本的副本,如果只启用一个 NIC 端口,它就可以完美运行。我需要做的是将具有 IP 地址(因为 DHCP 已经存在)的本地连接名称的输出通过管道传输到我可以放入netsh命令中的变量中。

当前代码到位

:IPADDRESS
@echo Would you like static or DHCP?
@echo press 1 for static
@echo press 2 for dhcp
Choice /C:12 /N /M "?:"
IF ERRORLEVEL 2 GOTO IPDHCP
IF ERRORLEVEL 1 GOTO IPSTATIC

:IPSTATIC
set /P _IPADDR=Please enter IP address:
set /p _Subnet=Please enter Subnet:
set /p _DefaultGateway=Please Enter Default Gateway:

netsh interface ip set address name="Local Area Connection 2" static %_IPADDR% %_Subnet% %_DefaultGateway%
goto START

:IPDHCP
  netsh interface ip set address "Local Area Connection 2" dhcp
 goto START

 :disipaddr
  netsh interface ip show config name="Local Area Connection 2"

名称“Local Area Connection 2”是随着构建而变化的部分。这就是我需要隔离的部分。我相当确定 for/p和使用它来对抗ipconfig /all或者 netsh interface ip show config 将是正确的方法。

预先感谢您提供的所有帮助。

4

3 回答 3

1

这将在 Windows 7 上运行和测试。

一个批处理.bat 文件:

@echo off

for /f "tokens=2 delims==" %%F in ('wmic nic where "NetConnectionStatus=2 and AdapterTypeId=0" get  NetConnectionID /format:list') do set interfaceName=%%F

echo Your Interface is %interfaceName%

pause
于 2015-02-04T16:07:52.960 回答
0

也许你可以用wmic它?类似于以下内容:

for /f "tokens=2 delims==" %F in ('wmic nic where "NetConnectionStatus=2 and AdapterTypeId=0" get  NetConnectionID /format:list') do set %activeNet%=%F

它应该返回所有连接的 ( NetConnectionStatus=2) Eth/802.3 ( AdapterTypeID=0) 接口 - 即在您的实例中连接的接口。(由于某种原因,它还在我的 XP 笔记本电脑上将 WiFi 报告为 802.3,但这对于服务器来说应该不是问题)

您可以直接从命令行尝试它,看看它是否返回它应该返回的内容。如果批量使用,请替换%F为。%%F

请注意,可能需要检查已连接接口的返回值,因为不同操作系统的返回值不同。Win32_NetworkAdapter 类的完整描述(这nic是它的别名)

如果您 100% 确定只想检查以“本地连接”开头的那些,则可以使用where "netconnectionID like 'Local Area Connection%'"(或将其与其他条件结合使用)

于 2012-11-28T16:37:14.887 回答
0

您的意思是已连接,哪些正在使用中?

:_InterfaceConnected_
FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|find "Connected"') DO (
echo %%B
echo connected : %%B
)
@echo:

:_InterfaceDisconnected_
FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|find "Disconnected"') DO (
echo %%B
echo disconnected : %%B
)

给出作为输出:

Ethernet
connected : Ethernet

Ethernet 3
disconnected : Ethernet 3

完整的概述,通过命令

> netsh interface show interface

输出 :

Admin State    State          Type             Interface Name
-------------------------------------------------------------------------
Enabled        Disconnected   Dedicated        Ethernet 3
Enabled        Connected      Dedicated        Ethernet
于 2019-07-11T18:08:35.457 回答