私は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)を取得する可能性を調査しています。
誰かが私に手を貸してくれませんか?
ありがとうございました。
ホスト名とアドレスの組み合わせは、ループ内で実行できます。ホストは複数の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
}
}
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
}
}
一貫した命名規則がある/コンピューターがADにあると仮定すると、「get-ADcomputer」コマンドレットを使用してForeachオブジェクトループでnslookupを使用することもできます。
'Select-Object -unique'は、結果で照会されたDCの1つのインスタンスを除くすべてを削除するという素晴らしい仕事をします。
get-adcomputer -Filter {name -like 'nameOfComputer*'} | ForEach-Object
{nslookup $_.name} | Select-Object -Unique
「ニコラスリーダー」から提供されたcmdlet
を使用しました。
XX-
で始まる各マシンのすべてのIPアドレスで応答を返しました。
称賛!
get-adcomputer -Filter {name -like 'XX-*'} | ForEach-Object {nslookup $_.name} | Select-Object -Unique