tech.guitarrapc.cóm

Technical updates

PowerShellでネットワークインターフェースの速度を取得する

そういえばブログで書いてなかったな、と次の記事を見て思い出しました。

Checking Network Adapter Speed

せっかくなので紹介しておきます。

ネットワークインタフェースの速度を取得する

記事の例通り、System.Net.NetworkInformation.NetworkInterfaceを利用しています。

MSDN - NetworkInterface クラス.aspx)

また、Speedプロパティは次の通りです。

NetworkInterface.Speed プロパティ.aspx)

プロパティ値

bps (bits per second) 単位で速度を示すInt64値。 このプロパティによって返される値は、ネットワーク インタフェースから報告されます。動的には計算されません。PowerShellでは以下のコードで取得できます。

[System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() | select Description, Speed, OperationalStatus

結果です。

Description                                Speed OperationalStatus
-----------                                ----- -----------------
Realtek PCIe GBE Family Controller #2 1000000000                Up
Realtek PCIe GBE Family Controller            -1              Down
Software Loopback Interface 1         1073741824                Up
Microsoft ISATAP Adapter                  100000              Down
Teredo Tunneling Pseudo-Interface         100000                Up

生きているネットワークインタフェースの速度を取得する

せっかくなので少しフィルタしてみます。 あとは、bpsでは読みにくいのでMbpsとGbpsを記載します。

[System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() `
    | where {$_.OperationalStatus -eq "Up" } `
    | select Description,
        @{label="Speed(Mbps)";expression={$_.Speed / 1000 / 1000}},
        @{label="Speed(Gbps)";expression={$_.Speed / 1000 / 1000 / 1000}},
        OperationalStatus `
    | sort Description `
    | Format-Table -AutoSize

結果です。

Description                           Speed(Mbps) Speed(Gbps) OperationalStatus
-----------                           ----------- ----------- -----------------
Realtek PCIe GBE Family Controller #2        1000           1                Up
Software Loopback Interface 1         1073.741824 1.073741824                Up
Teredo Tunneling Pseudo-Interface             0.1      0.0001                Up

function化

適当にfunction化してみます。

#region function get-kbps,Mbps
function get-Mbps{
    param(
      [Parameter(Mandantory=$true)]
      [int]$speed
    )

    $Mbps = $speed / 1000 / 1000
    return $Mbps
}

function get-Gbps{
    param(
      [Parameter(Mandantory=$true)]
      [int]$speed
    )

    $Gbps = $speed / 1000 / 1000 / 1000
    return $Gbps
}
#endregion

function Get-NetworkInterfaceSpeed{
  [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() |
  where {$_.OperationalStatus -eq "Up" } |
  select Description,
    @{label="Speed(Mbps)";expression={ get-Mbps -speed $_.Speed }},
    @{label="Speed(Gbps)";expression={ get-Gbps -speed $_.Speed }},
    OperationalStatus |
  sort Description |
  Format-Table -AutoSize
}

Get-NetworkInterfaceSpeed

まとめ

簡単ですが、有意義なデータですので活用する場面は多いですね。