PowerShellですべてのネットワークインターフェースのIPアドレスを確認するなら、中心になるのはGet-NetIPAddressです。ただし、表示された行をそのまま「現在インターネット通信に使うアドレス」と考えると誤ります。Wi-Fi、Ethernet、VPN、Hyper-V、ループバック、トンネル、切断中のインターフェースや、IPv4とIPv6が同時に並ぶためです。本記事では、アドレス、アダプター、IP構成、経路を読み取り専用コマンドで対応付け、必要な行だけを安全に絞り込む方法を解説します。
最初に「すべて」の範囲と目的を決める
資産台帳へ端末の全アドレスを記録したいのか、現在の既定経路で使うアドレスを知りたいのか、特定VPNが付与したアドレスを探すのかで、必要な結果は異なります。全件表示には一時アドレス、リンクローカル、ループバック、仮想アダプターも含まれ得ます。端末名、実行時刻、接続中のネットワーク、VPNや仮想化の有無を記録し、同じ名前のインターフェースが複数ないかを確認します。
IPアドレスは接続やDHCP更新、スリープ復帰、VPN接続、IPv6のプライバシー機能で変わります。一度取得した一覧を恒久的な識別子として扱いません。また、アドレス一覧は社内構成を推測できる情報です。一般公開の質問やスクリーンショットへ貼るときは、問題の再現に必要な範囲へ絞り、端末名、DNSサフィックス、グローバルIPv6、内部セグメントを伏せます。
Get-NetIPAddressでIPv4とIPv6を一覧表示する
Get-NetIPAddressを引数なしで実行すると、ローカルコンピューターのIPアドレス構成を取得できます。標準表示だけでは列が省略されることがあるため、IPAddress、AddressFamily、InterfaceAlias、InterfaceIndex、PrefixLength、AddressState、PrefixOrigin、SuffixOriginを明示すると、由来と状態を確認しやすくなります。
Get-NetIPAddress |
Select-Object InterfaceIndex, InterfaceAlias, AddressFamily,
IPAddress, PrefixLength, AddressState, PrefixOrigin, SuffixOrigin |
Sort-Object InterfaceIndex, AddressFamily, IPAddress
InterfaceAliasは利用者が変更できる表示名ですが、InterfaceIndexは他のネットワークコマンドと対応付けやすい番号です。どちらか一方だけで識別せず、必要ならアダプターの説明も添えます。PrefixLengthはIPv4のサブネットマスクやIPv6プレフィックス長に相当する情報です。表示されたアドレスへ外部から到達できるか、DNSへ登録されているか、通信に選ばれるかは別の確認事項です。
AddressFamilyとAddressStateで必要な行へ絞る
IPv4だけが必要ならGet-NetIPAddress -AddressFamily IPv4、IPv6だけなら-AddressFamily IPv6を使います。利用可能な候補を見る例ではWhere-Object AddressState -eq Preferredで絞れますが、Preferredだから既定経路に選択されるとは限りません。通信先、メトリック、経路、送信元選択規則により実際のアドレスが決まります。
Get-NetIPAddress -AddressFamily IPv4 |
Where-Object AddressState -eq Preferred |
Select-Object InterfaceAlias, InterfaceIndex, IPAddress, PrefixLength
Tentativeは重複アドレス検出などの途中、Duplicateは重複が検出された状態、Deprecatedは新しい通信の送信元として優先されにくい状態を示す手掛かりです。状態名だけで原因を断定せず、同じインターフェースの構成、イベントログ、DHCPやルーター側の記録を確認します。取得直後に状態が変わる場合もあるため、障害時刻に近い結果を残します。
特殊なアドレスを通常のLANアドレスと区別する
IPv4の127.0.0.1はループバック、169.254.0.0/16はリンクローカルです。IPv6の::1はループバック、fe80::/10はリンクローカルで、同じ文字列の範囲が複数インターフェースに存在できるためスコープIDやInterfaceIndexが重要です。これらが表示されても異常とは限りませんが、業務LANのアドレスとして報告しないよう区別します。
IPv6にはグローバル、ユニークローカル、一時アドレスなどがあり、一つのインターフェースへ複数付くことが普通です。「IPv6が複数あるから重複」とは限りません。反対にIPv4が169.254だけで、組織がDHCPによるプライベートアドレスを想定しているなら、DHCPや認証の失敗が疑われます。IPを手動設定して症状を隠す前に、期待する設計と取得元を管理者へ確認します。
Get-NetIPConfigurationで日常確認に必要な構成をまとめる
Get-NetIPConfigurationは、インターフェース、IPアドレス、既定ゲートウェイ、DNSサーバーなどを関連付けて表示する入口です。「接続中の各インターフェースがどのアドレスとゲートウェイを持つか」を人が確認する場合は、Get-NetIPAddressの全件表より読みやすいことがあります。-InterfaceAliasまたは-InterfaceIndexで対象を限定できます。
Get-NetIPConfiguration -Detailed |
Select-Object InterfaceAlias, InterfaceIndex, NetProfile,
IPv4Address, IPv6Address, IPv4DefaultGateway, DNSServer
オブジェクト内のアドレスやDNSは入れ子になっているため、CSVへそのまま出すと型名や文字列表現だけになる場合があります。自動化では必要な値を展開し、列の意味を定義します。DNSサーバーが設定されていることと名前解決が成功すること、既定ゲートウェイがあることと外部へ到達できることは同じではありません。Resolve-DnsNameやTest-NetConnectionで別に検証します。
Get-NetAdapterで物理・仮想アダプターへ対応付ける
Get-NetAdapterでName、InterfaceDescription、Status、MacAddress、LinkSpeed、ifIndexを取得し、Get-NetIPAddressのInterfaceIndexと照合します。Wi-FiやEthernetだけでなく、VPN、Hyper-V、コンテナー、ループバック、フィルタードライバー関連のアダプターが並ぶことがあります。StatusがUpのものだけに絞ると、切断中の設定を見落とす点に注意します。
Get-NetAdapter -IncludeHidden |
Select-Object ifIndex, Name, InterfaceDescription, Status, MacAddress, LinkSpeed
-IncludeHiddenは通常表示されないアダプターも含めるため、結果が多くなります。障害調査で必要なときだけ使い、最初は既定の可視アダプターから確認します。仮想アダプターの存在だけで不要と判断したり、重複したように見えるIPを消したりしません。製品、VPN、仮想化機能が管理するアダプターを削除すると通信や仮想マシンへ影響します。この記事の手順は列挙に限定します。
Get-NetRouteで実際に使われる経路を確認する
アドレス一覧からインターネット通信に使うものを知りたい場合、既定経路を確認します。IPv4では宛先プレフィックス0.0.0.0/0、IPv6では::/0が一般的な既定経路です。Get-NetRouteでInterfaceIndex、NextHop、RouteMetricを表示し、対応するインターフェースとアドレスを照合します。VPN接続中は複数の既定経路や、特定プレフィックスだけの経路が追加されることがあります。
Get-NetRoute -DestinationPrefix "0.0.0.0/0" |
Sort-Object RouteMetric |
Select-Object InterfaceIndex, NextHop, RouteMetric, State
最小のRouteMetricだけで常に利用経路を断定できるとは限らず、インターフェースメトリック、アドレスファミリ、より具体的な宛先プレフィックス、ポリシー、VPN製品が関係します。特定宛先ならTest-NetConnection -DiagnoseRoutingなどで選択された送信元と経路を確認します。経路を削除・追加して試すと接続断やセキュリティ境界の迂回を招くため、読み取り結果を管理者へ渡します。
リモート端末と複数端末では取得失敗を分離する
Get-NetIPAddressなどは-CimSessionを利用して許可されたリモート端末から取得できます。ただし、認証、WinRM/CIM構成、ファイアウォール、権限、端末停止が原因で失敗することがあります。空の結果を「IPアドレスなし」と記録せず、成功、対象なし、接続失敗、権限不足、タイムアウトを別の状態として保存します。資格情報をスクリプトへ平文で書きません。
複数端末の棚卸しでは、全アドレスを一つのセルへ連結するより、端末、InterfaceIndex、InterfaceAlias、AddressFamily、IPAddress、PrefixLengthを一行ずつ持つ形式が差分比較に向きます。取得時刻とデータ保管期限を設け、不要なMACアドレスや内部DNS情報を集めないようにします。端末がVPN外や社外ネットワークにいる可能性もあるため、収集目的とアクセス権を限定します。
「IPがある」から通信成功までを段階的に確かめる
IPアドレスがPreferredで表示されても、重複、誤ったプレフィックス、ゲートウェイ不在、DNS失敗、プロキシ、VPN、ファイアウォール、接続先停止が残る可能性があります。まず同一インターフェースのIP、ゲートウェイ、DNS、既定経路を確認し、次に組織で許可されたゲートウェイや業務サービスへ限定して診断します。アドレス一覧だけで「ネットワーク正常」と結論付けません。
逆に、想定していないアドレスがあっても、仮想化、コンテナー、VPN、IPv6一時アドレスなど正当な理由があります。製品名、InterfaceDescription、ルート、実行中の業務機能と照合します。問題報告には、すべてのアドレスを無条件で貼るのではなく、関係するInterfaceIndexとアドレスファミリ、状態、既定経路、失敗した検証だけを含めると、安全で再現可能な調査になります。
実務で使う確認チェックリスト
- 全アドレスの棚卸しか、現在通信に使うアドレスの特定かを決めたか
- Get-NetIPAddressでAddressFamily、InterfaceIndex、AddressStateを表示したか
- ループバック、リンクローカル、仮想、VPN、一時IPv6を区別したか
- Get-NetIPConfigurationでゲートウェイとDNSを対応付けたか
- Get-NetAdapterのifIndexとアダプター説明を照合したか
- Get-NetRouteで対象宛先の経路を確認し、IPがあるだけで通信正常と判断していないか
- 内部IP、端末名、DNS情報を必要以上に公開していないか
結果を保存するときは、実行日時、端末名、Windowsのビルド、PowerShellの版、実行ユーザー、対象範囲を添えます。値が取得できなかった場合は「存在しない」とせず、権限、モジュール、リモート接続、対象OS、実行セッションを確認します。設定変更、停止、削除、再起動が必要になった場合は、読み取り確認とは別の作業として影響範囲、承認、バックアップ、戻し方を決めてから行います。

コメント