нужна командная строка для проверки дуплексного статуса на сетевых картах Windows

Вопрос или проблема

это будет для Windows 7

Я попробовал следующую команду PowerShell

get-wmiobject Win32_NetworkAdapter | foreach-object {   get-wmiobject -namespace root/WMI -class MSNdis_macOptions -filter "InstanceName="$($_.Name)""}

но я не могу получить полезную информацию из этого.

Поскольку у меня нет Windows 8 (и Get-NetAdapterAdvancedProperty), я использовал это для получения скорости/дуплекса:

Обновление: Это свело меня с ума. Я получал различные ошибки о том, что ключи не существуют, и оказалось, что у определенных устройств не будет скорости/дуплекса, таких как USB-проход и устройство кластеров Microsoft. Я обновил это, чтобы использовать значение перечисления дуплекса и также перебрать все доступные сетевые интерфейсы.

Кроме того, изначально не проверялся реестр на целевом компьютере, а на локальном.

Function Get-NICSpeedDuplex {
   Param (
      [String]$computer
   )
   $key = "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"

   gwmi -Class Win32_NetworkAdapterConfiguration -Computer $computer -Filter "IPEnabled='$true'" | % {
      $suffix = $([String]$_.Index).PadLeft(4,"0")

      # получить значение реестра удаленно для скорости/дуплекса
      $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer)
      $service = $reg.OpenSubKey("$key\\$suffix\\Ndi").GetValue("Service")
      If ($service -imatch "usb") {
         # У этого USB-устройства не будет ключа '*SpeedDuplex'
         New-Object PSObject -Property @{
            "Device" = $_.Description
            "Speed/Duplex" = "USB-устройство"
         }
      } ElseIf ($service -imatch "netft") {
         # Устройство Microsoft Clustered Network не будет иметь ключа '*SpeedDuplex'
         New-Object PSObject -Property @{
            "Device" = $_.Description
            "Speed/Duplex" = "Кластерное устройство"
         }
      } Else {
         $speedduplex = $reg.OpenSubKey("$key\\$suffix").GetValue("*SpeedDuplex")
         $enums = "$key\$suffix\Ndi\Params\*SpeedDuplex\enum"
         New-Object PSObject -Property @{
            "Device" = $_.Description
            "Speed/Duplex" = $reg.OpenSubKey($enums).GetValue($speedduplex)
         }
      }
   }
}

Это немного громоздко, так как ключ реестра закодирован в коде, но это выглядит работающим на моем ПК с Windows 7 и удаленных серверах (2003/2008/2012). Из этой статьи: “Подключение представляет класс устройств сетевого адаптера, которые поддерживает система.”

Вывод скрипта:

PS C:\> Get-NICSpeedDuplex "test-server-xx" | ft -auto

Speed/Duplex     Device                                    
------------     ------                                    
Auto Negotiation vmxnet3 Ethernet Adapter                  
Auto Negotiation vmxnet3 Ethernet Adapter #4               
Cluster Device   Microsoft Failover Cluster Virtual Adapter

Ответ или решение

Для определения состояния дуплекса сетевых адаптеров на Windows 7, вы можете использовать PowerShell, чтобы получить информацию о настройках скорости и дуплекса. В качестве более надежного решения вы можете применить следующий скрипт, который учитывает особенности различных сетевых устройств:

Function Get-NICSpeedDuplex {
   Param (
      [String]$computer
   )
   $key = "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"

   gwmi -Class Win32_NetworkAdapterConfiguration -Computer $computer -Filter "IPEnabled='$true'" | % {
      $suffix = $([String]$_.Index).PadLeft(4,"0")

      # Получение значений реестра для скорости/дуплекса
      $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer)
      $service = $reg.OpenSubKey("$key\\$suffix\\Ndi").GetValue("Service")
      If ($service -imatch "usb") {
         # Устройство USB не имеет ключа '*SpeedDuplex'
         New-Object PSObject -Property @{
            "Устройство" = $_.Description
            "Скорость/Дуплекс" = "USB Устройство"
         }
      } ElseIf ($service -imatch "netft") {
         # Кластерное сетевое устройство не имеет ключа '*SpeedDuplex'
         New-Object PSObject -Property @{
            "Устройство" = $_.Description
            "Скорость/Дуплекс" = "Кластерное Устройство"
         }
      } Else {
         $speedduplex = $reg.OpenSubKey("$key\\$suffix").GetValue("*SpeedDuplex")
         $enums = "$key\$suffix\Ndi\Params\*SpeedDuplex\enum"
         New-Object PSObject -Property @{
            "Устройство" = $_.Description
            "Скорость/Дуплекс" = $reg.OpenSubKey($enums).GetValue($speedduplex)
         }
      }
   }
}

Инструкция по использованию скрипта:

  1. Откройте Windows PowerShell с правами администратора.
  2. Скопируйте и вставьте указанный выше скрипт в PowerShell.
  3. Вызовите функцию, указав имя компьютера, для которого вы хотите получить информацию. Например:
Get-NICSpeedDuplex "имя_вашего_компьютера" | ft -auto

Результат

Вывод скрипта предоставит вам таблицу с информацией о скорости и состоянии дуплекса ваших сетевых адаптеров. Например:

Скорость/Дуплекс     Устройство                                    
------------         ------                                    
Auto Negotiation     vmxnet3 Ethernet Adapter                  
Auto Negotiation     vmxnet3 Ethernet Adapter #4               
Cluster Device       Microsoft Failover Cluster Virtual Adapter

Примечания:

  • Скрипт учитывает различные типы сетевых устройств, такие как USB-устройства и кластерные адаптеры, которые могут не иметь информации о скорости/дуплексе.
  • Обратите внимание, что для оптимального выполнения скрипта могут потребоваться административные права.
  • Рекомендуется запускать данный скрипт на системах, где возможен доступ к реестру, так как он использует удаленный доступ к реестру для получения необходимых данных.

Этот подход обеспечит получение актуальной и корректной информации о состоянии дуплекса сетевых адаптеров на Windows 7.

Оцените материал
Добавить комментарий

Капча загружается...