2017-10-17 5 views
0

grâce à la lecturesélectionnez dernières lignes dans le texte analysé

im travaillant dans un petit script, qui lit une sortie de txt et analyser les informations,

ce sont les informations à utiliser comme exemple:

Hostname: 
xxxx1-CS0,8.1.9-184 
Network: 
IPv4 Address   = 1.1.1.1.1.1 
IPv4 Netmask   = 1.1.1.1.1.4 
IPv4 Gateway   = 1.1.1.1.1.5 
DNS Servers    = 1.1.1.1.1.1,1.1.1.1.1.12 
Hostname: 
xxxx2,7.1.80-7 
Network: 
IPv4 Address   = 2.2.2.2.1 
IPv4 Netmask   = 2.2.2.2.3 
IPv4 Gateway   = 2.2.2.2.4 
DNS Servers    = 2.2.2.2.2,2.2.2.2.3 
Hostname: 
xxxxx3,8.1.9-184 
Network: 
IPv4 Address   = 3.3.3.3.3.1 
IPv4 Netmask   = 3.3.3.3.3.2 
IPv4 Gateway   = 3.3.3.3.3.5 
DNS Servers    = 3.3.3.3.3.3,3.3.3.3.3.4 
Hostname: 
xxxx4,8.1.9-184 
Network: 
IPv4 Address   = 4.4.4.1 
IPv4 Netmask   = 4.4.4.2 
IPv4 Gateway   = 4.4.4.3 
DNS Servers    = 4.4.4.41,4.4.4.42 

Alors ... Voici le code que j'utilise avec l'aide de la pile

Clear-Host 

    $info = Get-Content xxxx 

    $finalpatch = "xxxx" 

    $content = ($info -split "`n") 

    For($i=0;$i -lt $content.count;$i++){ 

    if($content[$i] -match "Hostname:") 
     { 
      #"Hostname Information" 
      $infohostname = $content[$i+1] 
     } 

    elseif($content[$i] -match "IPv4 Address") 
     { 
      #"Ipv4 Address" 
      $infoipv4 = ($content[$i] -split "=")[1] 
     } 
    elseif($content[$i] -match "IPv4 Netmask") 
     { 
      #"Netmask Information" 
      $infonetmask = ($content[$i] -split "=")[1] 
     } 
    elseif($content[$i] -match "IPv4 Gateway") 
     { 
      #"Gateway Information" 
      $gatewayinfo = ($content[$i] -split "=")[1] 
     } 
    if($content[$i] -match "DNS Servers") 
     { 
      # "DNS Servers Information" 
      $dnsinfo = ($content[$i] -split "=")[1] 
     } 



     Write-Host $infohostname ,$infoipv4,$infonetmask,$gatewayinfo,$dnsinfo 

et le resul f ot le code est le suivant:

xxxx1-CS0,8.1.9-184 4.4.4.1 4.4.4.2 4.4.4.3 4.4.4.41,4.4.4.42 
xxxx1-CS0,8.1.9-184 4.4.4.1 4.4.4.2 4.4.4.3 4.4.4.41,4.4.4.42 
xxxx1-CS0,8.1.9-184 4.4.4.1 4.4.4.2 4.4.4.3 4.4.4.41,4.4.4.42 
xxxx1-CS0,8.1.9-184 1.1.1.1.1.1 4.4.4.2 4.4.4.3 4.4.4.41,4.4.4.42 
xxxx1-CS0,8.1.9-184 1.1.1.1.1.1 1.1.1.1.1.4 4.4.4.3 4.4.4.41,4.4.4.42 
xxxx1-CS0,8.1.9-184 1.1.1.1.1.1 1.1.1.1.1.4 1.1.1.1.1.5 4.4.4.41,4.4.4.42 
xxxx1-CS0,8.1.9-184 1.1.1.1.1.1 1.1.1.1.1.4 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 1.1.1.1.1.1 1.1.1.1.1.4 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 1.1.1.1.1.1 1.1.1.1.1.4 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 1.1.1.1.1.1 1.1.1.1.1.4 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 2.2.2.2.1 1.1.1.1.1.4 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 2.2.2.2.1 2.2.2.2.3 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 2.2.2.2.1 2.2.2.2.3 2.2.2.2.4 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 2.2.2.2.1 2.2.2.2.3 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 2.2.2.2.1 2.2.2.2.3 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 2.2.2.2.1 2.2.2.2.3 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 2.2.2.2.1 2.2.2.2.3 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 3.3.3.3.3.1 2.2.2.2.3 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 4.4.4.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 4.4.4.1 4.4.4.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 4.4.4.1 4.4.4.2 4.4.4.3 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 4.4.4.1 4.4.4.2 4.4.4.3 4.4.4.41,4.4.4.42 

Cela fonctionne pour analyser les informations contenues dans les lignes, mais la question est la duplication du comte, je cherche un moyen d'obtenir que la dernière ligne pour chaque appareil avec les chiffres analysés, si vous regardez la sortie ne sais pas pourquoi le tableau conserve l'adresse IP d'un autre appareil, par exemple:

xxxx4,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 

xxxx4,8.1.9-184 4.4.4.1 4.4.4.2 4.4.4.3 4.4.4.41,4.4.4.42 

est-ce les mêmes informations « nom d'hôte », mais la première ligne rattrape l'adresse IP du périphérique précédent. et si vous regardez les exemples, la dernière ligne de chaque périphérique est la bonne.

Répondre

1

Si vous êtes déterminé à utiliser votre script existant comme base, vous pouvez améliorer votre sortie en déplaçant la ligne de sortie et l'imbrication dans le If($content[$i] -match "Hostname:") scriptblock, puis sortir l'enregistrement final une fois la boucle terminée.

Clear-Host 

$info = Get-Content xxxx 

$finalpatch = "xxxx" 

$content = ($info -split "`n") 

For($i=0;$i -lt $content.count;$i++){ 

if($content[$i] -match "Hostname:") 
    { 
     #Output the previous record 
     Write-Host $infohostname ,$infoipv4,$infonetmask,$gatewayinfo,$dnsinfo    

     #"Hostname Information" 
     $infohostname = $content[$i+1] 
    } 

elseif($content[$i] -match "IPv4 Address") 
    { 
     #"Ipv4 Address" 
     $infoipv4 = ($content[$i] -split "=")[1] 
    } 
elseif($content[$i] -match "IPv4 Netmask") 
    { 
     #"Netmask Information" 
     $infonetmask = ($content[$i] -split "=")[1] 
    } 
elseif($content[$i] -match "IPv4 Gateway") 
    { 
     #"Gateway Information" 
     $gatewayinfo = ($content[$i] -split "=")[1] 
    } 
if($content[$i] -match "DNS Servers") 
    { 
     # "DNS Servers Information" 
     $dnsinfo = ($content[$i] -split "=")[1] 
    } 
} 

#Output the final record 
Write-Host $infohostname ,$infoipv4,$infonetmask,$gatewayinfo,$dnsinfo 

Affichera:

xxxx1-CS0,8.1.9-184 1.1.1.1.1.1 1.1.1.1.1.4 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7 2.2.2.2.1 2.2.2.2.3 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184 4.4.4.1 4.4.4.2 4.4.4.3 4.4.4.41,4.4.4.42 
2

Peut-être suggérer une alternative à votre méthode d'analyse. Lisez le fichier entier sous la forme d'une chaîne multiligne, puis divisez-le en ensembles de chaînes multilignes en fonction des enregistrements individuels, et analysez chacun d'entre eux en conséquence. Ma méthode d'analyse consiste à diviser chaque enregistrement à chaque ligne, puis à créer une table de hachage ($Props) et à définir le Hostname comme égal au second élément de la matrice (puisque «Nom d'hôte:» est le premier élément). Ensuite, je traite n'importe quelle ligne dans le tableau où elle correspond à un filtre de type 'X = Y', et ajoute des éléments à la hashtable pour chacun d'entre eux. Enfin, je jette la hashtable à un objet afin qu'il puisse être facilement travaillé.

Clear-Host 

$info = Get-Content xxxx -Raw 
$Content = $info -split '(?=Hostname:)'|?{$_} 
$Content | %{ 
    $Record = $_ -split '[\r\n]+' 
    $Record|?{$_ -match '(.+)=(.+)'}|% -begin { 
      $Props=[ordered]@{'Hostname' = $Record[1].trim()} 
     } -Process { 
      $Props.Add($Matches[1].trim(),$Matches[2].trim()) 
     } -End { 
      [PSCustomObject]$Props 
     } 
    }|ft 

Affichera:

Hostname   IPv4 Address IPv4 Netmask IPv4 Gateway DNS Servers 
--------   ------------ ------------ ------------ -----------  
xxxx1-CS0,8.1.9-184 1.1.1.1.1.1 1.1.1.1.1.4 1.1.1.1.1.5 1.1.1.1.1.1,1.1.1.1.1.12 
xxxx2,7.1.80-7  2.2.2.2.1 2.2.2.2.3 2.2.2.2.4 2.2.2.2.2,2.2.2.2.3 
xxxxx3,8.1.9-184 3.3.3.3.3.1 3.3.3.3.3.2 3.3.3.3.3.5 3.3.3.3.3.3,3.3.3.3.3.4 
xxxx4,8.1.9-184  4.4.4.1  4.4.4.2  4.4.4.3  4.4.4.41,4.4.4.42  
+0

Merci !, J'aime votre Sugestion, mais je ne sais pas si je peux l'utiliser d'une manière sustable, parce que je suis arrivé tableaux diférents d'information et de travail avec regex peut être difficile, avez-vous une autre idée? –

+0

Eh bien, vous allez devoir ajuster presque n'importe quelle réponse selon le tableau. Je ne peux pas penser à un moyen d'analyser un fichier texte qui acceptera n'importe quel tableau lancé dessus. – TheMadTechnician