Вы в основном там, похоже, проблема в том .CSV
файле.
Честно говоря, это не действительно действительный CSV-файл, поскольку он не просто разделенный запятымиТаблица значений вместо этого имеет несколько типов данных.
Однако, похоже, что что-то близкое к реальному .CSV начинается со строки 6, поэтому нам нужно пропустить первые несколько строк файла и , а затем попытатьсяконвертировать из .csv.Я сделал свой собственный .csv как ваш
![enter image description here](https://i.stack.imgur.com/ywMLU.png)
Я могу прочитать файл и пропустить первые пять строк, например:
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