2013-08-07 1 views
3

Je ne connais pas encore les scripts Powershell et je dois écrire un script. J'ai une liste de noms d'hôte de serveur et j'ai besoin d'obtenir les adresses IP de ces serveurs et écrire les résultats dans un fichier.Obtenir des adresses IP pour les noms d'hôtes à l'aide de nslookup dans Powershell

Les noms d'hôtes sont une colonne dans une feuille de calcul Excel, mais je peux les mettre en forme en quoi que ce soit (csv, txt simple avec un nom d'hôte par ligne, etc.). Je voudrais formater la sortie de la façon dont il y a un nom d'hôte du serveur et son adresse IP par ligne (donc il y a plusieurs lignes dans le cas où le serveur a plus d'une adresse IP). Jusqu'à présent, j'ai utilisé le fichier texte simple avec nom d'hôte par ligne, mais à partir de la sortie dans PS, je suis incapable de distinguer à quel serveur l'adresse IP est.

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

Je me demandais sur le chargement des noms d'hôte à partir du fichier csv et l'impression des noms d'hôtes et les adresses IP associées à un autre csv à nouveau, mais je ne suis pas sûr comment.

J'étudie la possibilité de saisir les informations requises (nom d'hôte et IP) en exécutant nslookup serveur $ en foreach.

Quelqu'un pourrait me donner un coup de main?

Merci.

Répondre

7

La combinaison des noms d'hôte aux adresses peut être effectuée dans la boucle. Comme un hôte peut avoir plusieurs adresses IP, vous devez également prendre cela en compte. Cela va créer une autre boucle. Comme si,

$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 
    } 
} 
2

Ceci affichera "IP ne peut pas résoudre" s'il n'y a pas d'enregistrement DNS.

$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 
    } 
} 
0

Vous pouvez également utiliser nslookup dans une boucle Foreach-objet avec applet de commande « get-ADComputer », en supposant que vous avez une convention d'appellation cohérente/ordinateurs sont en AD.

Le « Select-Object -Unique » fait un bon travail de décapage tout sauf une instance du DC qui a été interrogé dans les résultats.

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

Je viens d'utiliser le cmdlet fourni par "chef Nicholas".

Il a renvoyé une réponse à toutes les adresses IP pour chaque machine qui commence par XX-

Kudos!

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