一部のサーバーでPowershellを介してNICの速度を取得しようとしています。ラボサーバーの場合、1GBのNICがあります。ただし、 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
」が返されます-しかし、変換すると、これは1秒あたり1GB?
なぜ私がこれを取り戻しているのか、そしてNIC速度を決定する(そしてそれが間違いなく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に変換します
元のクエリでは、speed
を@{n="Speed";e={$_.speed/1mb}}
に置き換えると、メガ-ビットで計算結果が返されます。
@{n="Speed";e={$_.speed/1gb}}
を実行すると、結果がギガビットで返されます。
Powershellは元の測定値が何であるかを認識せず、MB/mbはpowershellと同じです。したがって、結果をbytesにする必要がある場合は、手動で結果を別の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のすべての選択で機能します。