2016-04-14 5 views
0

В выходном файле я бы хотел, чтобы он был отформатирован вместе с файлом Share, а также с расширением, текущим IP-адресом и исправленным IP-адресом, как показано ниже. «Share File 1», «Extension», «Server IP», «Correct IP», где текущий IP-адрес совпадает с файлом Share и правильным IP-адресом, указанным в файле экспорта.Как определить, какой список в цикле 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"

Share 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

Share 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, IP-адрес сервера и правильный IP-адрес. Мне нужно добавить сервер, в котором он был найден, и добавить его в Select-Object. Есть предположения?

ответ

1

Добавить столбец Share File с соответствующим значением для $1 и $2:

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

Вам не нужен Select-Object после New-Object BTW , Новый объект имеет только свойства, которые вы указали в любом случае.

+0

Отлично, что сделал трюк, однако колонны все не в порядке, мы можем указать заказ? Share File, Extension, IP-адрес сервера, правильный IP-адрес? Я написал это так, но выход не подходит. –

+0

Не обращайте внимания на то, где этот последний объект выбора входит, чтобы определить порядок столбцов. Еще раз спасибо, это здорово. –

+0

Вы можете заранее определить порядок свойств, создав упорядоченную хеш-таблицу. Это требует двух шагов: '$ props = [ordered] @ {...}; New-Object -Type PSCustomObject -Property $ props' –

Смежные вопросы