2017-10-02 1 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 

그래서 .. 내가 allready이 코드 호스트하지 않는 한 모든 정보를 가지고

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

그리고 출력 giveme 이름과 네트워크 정보의 숫자,하지만 어떻게 "호스트 이름"문자열 아래에 다음 줄을 얻을 수 있는지 모르겠다.

와 나는 출력이 방법이 필요합니다

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

Address 
xxxx 
Netmask 
xxxx 

감사합니다!

+0

가 몇 번 편집 ...이 같은 다음 줄을 읽을 수 상징하는 그러나 당신이 출력이 동일 – ShanayL

답변

0

각 줄을 반복하십시오. 조건부 문이 하나를 추가 설정할 때

$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 –

관련 문제