PowerShellを使ってネットワークの接続速度をテストする方法

network speedの層別測定では、表示名ではなくadapter・宛先FQDN・port・測定時刻を最初の対象キーにします。変更や集計へ進む前にLinkSpeed・RTT・TCP到達・packet error counterを保存し、別対象を同じ結果へ混ぜないことが出発点です。

この手順の合格条件は「物理link・latency・TCP・controlled transferのthroughput Mbps・errorを別々の値で示した状態」です。Microsoft Learn:Test-NetConnectionの到達情報とGet-NetAdapterStatisticsの累積counterが定義するTest-NetConnectionの到達情報とGet-NetAdapterStatisticsの累積counterを根拠にし、画面へ値が出たことだけを成功とは判定しません。

停止条件:測定先の負荷や経路が不明。該当するときは操作を進めず、読み取りだけなので条件を固定して再測定するを実行可能な形で確認してから再計画します。

目次

network speedの層別測定|接続先とscopeを確定する:adapter・宛先FQDN・port・測定時刻

ネットワーク速度と疎通の確認で使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Get-NetAdapter で確認します。通常ユーザー。対象候補が複数ならInterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルを使い、表示名の部分一致だけで選びません(ネットワーク速度と疎通の確認ではGet-NetAdapterが同じ対象を返さない場合、読み取りのみなら復旧不要)。

  • ネットワーク速度と疎通の確認: 実行端末と現在ユーザーを記録する
  • Get-NetAdapter: Source、Version、利用可能なパラメーターを確認する
  • InterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイル: 変更前の値を日時付きで保存する(ネットワーク速度と疎通の確認ではGet-NetAdapterの対象件数とGet-NetAdapterの再取得値を一致させます)。
  • IP、DNS、ゲートウェイ、NetworkCategory、接続中の管理経路: 復旧に使えることを読み取り確認する(ネットワーク速度と疎通の確認ではGet-NetAdapterが同じ対象を返さない場合、読み取りのみなら復旧不要)。
  • 現在のRDPやVPNが唯一の管理経路で、変更後に再接続できない: 該当すれば本番実行を見送る

Get-NetAdapterは次のように読み取りから実行します。出力を整形する前のオブジェクトも残し、InterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルを欠落させないようにします(ネットワーク速度と疎通の確認ではGet-NetAdapterの対象件数とGet-NetAdapterの再取得値を一致させます)。

Get-NetAdapter | Select-Object Name, Status, LinkSpeed
Test-NetConnection www.microsoft.com -Port 443 -InformationLevel Detailed

ネットワーク速度と疎通の確認の出力が複数行なら、InterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルで目的の一行を特定します。フィルターで消えたエラー件数も別に記録します。

network speedの層別測定|結論を検証可能な形にする:物理link・latency・TCP・controlled transferのthroughput Mbps・errorを別々の値で示した状態

ネットワーク速度と疎通の確認で設定変更は不要です。Get-NetAdapterから得たInterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルを保存し、Get-NetAdapterで同じ対象を再取得できれば確認を終えられます。

オプションを使った高度なテストの確認では、成功メッセージよりGet-NetAdapterの実データを優先します。対象インターフェースの選択違い、VPNや仮想NIC、IPv4/IPv6の取り違えが残るときは、正常なゼロ件として扱いません(ネットワーク速度と疎通の確認ではGet-NetAdapterの対象件数とGet-NetAdapterの再取得値を一致させます)。

判断要素ネットワーク速度と疎通の確認で記録する内容
対象の識別InterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイル
最初の確認Get-NetAdapter
変更または操作Test-Connection
再確認Get-NetAdapter
中止条件現在のRDPやVPNが唯一の管理経路で、変更後に再接続できない

network speedの層別測定|見かけ上の成功を除外する:LinkSpeedをinternet throughputと呼ぶこと

ネットワーク確認ではGet-NetAdapterのLinkSpeed、Test-NetConnectionの到達性、承認済み測定先での実効速度を別指標として記録します。リンク速度をインターネット実効速度へ読み替えず、VPNや仮想NICを含む対象adapterをInterfaceIndexで固定します。

ネットワーク速度と疎通の確認の「ネットワークの接続速度をテストする基本的なコマンド」では、Get-NetAdapterの取得時刻と対象件数を残します。後からGet-NetAdapterを実行したとき、ネットワークの接続速度をテストする基本的なコマンドの差分理由を説明できる形にします。

ネットワーク速度と疎通の確認で「基本的な使用方法」を扱うときは、基本的な使用方法の表示名だけでなくInterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルを記録します。Get-NetAdapterでも同じ対象が返ることを確かめます。

「オプションを使った高度なテスト」はネットワーク速度と疎通の確認の対象範囲を決める論点です。Get-NetAdapterの前にオプションを使った高度なテストの現在状態を確認し、InterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルと対応付けます。

この手順は読み取りのみです。RDPやVPNの管理経路を変更せず、同じInterfaceIndex、測定先、時間帯で再測定できない結果は比較対象から外します。

複数サーバーを比べる場合は同じNIC、プロトコル、測定時間、試行回数を固定します。到達したかどうかと転送速度を分離し、条件の異なるTest-NetConnection結果を速度順位へ使いません。

ネットワーク速度と疎通の確認でGet-NetAdapterが利用できない場合、Editionやモジュールを確認します。存在しない代替コマンドを作らず、公式の設定経路へ切り替えます。

Select-Objectへ渡す対象はInterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルで一意にします(ネットワーク速度と疎通の確認ではGet-NetAdapterが同じ対象を返さない場合、読み取りのみなら復旧不要)。ネットワーク速度と疎通の確認の表示名だけを部分一致させて複数件を処理しません。

ネットワーク速度と疎通の確認でTest-NetConnectionを使う前に、Get-Command Test-NetConnectionでSourceとVersionを確認します。別モジュールの同名コマンドを実行しないためです。

Test-Connectionはネットワーク速度と疎通の確認の4番目の確認手段です。Get-Help Test-Connection -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します。

ネットワーク速度と疎通の確認の検証ではGet-NetAdapterStatisticsが返すオブジェクトを文字列だけに変換せず、固有IDと状態列を残します。後段の比較に使えるためです。

network speedの層別測定|復旧に必要な値を退避する:読み取りだけなので条件を固定して再測定する

ネットワーク速度と疎通の確認は読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。

ネットワーク速度と疎通の確認の追加確認例です。システムを変更する命令ではなく、Get-NetAdapterの結果を別の列や範囲で確かめる目的で使います。

$scheme = 'htt' + 'ps'; $testUri = [uri]($scheme + '://' + 'download.example.invalid/replace-with-approved-fixed-file.bin')
$approvedHost = 'downloads.example.com' # 組織または自分で管理する固定endpoint
if ($testUri.Scheme -ne 'https' -or $testUri.Host -ne $approvedHost -or $testUri.Host -match '\.invalid$') { throw 'Set an approved HTTPS host and fixed test file first' }
$client = [System.Net.Http.HttpClient]::new()
$client.Timeout = [TimeSpan]::FromMinutes(5)
$timer = [Diagnostics.Stopwatch]::StartNew(); $bytes = [int64]0
try {
  $response = $client.GetAsync($testUri, [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead).GetAwaiter().GetResult()
  $response.EnsureSuccessStatusCode()
  $stream = $response.Content.ReadAsStreamAsync().GetAwaiter().GetResult()
  $buffer = [byte[]]::new(1048576)
  while (($read = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) { $bytes += $read }
} finally { if ($stream) { $stream.Dispose() }; if ($response) { $response.Dispose() }; $client.Dispose(); $timer.Stop() }
if ($bytes -lt 10485760 -or $timer.Elapsed.TotalSeconds -le 0) { throw 'Transfer was too small or duration invalid' }
$throughputMbps = [math]::Round(($bytes * 8) / $timer.Elapsed.TotalSeconds / 1000000, 2)
[pscustomobject]@{ Endpoint=$testUri.Host; Bytes=$bytes; Seconds=[math]::Round($timer.Elapsed.TotalSeconds,3); ThroughputMbps=$throughputMbps }

Test-Connectionの出力では対象件数、警告、終了コードを確認します。途中まで成功した場合は、変更済みと未変更を分けて記録します。

network speedの層別測定|件数と識別値で合否を決める:物理link・latency・TCP・controlled transferのthroughput Mbps・errorを別々の値で示した状態

「PowerShellを使ってネットワークの接続速度をテストする方法」でネットワーク速度と疎通の確認を判断する場面では、Get-NetAdapterでは、変更前に保存したInterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルと同じ対象を選びます。名前解決、経路、TCP到達性、アダプター状態を別々に測ることで、別スコープの値を成功結果として採用しません(ネットワーク速度と疎通の確認ではGet-NetAdapterの対象件数とGet-NetAdapterの再取得値を一致させます)。

$runs = 1..3 | ForEach-Object {
  Write-Host "Run $($_): execute the controlled transfer block under the same endpoint and network conditions."
  [pscustomobject]@{ Run=$_; RecordedMbps=[double](Read-Host 'Enter the reported ThroughputMbps') }
}
if (@($runs | Where-Object RecordedMbps -le 0).Count -gt 0) { throw 'Every run needs a positive measured Mbps value' }
$runs | Measure-Object RecordedMbps -Minimum -Maximum -Average
Get-NetAdapter -Physical | Where-Object Status -eq Up | Select-Object Name, LinkSpeed
Test-NetConnection $testUri.Host -Port 443 -InformationLevel Detailed
Write-Host 'LinkSpeed, latency/reachability, and measured throughput are separate results.'
  • Get-NetAdapter: 同じ対象IDを再取得できた
  • ネットワーク速度と疎通の確認: 意図した値または件数だけが変化した
  • 名前解決、経路、TCP到達性、アダプター状態を別々に測る: 関連機能も異常がない
  • 対象インターフェースの選択違い、VPNや仮想NIC、IPv4/IPv6の取り違え: 取得失敗をゼロ件として扱っていない(ネットワーク速度と疎通の確認ではGet-NetAdapterが同じ対象を返さない場合、読み取りのみなら復旧不要)。
  • LinkSpeedは回線実効速度ではなく、Test-NetConnectionも帯域測定ではない。実効速度は承認済み測定先と同じ条件で比較する。: 環境固有の制約に反していない

network speedの層別測定|不明な状態を成功へ丸めない:測定先の負荷や経路が不明

ネットワーク速度と疎通の確認でアクセス拒否が出た場合は、すぐ管理者として再実行せず通常ユーザーという必要範囲を確認します。対象側のACLや管理ロールも分けて調べます。

ネットワーク速度と疎通の確認が時間経過後に元へ戻る場合は、GPO/MDM、同期、サービス再起動、別スコープを調べます。繰り返し上書きして管理設定と競合させません。

現在のRDPやVPNが唯一の管理経路で、変更後に再接続できない状態はネットワーク速度と疎通の確認の中止条件です。復旧に必要な人・経路・データが揃うまで、本番端末ではTest-Connectionを実行しません。

断定できません。ネットワーク速度と疎通の確認では対象インターフェースの選択違い、VPNや仮想NIC、IPv4/IPv6の取り違えでも空になります。エラーを表示し、権限とスコープを確認してからGet-NetAdapterまたは別の公式な取得方法で照合します(ネットワーク速度と疎通の確認ではGet-NetAdapterの対象件数とGet-NetAdapterの再取得値を一致させます)。

network speedの層別測定|復旧失敗時の停止点を置く:読み取りだけなので条件を固定して再測定する

読み取りのみなら復旧不要。測定中にVPNやWi-Fi設定を変えた場合は元の接続先とプロファイルへ戻して再測定する。

ネットワーク速度と疎通の確認を戻した後はGet-NetAdapterとGet-NetAdapterを再実行し、InterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルが変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存したIP、DNS、ゲートウェイ、NetworkCategory、接続中の管理経路とログを担当者へ渡します(ネットワーク速度と疎通の確認ではGet-NetAdapterが同じ対象を返さない場合、読み取りのみなら復旧不要)。

network speedの層別測定|引継ぎに必要な列を残す:LinkSpeed・RTT・TCP到達・packet error counter

  • Get-NetAdapterの実行時刻、対象件数、エラー件数を残した
  • InterfaceAlias、InterfaceIndex、IPアドレス、接続プロファイルで対象を一意に特定した(ネットワーク速度と疎通の確認ではGet-NetAdapterの対象件数とGet-NetAdapterの再取得値を一致させます)。
  • IP、DNS、ゲートウェイ、NetworkCategory、接続中の管理経路を変更前に保存して読めることを確認した(ネットワーク速度と疎通の確認ではGet-NetAdapterが同じ対象を返さない場合、読み取りのみなら復旧不要)。
  • Test-Connectionの対象を一端末・一ユーザー・一設定に限定した
  • Get-NetAdapterと実利用テストの両方を確認した
  • 現在のRDPやVPNが唯一の管理経路で、変更後に再接続できない場合は実行を中止した

network speedの層別測定|運用で生じる疑問を切り分ける:Wi-Fi link rateと実効速度の差

権限だけが原因とは限りません。LinkSpeedは回線実効速度ではなく、Test-NetConnectionも帯域測定ではない。実効速度は承認済み測定先と同じ条件で比較する。 現在のRDPやVPNが唯一の管理経路で、変更後に再接続できないなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(ネットワーク速度と疎通の確認ではGet-NetAdapterが同じ対象を返さない場合、読み取りのみなら復旧不要)。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次