Вопрос или проблема
это будет для 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)
}
}
}
}
Инструкция по использованию скрипта:
- Откройте Windows PowerShell с правами администратора.
- Скопируйте и вставьте указанный выше скрипт в PowerShell.
- Вызовите функцию, указав имя компьютера, для которого вы хотите получить информацию. Например:
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.