Powershellスクリプトの中でDNSサーバを指定して名前を解決したいとき。
Resolve-DnsNameコマンドレットが使用できる。
例えば、www.google.co.jp の名前をDNSサーバ 8.8.8.8に問い合わせて解決したいときは、次のようになる。
[powershell$] Resolve-DnsName www.google.co.jp -DnsServer 8.8.8.8この実行結果が上手く動き、満足していました。
ですが、ある日、トラブルが上がって来ました。
パソコンによっては、思っていたのと違う結果となるという話です。
上記のResolve-DnsNameコマンドを実行したら、142.250.199.99が回答として帰ってくる想定なのですが、あるパソコンでは、10.10.10.1と帰ってきたとのこと。
パソコンのOSはというと、Windows10で同じ。
実際のパソコンでコマンドを実行すると、確かに10.10.10.1と回答があります。
なぜだろうと、調べてみたところ、パソコンのhostsファイルにこんな記載がありました。
10.10.10.1 www.google.co.jp
これだ!
と思いましたが、それとともに疑問が一つ。
Resolve-DnsNameコマンドに -DnsServer オプションを指定して、DNS名前解決しているのに、どうしてhostsファイルの方が優先されるのか。と。
調べたところ、Resolve-DnsNameコマンドには、DNS名前解決の結果のみを回答することを指定する -DnsOnlyオプションがありました。
このオプションをつけて、
[powershell$] Resolve-DnsName www.google.co.jp -DnsServer 8.8.8.8 -DnsOnlyとしたところ、(hostsファイルは参照せず)DNS名前解決の結果を回答してくれるようになりました。
一件落着です。