PowerShellでパブリックIPアドレスを調べるのは、特にネットワーク関連のトラブルシューティングをしている場合や、単に知りたい場合は便利です。通常、ipinfo.ioやicanhazip.comなどのウェブサイトでは、外部IPアドレスをプレーンテキストで取得できるので、Webブラウザを操作する必要はありません。しかし、IEが無効になっている場合やWindows Server Coreを使用している場合など、PowerShellスクリプトでエラーが発生する場合があり、必ずしも簡単ではありません。そこで、手間をかけずにIPアドレスを取得する方法をご紹介します。
PowerShellでパブリックIPを確認する方法
方法 1: Invoke-WebRequest を使用する (基本的な解析)
これは最も簡単な方法です。特にほとんどのWindowsマシンでは、PowerShellを開いて次のコマンドを実行するだけです。
(Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
これで現在の外部IPアドレスが簡単に表示されるはずです。ただし、IEがインストールされていない、または無効になっているなど、一部の設定ではエラーが発生する可能性があります。
その場合、IE エンジンをバイパスする-UseBasicParsingパラメータを追加できます。
(Invoke-WebRequest -UseBasicParsing -uri "http://ifconfig.me/ip").Content
念のため、これが一番の解決策です。
PowerShell を一時的にやめたい場合は、curlエイリアスも使えます:
(curl ifconfig.me).Content
このコマンドはIPアドレスを出力するだけです。かなり単純ですが、機能的です。
方法 2: System. Net. WebClient を使用する
Invoke-WebRequest で問題が発生する場合は、WebClient クラスが役に立つ場合があります。少し古いですが、信頼性は高いです。
$wc = New-Object System. Net. WebClient $wc. DownloadString("http://myexternalip.com/raw")
これはIPアドレスを文字列として直接取得します。とても簡単です。この方法は、IEやその他の依存関係をあまり気にしない場合もあります。
方法3: OpenDNSによるDNS解決を使用する(NATの背後にあるIPの場合)
これは、NAT を使用しているルーターの背後にいて、外部 IP アドレスを世界に公開したい場合に便利です。PowerShell を使って、ホスト名myip.opendns.comを解決できます。
Resolve-DnsName -Name myip.opendns.com -Server resolver1.opendns.com
または、nslookup を使用する昔ながらの方法:
nslookup myip.opendns.com resolver1.opendns.com
これはあなたのIPアドレスを含むDNS応答を返します。ネットワークが密集している環境では便利です。ただし、表示されるIPアドレスはルーターの外部IPアドレスであり、必ずしもあなたのマシンのIPアドレスではないことに注意してください。
特記事項
これらのコマンドは、特にシステムでInternet Explorerが無効になっている場合や、セキュリティポリシーが厳格に設定されている場合、エラーが発生することがあります。その場合は、-UseBasicParsingフラグを使用すれば、ほとんどの問題は解決します。あるいは、勇気があれば、WebClientソリューションは、サーバーまたは最小限のインストールでは通常機能します。
Windowsは時に複雑なため、すべての方法がすべてのシステムで同じように機能するとは限りません。状況によって結果が異なる場合があります。また、返されるIPアドレスはルーターやプロキシの外部IPアドレスであり、実際のデバイスのIPアドレスではない場合も少なくありません。