
При замене материнской платы или сетевой карты, во время P2V или холодной миграции виртуальных машин между гипервизорами, а также при настройке нескольких VLAN на одной сетевой карте в Windows вы можете столкнуться с проблемой скрытые (призрачные) сетевые адаптеры. В этом случае невозможно установить ранее назначенный статический IP-адрес для нового сетевого адаптера с ошибкой The IP address you have entered for this network adapter is already assigned to another adapter
.
Windows автоматически скрывает устройства, которые присутствуют в конфигурации Windows, но физически не подключены к компьютеру. Скрытый сетевой адаптер в Windows остается, если физически отключить ранее установленную сетевую карту (это может быть как физическая сетевая карта, так и виртуальный сетевой адаптер). Ранее установленная сетевая карта становится скрытой, и вы не можете увидеть ее в диспетчере устройств.
IP-адрес уже назначен другому сетевому адаптеру
Основная проблема со скрытыми сетевыми адаптерами заключается в том, что вы не можете назначить IP-адрес старого сетевого адаптера новому сетевому интерфейсу. При попытке присвоить старый IP-адрес появляется следующая ошибка:
Microsoft TCP/IP The IP address <IP address> you have entered for this network adapter is already assigned to another adapter (Intel Gigabit Network Connection) which is no longer present on the computer. If the same address is assigned to both adapters and they both become active, only one of them will use this address. This may result in incorrect system configuration. Do you want to fix the problem by entering a different IP address for this adapter in the list of IP addresses in the Advanced dialog box?
Если попытаться задать IP-адрес сетевого адаптера с помощью PowerShell, появится ошибка:
New-NetIPAddress –IPAddress 192.168.10.155 -DefaultGateway 192.168.10.1 -PrefixLength 24 -InterfaceIndex 22
New-NetIPAddress : The object already exists. Windows System Error 5010,New-NetIPAddress
Я часто сталкиваюсь с этой проблемой на виртуальных машинах VMware с виртуальным сетевым адаптером VMXNet3. Новая виртуальная сетевая карта идентифицируется как новое устройство (в отличие от vNIC типа E1000). Если вы удалили сетевую карту (vNIC) на виртуальной машине VMWare и добавили новую, вы не сможете установить старый IP-адрес, назначенный удаленному сетевому интерфейсу.
Также проблема скрытых сетевых адаптеров возникает после миграции физического сервера в виртуальную машину (Physical-to-Virtual — P2V), например, с помощью VMware Converter. После миграции отключенные сетевые адаптеры остаются в Windows, и вы не можете назначить старые настройки IP-адресов новым сетевым адаптерам.
Перед назначением старого IP-адреса новому сетевому адаптеру необходимо удалить конфигурацию отключенных сетевых карт.
Показать скрытые (несуществующие) сетевые адаптеры в диспетчере устройств Windows
Чтобы показать скрытые (физически отключенные) сетевые адаптеры в Windows, откройте консоль диспетчера устройств в специальном режиме. Для этого в Windows 7 (и предыдущих версиях):
- Откройте командную строку от имени администратора;
- Выполните команду:
set devmgr_show_nonpresent_devices=1
- Запустите консоль диспетчера устройств:
devmgmt.msc
В верхнем меню нажмите Вид -> Показать скрытые устройства.
Расширьте Сетевые адаптеры раздел. В списке должны появиться скрытые сетевые карты (они имеют бледные значки). Выберите сетевой контроллер, который вы хотите удалить, щелкните его правой кнопкой мыши -> Удалить устройство. Вы можете удалить драйвер сетевого адаптера, установив флажок Удалить программное обеспечение драйвера для этого устройства вариант.
Как удалить скрытые/неприсутствующие сетевые адаптеры с помощью PowerShell и CMD
Вы можете составить список неиспользуемых/скрытых сетевых адаптеров в Windows с помощью PowerShell:
Get-PnpDevice -class net | ? Status -eq Unknown | Select FriendlyName,InstanceId
Затем вы можете удалить такой сетевой адаптер по его InstanceId (скопируйте его значение из результата предыдущей команды):
$InstanceId = “PCI\VEN_8086&DEV_10D3&SUBSYS_07D015AD&REV_00\000C29FFFF66A80700”
$RemoveKey = "HKLM:\SYSTEM\CurrentControlSet\Enum\$InstanceId"
Get-Item $RemoveKey | Select-Object -ExpandProperty Property | %{ Remove-ItemProperty -Path $RemoveKey -Name $_ -Verbose}
Вы можете удалить все скрытые (не присутствующие) сетевые адаптеры с помощью сценария PowerShell:
$Devs = Get-PnpDevice -class net | ? Status -eq Unknown | Select FriendlyName,InstanceId
ForEach ($Dev in $Devs) {
$RemoveKey = "HKLM:\SYSTEM\CurrentControlSet\Enum\$($Dev.InstanceId)"
Get-Item $RemoveKey | Select-Object -ExpandProperty Property | %{ Remove-ItemProperty -Path $RemoveKey -Name $_ -Verbose }}
Для удаления устройств в Windows можно использовать инструмент DevCon.exe (Device Console). Этот инструмент входит в состав Windows Driver Kit (WDK).
Перечислите все сетевые адаптеры:
devcon findall =net
Скопируйте идентификатор экземпляра устройства сетевого адаптера, который нужно удалить, и выполните команду:
devcon -r remove '@PCI\VEN_8086&DEV_10D3&SUBSYS_07D015AD&REV_00\000C29FFFF66A80700'
В Windows 10/11 и Windows Server 2022/2019/2016 можно использовать PnPUtil встроенная команда вместо devcon.exe.
Список сетевых адаптеров:
pnputil /enum-devices /class net
Удаление устройства по его идентификатору экземпляра:
pnputil /remove-device "PCI\VEN_8086&DEV_10D3&SUBSYS_07D015AD&REV_00\000C29FFFF66A80700"
Откройте диспетчер устройств, выберите Действия -> Сканирование на предмет аппаратных изменений в меню и проверьте, удален ли скрытый сетевой адаптер.
Удаление параметров сетевого адаптера из реестра
Если после удаления сетевой карты-призрака в диспетчере устройств вы все еще не можете назначить старый IP-адрес новому адаптеру, удалите IP-конфигурацию старой сетевой карты из реестра.
IP-настройки сетевых интерфейсов находятся в ключе реестра HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces.
Этот ключ реестра содержит несколько ключей {Interface GUID}. Проверяйте их один за другим, пока не найдете интерфейс, который IPAddress значение содержит IP-адрес, назначенный старому сетевому интерфейсу.
Запомните название ключа реестра (это идентификатор сетевого адаптера). Удалите ключи:
- HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Adapters\{ваш_NIC_ID}
- HKLM\SYSTEM\CurrentControlSet\Services\{ваш_NIC_ID}
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network{ваш_NIC_ID}
Перезагрузите компьютер и попробуйте назначить старый статический IP-адрес новому сетевому адаптеру.
Также рекомендуется сбросить настройки сети. В Windows 10 и 11 это можно сделать в разделе Настройки -> Сеть и Интернет -> Сброс настроек сети.
Если вы столкнулись с проблемой после установки на компьютер дополнительной сетевой карты, убедитесь, что встроенный интерфейс LAN отключен в настройках BIOS/UEFI (пункт обычно называется Встроенная гигабитная сетевая карта или Встроенная локальная сеть).