IPアドレス確認はPowerShell「gip」で!コマンドプロンプト「ipconfig」からの卒業
PowerShellのコマンドレットってコマンドが長いイメージありますよね。
モダンなWindows Terminalであれば、Tabキーをつかった入力補完機能を使うという手もありますが、候補が多いのでコマンドをある程度覚えておく必要があります。
わたしが最近、意識的に使っているのはエイリアスを使ったコマンドレットの実行。
タイトルにある「gip
」とは「Get-NetIPConfiguration
」のことで22文字から3文字で文字数の差はなんと「19文字」です。
コマンドの覚え方も“G et I P アドレス”と記憶すると簡単。
(参考情報:過去にエイリアスの一覧を調べた記事)
コマンドプロンプトの「ipconfig
」の8文字と比較しても入力する文字数が少なく、出力結果も見やすいという良いことづくしな「PowerShellコマンドレットでIPアドレスを確認する方法」を紹介します。
新旧コマンドの比較
PowerShellコマンドレット「gip(Get-NetIPConfiguration)」
わたしが最近、意識的に使っている「gip
(Get-NetIPConfiguration
)」の結果は以下のとおり。
gip(Get-NetIPConfiguration) - テキストベース
PowerShell 7.5.2
PS C:\Users\XXXX> gip
InterfaceAlias : イーサネット
InterfaceIndex : 11
InterfaceDescription : Realtek PCIe GbE Family Controller
NetProfile.Name : ネットワーク 3
IPv4Address : XXX.XXX.XXX.XXX
IPv4DefaultGateway : XXX.XXX.XXX.XXX
DNSServer : XXX.XXX.XXX.XXX
XXX.XXX.XXX.XXX
InterfaceAlias : vEthernet (Default Switch)
InterfaceIndex : 21
InterfaceDescription : Hyper-V Virtual Ethernet Adapter
IPv4Address : XXX.XXX.XXX.XXX
IPv6DefaultGateway :
IPv4DefaultGateway :
DNSServer : fec0:0:0:ffff::1
fec0:0:0:ffff::2
fec0:0:0:ffff::3
InterfaceAlias : イーサネット 2
InterfaceIndex : 33
InterfaceDescription : VirtualBox Host-Only Ethernet Adapter
IPv4Address : XXX.XXX.XXX.XXX
IPv6DefaultGateway :
IPv4DefaultGateway :
DNSServer : fec0:0:0:ffff::1
fec0:0:0:ffff::2
fec0:0:0:ffff::3
InterfaceAlias : Bluetooth ネットワーク接続
InterfaceIndex : 7
InterfaceDescription : Bluetooth Device (Personal Area Network)
NetAdapter.Status : Disconnected
PS C:\Users\XXXX>
コマンドプロンプト「ipconfig」
みんな大好き「ipconfig
」の結果は以下のとおり。
ipconfig - テキストベース
Microsoft Windows [Version 10.0.19045.6216]
(c) Microsoft Corporation. All rights reserved.
C:\Users\XXXX>ipconfig
Windows IP 構成
イーサネット アダプター vEthernet (Default Switch):
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::XXXX:XXXX:XXXX:XXXX%XX
IPv4 アドレス . . . . . . . . . . . .: XXX.XXX.XXX.XXX
サブネット マスク . . . . . . . . . .: 255.255.240.0
デフォルト ゲートウェイ . . . . . . .:
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: XXX.XXX.XXX.XXX
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: XXX.XXX.XXX.XXX
イーサネット アダプター イーサネット 2:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::XXXX:XXXX:XXXX:XXXX%XX
IPv4 アドレス . . . . . . . . . . . .: XXX.XXX.XXX.XXX
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .:
イーサネット アダプター Bluetooth ネットワーク接続:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
C:\Users\XXXX>
違いを比較
gip
がオブジェクト形式となるため、取得したデータの加工や変換、フィルターなどが容易です。
実際に実行して比較してみましょう。
出力形式(違いを比較)
gip: オブジェクト形式
# gip は、オブジェクト形式で出力されているため、データ加工やフィルタが容易。
PS C:\Users\XXXX> $result = gip
PS C:\Users\XXXX>
PS C:\Users\XXXX> $result.GetType().FullName
System.Object[]
PS C:\Users\XXXX>
PS C:\Users\XXXX> $result[0] # 1つ目のネットワークインターフェイスの情報
InterfaceAlias : イーサネット
InterfaceIndex : 11
InterfaceDescription : Realtek PCIe GbE Family Controller
NetProfile.Name : ネットワーク 3
IPv4Address : XXX.XXX.XXX.XXX
IPv4DefaultGateway : XXX.XXX.XXX.XXX
DNSServer : XXX.XXX.XXX.XXX
XXX.XXX.XXX.XXX
PS C:\Users\XXXX>
ipconfig: テキスト形式
# ipconfig は、テキスト形式で出力されているため、単純に行ごとデータが入っていてデータ加工やフィルタを行う場合は複雑なデータ変換が必要。
PS C:\Users\XXXX> $result = ipconfig
PS C:\Users\XXXX>
PS C:\Users\XXXX> $result.GetType().FullName
System.Object[]
PS C:\Users\XXXX>
PS C:\Users\XXXX> $result[0] # コマンド結果の1行目の空行が表示
PS C:\Users\XXXX>
PS C:\Users\XXXX> $result[1] # コマンド結果の2行目のラベル行が表示
Windows IP 構成
PS C:\Users\XXXX>
データ加工・フィルター
gip: 豊富なプロパティ
PS C:\Users\XXXX> $result = gip
PS C:\Users\XXXX>
PS C:\Users\XXXX> $result | Get-Member -MemberType Property
TypeName: NetIPConfiguration
Name MemberType Definition
---- ---------- ----------
AllIPAddresses Property ciminstance[] AllIPAddresses {get;set;}
CompartmentId Property int CompartmentId {get;set;}
ComputerName Property string ComputerName {get;set;}
Detailed Property bool Detailed {get;set;}
DNSServer Property ciminstance[] DNSServer {get;set;}
InterfaceAlias Property string InterfaceAlias {get;set;}
InterfaceDescription Property string InterfaceDescription {get;set;}
InterfaceIndex Property int InterfaceIndex {get;set;}
IPv4Address Property ciminstance[] IPv4Address {get;set;}
IPv4DefaultGateway Property ciminstance[] IPv4DefaultGateway {get;set;}
IPv6Address Property ciminstance[] IPv6Address {get;set;}
IPv6DefaultGateway Property ciminstance[] IPv6DefaultGateway {get;set;}
IPv6LinkLocalAddress Property ciminstance[] IPv6LinkLocalAddress {get;set;}
IPv6TemporaryAddress Property ciminstance[] IPv6TemporaryAddress {get;set;}
NetAdapter Property ciminstance NetAdapter {get;set;}
NetCompartment Property ciminstance NetCompartment {get;set;}
NetIPv4Interface Property ciminstance NetIPv4Interface {get;set;}
NetIPv6Interface Property ciminstance NetIPv6Interface {get;set;}
NetProfile Property ciminstance NetProfile {get;set;}
PS C:\Users\XXXX>
ipconfig: 最小限のプロパティ
PS C:\Users\XXXX> $result = ipconfig
PS C:\Users\XXXX>
PS C:\Users\XXXX> $result | Get-Member -MemberType Property
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
PS C:\Users\XXXX>
他のコマンドレットに連携
gip: 項目名を含めオブジェクトにあるデータが描画
PS C:\Users\XXXX> gip | Out-GridView
ipconfig: 単純にコマンド結果が行数ごとに描画
PS C:\Users\XXXX> ipconfig | Out-GridView
フィルターや加工が容易
フィルター:IPv4アドレスが設定されているネットワークインターフェイスを表示
PS C:\Users\XXXX> (gip).NetIPv4Interface
ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- -------------- ------------- ------------ --------------- ---- --------------- -----------
11 イーサネット IPv4 1500 25 Disabled Connected ActiveStore
21 vEthernet (Default Switch) IPv4 1500 15 Disabled Connected ActiveStore
33 イーサネット 2 IPv4 1500 74 Disabled Connected ActiveStore
7 Bluetooth ネットワーク接続 IPv4 1500 65 Enabled Disconnected ActiveStore
PS C:\Users\XXXX>
加工:IPv4アドレスで特定の項目を表示
IPv4が有効なインターフェイスのみ表示し、必要な項目である「インターフェイス名
/ IPアドレス(IPv4)
/ デフォルトゲートウェイ
」の3つを表示するケース。
PS C:\Users\XXXX> gip | Where-Object { $_.IPv4Address } | Select-Object InterfaceAlias,
>> @{ Name = 'IPAddress'; Expression = { $_.IPv4Address.IPAddress } },
>> @{ Name = 'DefaultGateway'; Expression = { $_.IPv4DefaultGateway.NextHop } }
InterfaceAlias IPAddress DefaultGateway
-------------- --------- --------------
イーサネット XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX
vEthernet (Default Switch) XXX.XXX.XXX.XXX
イーサネット 2 XXX.XXX.XXX.XXX
Bluetooth ネットワーク接続 XXX.XXX.XXX.XXX
PS C:\Users\XXXX>
gipのメリット・デメリット
メリット
-
表示が見やすい
ラベル文字が緑色・整ったレイアウトのため、比較的に見やすい。
-
オブジェクト型で加工やフィルターが楽
前述のとおり。 -
パイプラインや変数などで他の処理にも渡しやすい
前述のとおり。 -
エイリアスであれば3文字で実行可能
前述のとおり。
gipのデメリット
-
覚えにくい
ずっと「ipconfig
(UNIXだとifconfig
)」で覚えているため、新しいコマンドがすぐに出てこない。
→Get-NetIPConfiguration
だと覚えるのに時間がかかるので、gip
で覚える。 -
低スペックのPCではもたつく可能性
「コマンドプロンプト +ipconfig
」の方が軽いので起動から表示までの時間を計測した場合に比較的はやい。
→ 表示した結果をより見やすくフィルターしたり、加工する場合は「PowerShell +gip
」の方が良い。 -
共有するコストがかかる可能性あり
歴史があるため、ipconfig
の方が一般的。エビデンスに残すなど不特定多数に共有する場合はipconfig
の結果の方が好まれる可能性も。
→ 個人的には、コマンドプロンプトはいつか無くなるツールであり、そこまで気にする必要がないと思っているので、
PowerShellを積極的に使っていきたいと考えている。 -
確認しかできない
PowerShellコマンドレットの設計思想は「"動詞"
-"名詞"
」です。
gip
→Get-NetIPConfiguration
は「IPの設定(NetIPConfiguration
)を取得して表示(Get
)」のコマンド。
つまりは、gip
は 取得のみ行うコマンドレットとなり、その他の機能は実装されていません。ipconfig
の機能目的 PowerShellでの代替コマンド ipconfig
oripconfig /all
IP構成情報の表示 gip
(フル:Get-NetIPConfiguration
)ipconfig /release
IPアドレスの解放 Restart-NetAdapter
(解放のみは不可。解放と再取得を同時に行う)ipconfig /renew
IPアドレスの再取得 Restart-NetAdapter
ipconfig /flushdns
DNSキャッシュのクリア Clear-DnsClientCache
→ 個人的にはPowerShellコマンドレットの方を積極的に取り入れていこうと思います。
まとめ
ここまで調査した結果からも、IPアドレスの確認を目的とするならば、「gip
(Get-NetIPConfiguration
)」の方がモダンでよさそう。
ただ、不特定多数に共有する場合や、確認以外を目的とする場合は、まだまだipconfig
の出番はありそうですね。
ちなみにPowerShellには、gip
(Get-NetIPConfiguration
)の他にGet-NetIPAddress
というコマンドレットでもIPアドレスを確認できます。
Get-NetIPAddress
にはエイリアスがなく覚えにくいので本記事では紹介していませんが、IPアドレスの情報に特化したコマンドレットで、状況によっては使い分けた方が便利かもしれません。
参考文献
関連記事
Discussion