2017-09-01 5 views
0

Disons que nous avons un fichier hosts de:Powershell - bande tous les espaces de chaque ligne hôtes fichier avant de créer des variables d'IP, FQDN et Hostname et les utiliser pour un ping

10.10.10.10 test1.domain test1 
20.20.20.201 test2.domain test2 
30.30.301.30 test3.domain test3 
40.40.40.40 test4.domain test4 

Notez les adresses IP avec 3 chiffres l'identifiant de l'hôte, dans cet esprit, chaque ligne est structurée légèrement différemment, dans la mesure où ceux avec les 2 chiffres, ont plus d'espaces entre l'IP et le FQDN. En tenant compte de ces différences, comment pourrait-on soit: 1. extraire le nom de domaine complet de chaque ligne & ping en passant par chaque ligne OU 2. supprimer complètement l'adresse IP, puis faire une boucle sur chaque entrée, en envoyant une requête ping à chaque nom de domaine complet tu vas?

Je ne peux pas semble faire l'option 1, et le plus proche de l'option 2 J'ai est en faisant ceci:

Get-Content hosts | ForEach-Object { $_Split()[3]; } 

Mais cela ne imprime les hôtes où il y a 3 chiffres dans l'hôte identifiant, alors que ceux avec 2 chiffres ont plus d'espace entre l'IP et le FQDN, donc il compte le FQDN comme étant sur le 4ème champ.

Quelqu'un peut-il aider à cette s'il vous plaît? Je suis assez nouveau à PowerShell venant d'un fond UNIX.

Répondre

1

Cordes en Powershell sont des objets .Net String et contiennent ainsi des méthodes de manipulation puissantes. Split() peut être dit à omit empty éléments. Comme si,

# Read host list 
$data = Get-Content C:\Temp\hostlist.txt 
# Split each row from the file. Use space to split, omit empty elements 
# Thus element 0 is the IP, 1 is the FQDN, 2 is the hostname 
$data | ForEach-Object { ($_.split(" ", [StringSplitOptions]::RemoveEmptyEntries))[1] } 

# Output 
test1.domain 
test2.domain 
test3.domain 
test4.domain