昨日、Windows上で何度も何度もnslookupコマンドを発行するのが面倒なので、PowerShell のスクリプトで複数のIPアドレスから名前解決が出来るようにしたことを書きました。
機能的にはこれで十分なのですが、こういう使い捨て系のスクリプトはしばらくすると、IPアドレスをまとめて書き込むテキストファイルの存在を忘れてしまい、消してしまいそうです。(消してしまうことも問題ないのですけど、スクリプトの中身を見ながらもう一度作るというのも面倒な話。
IPアドレスやホスト名を書いておくテキストファイルを廃止し、プログラムの先頭部分にデータを含ませるように変更しました。(ヒアドキュメント)
答えを導くまでの流れは同じですが、スクリプト自体を消去してしまわない限り、データを失うことはありません。
ヒアドキュメントで書くと決めたものの、Powershell のヒアドキュメントの使い方がわからない。
検索してみたところ、@” と “@ で囲って配列に取り込めば良さそうです。
以下のように、@” と “@ に囲まれた行を、IPアドレスの記述で埋めます。
# ヒアドキュメント型、連続 nslookup by PowerShell # $ips=@" 113.36.217.33 113.36.53.229 113.36.63.96 113.37.111.122 113.37.135.116 113.37.136.138 113.37.158.34 113.37.30.210 113.38.210.210 113.39.2.54 113.40.102.77 "@ $list = $ips -split "\n" #配列の中のメンバー数をカウントして $numに代入する。 $num = ($list | Measure-Object).Count # $num回、つまりヒアドキュメント内のリストの数だけループする for ($i = 0; $i -lt $num; $i++){ nslookup $list[$i] 8.8.8.8| Select-String -NotMatch "サーバー" | Select-String -NotMatch "8.8.8.8" } exit
そして PowerShell ISE から実行します。
実行結果は、ファイルを分ける場合と同じ、名前解決にタイムアウトが発生したり、キャッシュにヒットした場合は赤でメッセージを出力します。
名前: 113x36x217x33.ap113.ftth.ucom.ne.jp
Address: 113.36.217.33
名前: 113x36x53x229.ap113.ftth.ucom.ne.jp
Address: 113.36.53.229
名前: 113x36x63x96.ap113.ftth.ucom.ne.jp
Address: 113.36.63.96
名前: 113x37x111x122.ap113.ftth.ucom.ne.jp
Address: 113.37.111.122
名前: 113x37x135x116.ap113.ftth.ucom.ne.jp
Address: 113.37.135.116
名前: 113x37x136x138.ap113.ftth.ucom.ne.jp
Address: 113.37.136.138
名前: 113x37x158x34.ap113.ftth.ucom.ne.jp
Address: 113.37.158.34
nslookup : *** google-public-dns-a.google.com が 113.37.30.210 を見つけられません: Non-existent domain
発生場所 C:\Users\thonda\Documents\powershell\cont_nslookup.ps1:25 文字:5
+ nslookup $list[$i] 8.8.8.8| Select-String -NotMatch "サーバー" | Sele ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (*** google-publ...existent domain:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
名前: 113x38x210x210.ap113.ftth.ucom.ne.jp
Address: 113.38.210.210
名前: 113x39x2x54.ap113.ftth.ucom.ne.jp
Address: 113.39.2.54
名前: 113x40x102x77.ap113.ftth.ucom.ne.jp
Address: 113.40.102.77
自分で作って自分で使うだけなら、ファイルを分けようが一つのファイルで行おうとどちらでもいいのですけど、他人も使う場合はわかりやすい方がいいし、スクリプトの中にファイルパスを書くと、ユーザーが替わったりPCを替えた時に不便ですので、今回プログラムとデータを一つのファイルに書けるヒアドキュメントタイプで作成してみました。