2016-04-14 13 views
0

出力ファイルで、共有ファイルでフォーマットしたいのですが、拡張子、現在のIP、および以下のような修正IPと共に間違っています。 「Share File 1」、「Extension」、「Server IP」、「Correct IP」は、現在のIPがShare FileおよびCorrect IPから一致するファイルである場合、Exportファイルにリストされます。foreachループ内のどのリストを調べるか

サンプルデータ以下。

マイ輸出:

"1000","1608","IP_Phone","1.330D","192.168.1.20","6","","192.1.1.10" 
"1005","1608","IP_Phone","1.330D","192.168.1.70","6","","192.1.1.11" 
"1010","1608","IP_Phone","1.330D","192.168.1.100","6","","192.1.1.10" 
"1080","1608","IP_Phone","1.330D","192.168.1.51","6","","192.1.1.13"

シェア1つのファイル:

1000, 192.168.1.2, TRUE   ;Test1 
1011, 192.168.1.5, TRUE   ;Test2 
1005, 192.168.1.100, TRUE   ;Test3 
1079, 192.168.1.50, TRUE   ;Test4

シェア2ファイル:

1010, 192.168.1.100, TRUE   ;Test5 
1020, 192.168.1.5, TRUE   ;Test6 
1005, 192.168.1.70, TRUE   ;Test7 
1080, 192.168.1.52, TRUE   ;Test8

所望の出力ファイル:

Share File, Extension, Server IP, Correct IP 
Share File 1, 1000, 192.168.1.2, 192.168.1.20 
Share File 1, 1005, 192.168.1.100, 192.168.1.70 
Share File 2, 1080, 192.168.1.52, 192.168.1.51
あなたが期待ように私が得る

Clear-Host 
$ASAExport = (Import-Csv "C:\app\test\ASAExportNoHeaders.txt" -Header "Extension","2","3","4","Correct IP","6","7","8") 
$1 = (Import-Csv "C:\app\test\StationsTest1.txt" -Header "Extension","Server IP","Comment") 
$2 = (Import-Csv "C:\app\test\StationsTest2.txt" -Header "Extension","Server IP","Comment") 

#$Output = "C:\app\test\Output.txt" 
#if (Test-Path($Output)) {Remove-Item $Output} 

$ServerList = $1,$2 

foreach ($Server in $ServerList) { 
    foreach ($ASARow in $ASAExport) { 
     foreach ($ServerRow in $Server) { 
      if ($ASARow."Extension" -in $ServerRow."Extension") { 
       if ($ASARow."Correct IP" -ne $ServerRow."Server IP") { 
        New-Object PSCustomObject -Property @{ 
         "Extension" = $ASARow."Extension" 
         "Correct IP" = $ASARow."Correct IP" 
         "Server IP" = $ServerRow."Server IP" 
        } | Select-Object "Extension","Server IP","Correct IP" 
       } 
      } 
     } 
    } 
} 

結果は以下のとおりです。私はこれまで持っているもの

。 Ext、Server IP、および正しいIPを取得します。見つかったサーバーを追加してSelect-Objectに追加する必要があります。何かご意見は?

答えて

1

$1$2にそれぞれの値を持つ列Share Fileを追加します。

$headers = 'Extension', 'Server IP', 'Comment' 
$1 = Import-Csv "C:\app\test\StationsTest1.txt" -Header $headers | 
    Select-Object *, @{n='Share File';e={'Share File 1'}} 
$2 = Import-Csv "C:\app\test\StationsTest2.txt" -Header $headers | 
    Select-Object *, @{n='Share File';e={'Share File 2'}} 

と、このような結果にそれを置く:

New-Object PSCustomObject -Property @{ 
    'Extension' = $ASARow.Extension 
    'Correct IP' = $ASARow.'Correct IP' 
    'Server IP' = $ServerRow.'Server IP' 
    'Share File' = $ServerRow.'Share File' 
} 

あなたはところでNew-ObjectSelect-Objectを必要としません。 。新しいオブジェクトには、とにかく指定したプロパティのみがあります。

+0

完璧なトリックでしたが、列がすべて順不同です。注文を指定できますか?共有ファイル、拡張子、サーバーIP、偶然にIPを修正しますか?私はそれをそのように書いたが、出力がどうなっているのかは分からない。 –

+0

列の順序を定義するために最後に選択したオブジェクトがどこに来るかは気にしないでください。もう一度ありがとう、これは素晴らしいです。 –

+0

順序付けされたハッシュテーブルを作成することによって、プロパティの順序を事前に定義することができます。それには2つのステップが必要です。 '$ props = [ordered] @ {...};新しいオブジェクト - タイプPSCustomObject - プロパティ$ props' –

関連する問題