2017-10-02 4 views
1

を使用してください。小さなPowerShellスクリプトで働い一致を見つけた後の次の行を選択するには、読み取りのために分割

イム..アイデアは、この情報に

 Hostname: 
    xxxxx-CS0,xxxx 
    Network: 
    IPv4 Address   = xxxxx 
    IPv4 Netmask   = 255.255.254.0 
    IPv4 Gateway   = xxxxx 
    DNS Servers    = xxxxx 
Hostname: 
xxxxx,8.1.9-184 
Network: 
IPv4 Address   = xxxxx 
IPv4 Netmask   = xxxxx 
IPv4 Gateway   = xxxxxx 
DNS Servers    = xxxxxx 
Hostname: 
xxxxxx,7.1.80-7 
Network: 
IPv4 Address   = xxxx 
IPv4 Netmask   = xxxxx 
IPv4 Gateway   = xxxxx 
DNS Servers    = xxxxx 

を解析することです..だから私は出回っこのコード

$info = Get-Content C:\xxxxxx\IP_info_all.txt 

write-host "Network Information VNX" 



    ForEach ($network in $info) { 


    $hostname = ($network -split "`n") 
    if($hostname -match "Hostname") 
    { 
    Write-Host $hostname 
    $hostname ="" 
    } 


    $b = ($network -split " ")[1] 
    if ($b -match "Address") { 
     $b 
     $c = ($network -split "=")[1] 
     $c 
     if ($name -match "IPv4"){ 
    $name 
    $copyname =($network -split ":")[0] 
    } 
     } 


    $b = ($network -split " ")[1] 
    if ($b -match "Netmask") { 
     $b 
     $maskid = ($network -split "=")[1] 
     $maskid } 

    $d = ($network -split " ")[1] 
    if ($d -match "Gateway") { 
      $d 
    $Gatewayid = ($network -split "=")[1] 
    $Gatewayid 
    } 


    $z = ($network -split " ")[1] 
    $v = "DNS" 
    if ($z -match "Servers") 
    { 
    $v 
    $dnsserverid = ($network -split "=")[1,2,3] 
    $dnsserverid 
    } 

とホスト名がない限り、すべての情報を持って、出力はネットワーク情報の名前と番号を与えますが、 "Hostname"文字列の次の行をどうやって得ることができるのか分かりません。

と私はこの方法で出力を必要とする:

Network Information VNX 
Hostname: 
Address 
xxxx 
Netmask 
xxxx 
Gateway 
xxxx 
DNS 
xxxx 
Hostname: 

Address 
xxxx 
Netmask 
xxxx 

ありがとう!

+0

はそれを数回編集した...私はこのような次の行を読みたい象徴するが、それはあなたが出力が同じである – ShanayL

答えて

0

各行をループします。あなたの条件文は、1を追加設定するときに

$info = Get-Content "C:\xxxxxx\IP_info_all.txt" 
    write-host "Network Information VNX" 
$content = ($info -split "`n") 

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

    if($content[$i] -match "Hostname:") 
    { 
     "Hostname" 
     Write-Host $content[$i+1] 
    } 
    elseif($content[$i] -match "Network:") 
    { 
     "Network" 
     Write-Host ($content[$i] -split "=")[1] 
    } 
    elseif($content[$i] -match "IPv4 Address") 
    { 
     "Address" 
     Write-Host ($content[$i] -split "=")[1] 
    } 
    elseif($content[$i] -match "IPv4 Netmask") 
    { 
     "Netmask" 
     Write-Host ($content[$i] -split "=")[1] 
    } 
    elseif($content[$i] -match "IPv4 Gateway") 
    { 
     "Gateway" 
     Write-Host ($content[$i] -split "=")[1] 
    } 
    elseif($content[$i] -match "DNS Servers") 
    { 
     "DNS Servers" 
     Write-Host ($content[$i] -split "=")[1] 
    } 
} 
+0

が必要なものを与える必要があります:S –

+0

私はxxxxx-CS0、xxxxのように、ホスト名の出力を得る必要があります。だから私は0または1、私はまだ同じ行に、私は "ホスト名"文字列の下に行を取得する必要があります分割を使用する場合、私はこれがより明確であるかわからない。助けてくれてありがとう –

+0

はい、あなたのコードはうまくいきますが、最初のコンテンツでのみ動作します。3000コード行を解析する必要があります。そのため、メインの質問で編集したすべての内容を確認するために "if"私は必要な出力の例です、ホスト名を取得する必要があります:S –

関連する問題