我试图通过我的一些服务器上的Powershell获得网卡的速度。 对于我的实验室服务器,我知道那里有一个1GB的网卡。 但是,当我通过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 ” – 我在Win32_NetworkAdapter检查了速度的WMI属性,它返回“ Bits per second ” – 但是,在转换时,这看起来像每秒超过1GB?
任何想法,为什么我回来这也是确定网卡速度的最佳方式(并确认它绝对是1GB)?
因为我有很多服务器 – 如果您有任何想法,我真的很想知道获取这些信息的最佳方式。
获取域计算机列表(在AD中运行):
Import-Module ActiveDirectory Get-ADComputer -Filter * | ForEach-Object {$ _。Name}
或从一个文件:
$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
注意:速度是每秒位数,根据需要转换为Gbps或Mbps
对于原始查询,如果用@{n="Speed";e={$_.speed/1mb}}replacespeed ,则返回一个以兆位为单位的计算结果。
如果你做@{n="Speed";e={$_.speed/1gb}} ,那么它将以Gbits的forms返回结果。
Powershell不知道原来的措施是什么,MB / MB是相同的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中的任何select。