Powershell:提取以逗号分隔的IP列表?

时间:2017-10-06 00:11:56

标签: xml excel powershell csv nessus

我正在处理来自Nessus的.csv导出,基本上我有一列主机IP 和一列插件ID

我的客户想要一个输出,例如,插件X将在一列中,然后在它旁边将是一个逗号分隔的受影响的主机IP列表,然后旁边的那个将是受影响的主机的计数的IP。

Pic of what I'm looking for

使用Powershell导入Nessus CSV后,我能够启动以获得我需要的内容:

$allfiltered | select-object 'Host IP','Plugin ID' | Where-Object 'Plugin ID' -like "57041" | Format-Table -Property  'Plugin ID','Host IP'

这给了我这样的输出:

57041     10.1.1.1
57041     10.1.1.2
57041     10.1.1.3
57041     10.1.1.4
57041     10.1.1.5
57041     10.1.1.6
57041     10.1.1.7

但是正如你所看到的,我还有很长的路要把它拉到我需要的输出中(见上图)。

我想我最终需要一个for循环来评估所有的插件值,但我需要弄清楚如何实际查询“获取与插件X匹配的所有IP并将它们放入以逗号分隔的列表中“从那里开始。

你能指导我朝正确的方向前进吗?

-B

1 个答案:

答案 0 :(得分:0)

您只需使用Group-Object CmdLet即可完成所需操作。

例如,像这样的东西将所有插件组合在一起,然后你可以迭代组,用逗号分隔的字符串将ips连接在一起,并从那里做任何你想做的事。

$Grouped = $List | group -Property PluginID | sort PluginID

Foreach ($Group in $Grouped) {
   $IpsDelimited = ($group.Group | Select -ExpandProperty IP | Sort) -join ','
   Write-Host "Plugin ID: $($Group.Name) " -ForegroundColor Cyan -NoNewline
    Write-Host $IpsDelimited

}

以下是我用于此示例的示例列表。

# The list is for example purpose based on what you have. 
$List = @(
    new-object psobject -Property @{'PluginID'='57041 ';IP='10.1.1.1'}
    new-object psobject -Property @{'PluginID'='57041 ';IP='10.1.1.3'}
    new-object psobject -Property @{'PluginID'='57041 ';IP='10.1.1.4'}
    new-object psobject -Property @{'PluginID'='57042 ';IP='10.1.1.6'}
    new-object psobject -Property @{'PluginID'='57042 ';IP='10.1.1.7'}
    new-object psobject -Property @{'PluginID'='57043 ';IP='10.1.1.8'}
    new-object psobject -Property @{'PluginID'='57043 ';IP='10.1.1.9'}
    new-object psobject -Property @{'PluginID'='57044 ';IP='10.1.1.10'}
)

产生的结果

Resulting output

为了好玩

如果要将其重新导出为CSV文件,则可以使用计算属性直接操作输出对象,并使用修改后的信息将其导出。

$Output = $Grouped |
Select  @{'N'='PluginID';E={$_.Name}},
        @{N='IPSDelimited';E={($_.Group | Select -ExpandProperty IP | Sort) -join ','}},
        @{N='My other field';E={$_.Group.OtherField}}

$Output | Export-Csv -Path 'MyPath' -NoTypeInformation