如何确定foreach循环中的列表

时间:2016-04-14 14:49:09

标签: powershell foreach

在输出文件中,我希望使用共享文件对其进行格式化,如下所示,它与扩展名,当前IP和已更正的IP一起出错。 "共享文件1","扩展","服务器IP","正确IP"其中当前IP是与共享文件匹配的IP,而正确的IP是导出文件中列出的IP。

以下示例数据。

我的出口:

"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和Correct IP。我需要添加找到的服务器并将其添加到Select-Object。有什么想法吗?

1 个答案:

答案 0 :(得分: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 BTW之后你不需要New-Object。新对象只包含您指定的属性。