我正在处理来自Nessus的.csv导出,基本上我有一列主机IP 和一列插件ID
我的客户想要一个输出,例如,插件X将在一列中,然后在它旁边将是一个逗号分隔的受影响的主机IP列表,然后旁边的那个将是受影响的主机的计数的IP。
使用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
答案 0 :(得分:0)
您只需使用Group-Object
CmdLet即可完成所需操作。
$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'}
)
产生的结果
为了好玩
如果要将其重新导出为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