<# alan dot kaplan at va dot gov 10/6/2014 version 1.1 .Synopsis Imports a Nessus v2 Report file and combines the host data and vulnerablity data into a single object. .DESCRIPTION The Convert-Nessus cmdlet creates objects from Nessus v2 files that are generated by the Nessus 4.x or 5.x scanner. #> Function Get-OpenFile($title, $filter,$initialDirectory) { add-type -assemblyname System.Windows.Forms $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog $OpenFileDialog.initialDirectory = $initialDirectory $OpenFileDialog.filter = $filter $OpenFileDialog.Title = $title $OpenFileDialog.ShowDialog() | Out-Null $OpenFileDialog.filename $OpenFileDialog.ShowHelp = $true } $NessusFile = Get-OpenFile -title "Choose a Nessus v2 file" -filter "Nessus Files (*.nessus)|*.nessus" -initialDirectory "$env:USERPROFILE\desktop" $nessus = [xml] (get-content $NessusFile) #Get Basic vulnerability data $VulData = $Nessus.NessusClientData_v2.Report.ReportHost.reportItem $VulData | foreach { #Add the Host Info data $HostInfo = $_.ParentNode.HostProperties.ChildNodes for($j=0; $j -lt $HostInfo.Count; $j++){ $itemName =($HostInfo[$j].name).ToString() $itemValue = ($HostInfo[$j]."#text").ToString() #fix Nessus date which puts time in the middle of string if ($itemValue -match "[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\s"){ $itemValue = [datetime]$(($itemValue -replace $Matches[0] )+ " "+ $matches[0]) } Add-Member -InputObject $_ -membertype NoteProperty -Name $itemName -value $itemValue } } #example output, save as CSV file #use a select statement to choose results in different order $vuldata | Export-Csv -Path $xmlDoc.Replace("nessus","csv") -NoTypeInformation