Фильтровать CSV-файл с powershell - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в powershell ... Я пытаюсь отфильтровать один из результатов сканирования (.csv) по конкретному значению, я могу сделать это для простых файлов CSV.однако результат автоматического сканирования выглядит как вложенный.

Мне нужно отфильтровать столбец "F", где значение равно "Vuln" (изображение добавлено), и записать в новый файл CSV.

можетКто-нибудь, пожалуйста, дайте мне некоторые выводы.

Я пробовал простые строки, такие как: (но я не получил никакого результата)

Import-CSV -Path "C: \ test.csv" |Where-Object {$ _. Тип -ey "Vuln"}


Пример формата файла CSV

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вот последний скрипт:)

$ import = get-content. \ Scan.csv
$ import1 = $ import |Select-Object -First 7 $ import |Select-Object -Skip 7 |ConvertFrom-Csv |Where-Object {$ _. Тип -eq "Vuln"} |Export-Csv Output1.csv -NoClobber -NoTypeInformation
$ import1 + (Get-Content Output1.csv) |Set-Content Output2.csv

0 голосов
/ 21 февраля 2019

Вы в основном там, похоже, проблема в том .CSV файле.

Честно говоря, это не действительно действительный CSV-файл, поскольку он не просто разделенный запятымиТаблица значений вместо этого имеет несколько типов данных.

Однако, похоже, что что-то близкое к реальному .CSV начинается со строки 6, поэтому нам нужно пропустить первые несколько строк файла и , а затем попытатьсяконвертировать из .csv.Я сделал свой собственный .csv как ваш

enter image description here

Я могу прочитать файл и пропустить первые пять строк, например:

Get-Content C:\temp\input.csv | Select-Object -Skip 5 | ConvertFrom-Csv 
HostName  OS    Type   
--------  --    ----   
SomePC123 WinXp Vuln   
SomePC234 Win7  Vuln   
SomePc345 Win10 Patched

А затем отфильтруйте до элементов Type Vuln с помощью этой команды:

Get-Content C:\temp\input.csv | Select-Object -Skip 5 | ConvertFrom-Csv | Where-Object Type -eq 'Vuln'

HostName  OS    Type
--------  --    ----
SomePC123 WinXp Vuln
SomePC234 Win7  Vuln

Чтобы использовать это, просто отсчитайте количество строк до тех пор, пока таблица не начнется в пределах .CSV иизмените параметр -Skip для соответствия.

Если вы хотите сохранить информацию заголовка, вы можете использовать такой подход:

$crap = Get-Content C:\temp\input.csv | Select-Object -First 5
$OnlyVulns = Get-Content C:\temp\input.csv | Select-Object -Skip 5 | ConvertFrom-Csv | Where-Object Type -eq 'Vuln'

$CrapAndOnlyVulns = $crap + $OnlyVulns
$CrapAndOnlyVulns > C:\pathTo\NewFile.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...