LoginSignup
15
16

More than 5 years have passed since last update.

大量のホスト名に対して名前解決した結果をCSVにしたい

Posted at

やりたいこと

大量のホスト名に対して、名前解決してIPv4アドレスを取得して、一覧をCSVにしたい。
環境はWindows7標準のPowerShell 2.0。

コード

nslookuplist.ps1
# nslookupしたいホスト名を
#     www.yahoo.co.jp
#     www.google.co.jp
# のようにファイルにリスト化しておく。ここではファイル名「hostnames.txt」。 
$hostnames = (cat "hostnames.txt")    #  ★1

# 配列の定義(初期でヘッダの設定)
$rows = @("hostname,ip")
$ips  = @()
$result = $false
foreach ($hostname in $hostnames) {

    try {
        # IPv4アドレスのみ取得
        $ips = [System.Net.Dns]::GetHostAddresses($hostname) | ? { $_.AddressFamily -eq "InterNetwork" }
    } catch [Exception] {
        # 名前解決できなかったら空欄
        $ips = @("")
    }

    foreach ( $ip in $ips) {
        # 1行の結果をカンマ区切りで追記
        $rows += $hostname + ","  + $ip
    }

}

# result.csv に結果をCSVで出力する 
$rows | ConvertFrom-Csv | Export-Csv "result.csv" -NoTypeInformation  # ★2

<おまけ1>
★1の箇所で対象ホスト名を別のファイルにしておくのが面倒なときは
以下のように定義します。

★1の箇所をコード内で定義する場合
$hostnames = @"
www.yahoo.co.jp
www.google.co.jp
"@ -split "`r`n"

<おまけ2>
★2の箇所でファイルに出力せず、
グリッドビュー(結果例は後述)に表示したい場合は以下のようにします。

★2の箇所をグリッドビューで表示する場合
$rows | ConvertFrom-Csv | Out-GridView

結果例

result.csv
"hostname","ip"
"www.yahoo.co.jp","183.79.75.234"
"www.yahoo.co.jp","183.79.43.200"
"www.yahoo.co.jp","183.79.139.228"
"www.yahoo.co.jp","118.151.235.191"
"www.google.co.jp","216.58.197.195"

★2の箇所でグリッドビューに表示するようにした場合は以下のようになります。
Image1.png

以上です。

15
16
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16