tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

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

そういえばブログで書いてなかったな、と次の記事を見て思い出しました。
Checking Network Adapter Speed
せっかくなので紹介しておきます。

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

記事の例通り、System.Net.NetworkInformation.NetworkInterfaceを利用しています。
MSDN - NetworkInterface クラス
また、Speedプロパティは次の通りです。
NetworkInterface.Speed プロパティ プロパティ値 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
ブログでは幅が足りず表記がくずれてしました。 NetworkCard

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

まとめ

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