2017-10-17 4 views
0

おかげで、これは一例として使用するための情報であり、解析されたテキストにTXT出力を読み取り、情報を解析する小さなスクリプトで働い</p> <p>イムを読み取るための

を最後の行を選択します。

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 

そう...これは私がスタック

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 

とresulの助けを借りて使用しているコードです

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 

これは、ライン内の情報を解析するために動作しますが、問題は、カウントの重複である、イムは、各デバイスとの唯一の最後の行を取得する方法を探しています。fコードをotの本であります配列は、他のデバイスからIPアドレスを保持し、なぜあなたは出力を見れば、解析された番号が分からない、例:

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 

は同じ「ホスト名」の情報ですが、最初の行には、IPアドレスをキャッチされます前のデバイスからの例を見ると、各デバイスの最終行が正しいものになります。

答えて

1

あなたは出力ラインを移動し、If($content[$i] -match "Hostname:")スクリプトブロックでそれをネストすることによって、あなたの出力を向上させることができますベースとして、既存のスクリプトを使用すると判断された場合は、その後、ループが完了した後に最終レコードを出力する。

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 

この意志出力:

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

あなたの解析方法の代替案を提案するかもしれません。ファイル全体を複数行の文字列として読み込み、個々のレコードに基づいて複数行の文字列のセットに分割し、それに応じてそれぞれを解析します。私の解析方法は、各レコードを各行に分割し、ハッシュテーブル($Props)を作成し、Hostnameを配列の2番目の項目に設定することです( 'Hostname:'は最初の項目です)。次に、配列内の「X = Y」型のフィルタと一致する行を処理し、それぞれのハッシュテーブルに項目を追加します。最後に、ハッシュテーブルをオブジェクトにキャストして、簡単に処理できるようにします。

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 

この意志出力:

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

感謝!、私はあなたの暗示が好き、私は情報のdiferent配列を持って働いているので、私は、sustable方法でそれを使用できるかどうか私は知りません正規表現は難しいかもしれませんが、他のアイデアはありますか? –

+0

さて、アレイに応じてほぼすべての答えを調整する必要があります。私はそれにスローされた配列に対応するテキストファイルを解析する方法は考えられません。 – TheMadTechnician

関連する問題