Я пытаюсь получить скорость сетевого адаптера через Powershell на некоторых из моих серверов. Я знаю, что в моем лабораторном сервере есть сетевая карта емкостью 1 ГБ. Однако, когда я делаю это через Powershell, я получаю странное число ниже:
Get-WmiObject -Class Win32_NetworkAdapter -filter "Name LIKE '%Intel%' OR Name LIKE '%HP%' OR Name LIKE '%Broadcom%'" | select name, speed | ft -AutoSize
name speed
---- -----
Intel(R) 82580 Gigabit Network Connection 9223372036854775807
Я возвращаюсь со скоростью "9223372036854775807
"- Я проверил свойство WMI на скорость в Win32_NetworkAdapter
и он возвращается "Bits per second
"- однако в конвертации это выглядит намного больше, чем 1 ГБ в секунду?
Любая идея о том, почему я получаю это обратно, а также лучший способ определить скорость сетевого адаптера (и подтвердить, что это определенно 1 ГБ)?
Поскольку у меня много серверов, я бы предпочел узнать, как лучше всего получить эту информацию, если у вас есть какие-либо идеи.
Получите список компьютеров домена (запущенных в AD):
Модуль импорта ActiveDirectory Get-ADComputer -Filter * | ForEach-Object {$ _. Имя}
Или из файла:
$computers = Get-Content -Path computers.txt
Для нескольких компьютеров:
foreach ($comp in $computers) {
echo $comp
Get-WmiObject win32_networkadapter -ComputerName $comp | Select Name,Manufacturer,Description ,AdapterType,Speed,MACAddress,NetConnectionID | Where-Object {$_.AdapterType -like "*Ethernet*"}
}
Это будет напечатано для каждого компьютера в списке:
Name : Broadcom NetLink (TM) Gigabit Ethernet
Manufacturer : Broadcom Corporation
Description : Broadcom NetLink (TM) Gigabit Ethernet
AdapterType : Ethernet 802.3
Speed : 1000000000
MACAddress : B8:AC:6F:41:B5:D3
NetConnectionID : Ethernet
Примечание. Скорость указывается в битах в секунду, при необходимости конвертируйте в Гбит / с или Мбит / с.
Если в исходном запросе заменить speed
с участием @{n="Speed";e={$_.speed/1mb}}
, он возвращает вычисленный результат в мега-биты.
Если вы это сделаете @{n="Speed";e={$_.speed/1gb}}
, он уважительно вернет результат в Гбитах.
Powershell не знает, какова исходная мера, а МБ / МБ - это то же самое, что и PowerShell. Таким образом, если вам нужен результат в байты, вы вручную разделите результат еще на 8, @{n="Speed";e={$_.speed/1mb/8}}
Измененный сценарий будет:
Get-WmiObject -Class Win32_NetworkAdapter -filter "Name LIKE '%Intel%' OR Name LIKE '%HP%' OR Name LIKE '%Broadcom%'" | select name, @{n="Speed";e={$_.speed/1gb}} | ft -AutoSize
И этот альтернативный формат @{n="name";e={$_.property *operations*}}
будет работать для любого выбора в PowerShell.