windows - 通过命令行重命名网络接口(interface)名称

标签 windows networking cmd ethernet netsh

<分区>

我想通过 dos 将网络接口(interface)名称重命名为默认名称,例如“以太网”。

我知道 netsh interface set interface name=”Local Area Connection” newname=”Ethernet” 是这样做的方法。

我正在运行一个脚本,它不知道接口(interface)的名称,对吗?因此,在为接口(interface)设置 IP 地址之前,我需要将其重命名为默认值。

如何在不知道接口(interface)名称的情况下执行此操作?

有没有办法以某种方式获取接口(interface)的名称然后更改它?

最佳答案

netsh(MS 试图让我们放弃并放弃的工具)

获取 WLAN 接口(interface)名称:netsh wlan show interfaces
帮助状态:show interfaces - 显示系统上的无线 LAN 接口(interface)列表。
要获取 LAN 接口(interface)名称:netsh lan show interfaces
帮助状态:show interfaces - 显示系统上当前有线接口(interface)的列表。
获取所有接口(interface)的名称:netsh interface show interface
帮助状态:show interfaces - 显示接口(interface)。

LAN命令确实需要有线AutoConfig服务,一般不会启动。

此批处理脚本将启动服务,获取(最后的)LAN 接口(interface)名称,将其更改为新名称,再次停止 Wired AutoConfig 服务。

sc.exe start dot3svc

for /f "tokens=1* delims=: " %%a in ('netsh lan show interfaces') do if %%a == Name set activeAdapter=%%b
echo %activeAdapter%
netsh interface set interface name="%activeAdapter%" newname="Ethernet"

sc.exe stop dot3svc

限制:

  • 假设只有一个有线接口(interface)
  • 无论 Wired AutoConfig 服务是否在启动时,它都会停止它

对于 Wifi 接口(interface),将上面的脚本 'lan' 更改为 'wlan' 并删除两个 sc.exe 服务启动/停止


PowerShell

为了更好地控制重命名为 PowerShell 的界面将是一个更容易的选择。

这在大多数情况下可能会起作用:
获取 NetAdapter | Where-Object { $_.HardwareInterface -eq $True -and $_.MediaType -eq "802.3"} |重命名-NetAdapter -NewName“以太网”

HardwareInterface 将消除虚拟接口(interface),例如虚拟机
MediaType 802.3 将仅显示“有线”接口(interface),不显示 Wifi、宽带或其他接口(interface)。

在脚本文件中,使用上述版本的命令,简写版本为:
获取 NetAdapter | ?硬件接口(interface) | ?媒体类型-eq "802.3"|重命名 NetAdapter“以太网”

有更多选项可以选择所需的界面。检查可以选择它的所有参数:
(获取 NetAdapter)[0] | Format-List -Property * -Force

例如
列出所有由 Realtek 制造的(Realtek 供应商 10ec,Intel:8086):
获取 NetAdapter | ? ComponentID -like "PCI\VEN_10EC*"

不是虚拟的:
获取 NetAdapter | ?虚拟-eq $false

存在连接器:
获取 NetAdapter | ?连接器存在

然后是WMI对象
Get-WmiObject -Class Win32_NetworkAdapterConfiguration


注册表

如果您更改了网络适配卡并且新的使用名称:Ethernet 2 或类似名称并且您想将其重命名回“Ethernet”, 会有一个错误说:

"You were not connected because a duplicate name exists on the network. If joining a domain, go to System in Control Panel to change the computer name and try again. If joining a workgroup, choose another workgroup name."

这当然是关于重命名计算机的错误消息。
PowerShell 会正确地说:试图创建一个对象并且对象名称已经存在。

但是转到 Control Panel\Network and Internet\Network Connections 并尝试重命名那里的界面也无济于事。

似乎这种情况的唯一选择是在这些注册表路径中找到相应的键:

HKEY_LOCAL_MACHINE\SYSTEM\Setup\Upgrade\NetworkDriverBackup\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\
HKEY_LOCAL_MACHINE\SYSTEM\Setup\Upgrade\NetworkDriverBackup\Control\NetworkSetup2\Interfaces\

并删除旧接口(interface)的 key (不是上面写的整个路径!),然后重新启动。
通过 cmd 批处理、PS 或在控制面板中重命名现在应该可以工作了。

关于windows - 通过命令行重命名网络接口(interface)名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317750/

相关文章:

java - 如何使用 Java 从 Windows 的前台窗口获取进程名称?

c++ - 从 sockaddr * 转换为 sockaddr_in * 增加了所需的对齐方式

windows - cmd 批量重命名子文件夹/文件

windows - 可执行文件如何在父 CMD 或批处理上下文中设置环境变量?

c++ - 在客户端矩形中隐藏光标但不在标题栏上

c - Hook - 热修补

c++ - Qt 小部件在其他非 qt 窗口之上

java - 如何使用 Java 网络在多台计算机之间连接和发送数据

linux - 跟踪特定的 IP 和端口

go - 如何获取 db2cmd 运行的 DB2 命令的输出?