web-dev-qa-db-ja.com

Powershellでnslookupを使用してホスト名のIPアドレスを取得する

私はPowershellスクリプトを初めて使用するので、1つのスクリプトを作成する必要があります。サーバーのホスト名のリストがあり、それらのサーバーのIPアドレスを取得して、結果をファイルに書き込む必要があります。

ホスト名はExcelスプレッドシートの1列ですが、任意の形式(csv、1行に1つのホスト名を持つ単純なtxtファイルなど)にフォーマットできます。

サーバーのホスト名と1行あたりのIPアドレスがある方法で出力をフォーマットしたいと思います(サーバーに複数のIPがある場合は複数の行があります)。

これまで、1行にホスト名を含む単純なテキストファイルを使用してきましたが、PSの出力から、IPアドレスがどのサーバー用であるかを区別できません。

$servers = get-content "path_to_the_file" 
foreach ($server in $servers) {
[System.Net.Dns]::GetHostAddresses($server)
}

そのため、csvファイルからホスト名をロードし、ホスト名と関連するIPアドレスを別のcsvに再度出力することを考えていましたが、その方法がわかりません。

Foreachでnslookup $ serverを実行して、必要な情報(ホスト名とIP)を取得する可能性を調査しています。

誰かが私に手を貸してくれませんか?

ありがとうございました。

4
Ondrej Lebl

ホスト名とアドレスの組み合わせは、ループ内で実行できます。ホストは複数のIPアドレスを持つことができるため、それもアカウントに取り込む必要があります。これにより、別のループが作成されます。そのようです、

$servers = get-content "path_to_the_file"
foreach ($server in $servers) {
  $addresses = [System.Net.Dns]::GetHostAddresses($server)
  foreach($a in $addresses) {
    "{0},{1}" -f $server, $a.IPAddressToString
  }
}
9
vonPryz

DNSレコードがない場合、「IPは解決できません」と表示されます。

$servers = get-content "path_to_the_file"e
foreach ($Server in $Servers)
{
    $Addresses = $null
    try {
        $Addresses = [System.Net.Dns]::GetHostAddresses("$Server").IPAddressToString
    }
    catch { 
        $Addresses = "Server IP cannot resolve."
    }
    foreach($Address in $addresses) {
        write-Host $Server, $Address 
    }
}
3
Chu

一貫した命名規則がある/コンピューターがADにあると仮定すると、「get-ADcomputer」コマンドレットを使用してForeachオブジェクトループでnslookupを使用することもできます。

'Select-Object -unique'は、結果で照会されたDCの1つのインスタンスを除くすべてを削除するという素晴らしい仕事をします。

get-adcomputer -Filter {name -like 'nameOfComputer*'} | ForEach-Object 
{nslookup $_.name} | Select-Object -Unique
1
Nicholas Leader

「ニコラスリーダー」から提供されたcmdletを使用しました。

XX-で始まる各マシンのすべてのIPアドレスで応答を返しました。

称賛!

get-adcomputer -Filter {name -like 'XX-*'} | ForEach-Object {nslookup $_.name} | Select-Object -Unique  
0
M Rahbari