Parsing Nessus Files

Hello,

I am very new to PowerShell and learning mostly through the Month of Lunches book, which is great. I am trying to come up with a simple script to help me parse multiple Nessus CSV files that total around 2GB to pull out the information I need. I am trying to get a count of findings based on risk level per individual IP. For example my $mediumhost variable should display “hostIP, # of medium findings”

Here is the code I have come up with. Please be gentle :slight_smile:

# Prompt for path to CSV file to parse

$file = Read-Host -Prompt 'Input path to file'

# Import CSV file to variable

$all = import-csv $file

# Create variable for totals of all risk count

$lowall = $all | where {$_.risk -eq "low"}
$mediumall = $all | where {$_.risk -eq "medium"}
$highall = $all | where {$_.risk -eq "high"}
$criticalall = $all | where {$_.risk -eq "critical"}

# Create variable for risk count per host

$lowhost = $lowall | select host,risk | sort
$mediumhost = $mediumall | select host,risk | sort
$highhost = $highall | select host,risk | sort
$criticalhost = $criticalall | select host,risk | sort

What problem are you having? Nothing wrong is jumping out at me, except possibly a lack of output.

Currently the output of $mediumhost is showing

Host Risk


x.x.x.131 Medium
x.x.x.134 Medium
x.x.x.134 Medium
x.x.x.134 Medium
x.x.x.134 Medium
x.x.x.134 Medium
x.x.x.134 Medium
x.x.x.134 Medium
x.x.x.157 Medium

I would like it to display the following:

Host Risk


x.x.x.131 1
x.x.x.134 7
x.x.x.157 1

# Prompt for path to CSV file to parse

$file = Read-Host -Prompt 'Input path to file'
# Import CSV file to variable
$all = import-csv $file

# Create variable for totals of all risk count
$lowall = $all | Where-Object {$_.risk -eq "low"} | Group-Object -Property Host |
Select-Object @{n='Host';exp={$_.Name}},@{n='Risk';exp={$_.Count}}

$mediumall = $all | Where-Object {$_.risk -eq "medium"} | Group-Object -Property Host |
Select-Object @{n='Host';exp={$_.Name}},@{n='Risk';exp={$_.Count}}

$highall = $all | Where-Object {$_.risk -eq "high"} | Group-Object -Property Host |
Select-Object @{n='Host';exp={$_.Name}},@{n='Risk';exp={$_.Count}}

$criticalall = $all | Where-Object {$_.risk -eq "critical"} | Group-Object -Property Host |
Select-Object @{n='Host';exp={$_.Name}},@{n='Risk';exp={$_.Count}}

$lowall
$mediumall
$highall
$criticalall