Я пытаюсь получить историю браузера Mozilla Firefox из places.sqlite с powershell.
places.sqlite
Это запрос, который я выполняю, переменная $mozillapath содержит местоположение файла places.sqlite.
$mozillapath
".open $mozillapath SELECT datetime(moz_historyvisits.visit_date/1000000,'unixepoch'), moz_places.url FROM moz_places, moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id " | C:\Users\Admin\sqlite-tools-win32-x86-3260000\sqlite-tools-win32-x86-3260000\sqlite3.exe
Я получаю вывод в следующем формате:
Username : Admin C:\\Users\\Admin\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\nr0o1s57.default\\places.sqlite 2019-01-11 15:00:07|https://www.mozilla.org/privacy/firefox/ 2019-01-11 15:00:07|https://www.mozilla.org/en-US/privacy/firefox/ 2019-01-11 15:02:28|https://twitter.com/ 2019-01-12 12:01:09|https://twitter.com/ 2019-01-12 11:36:28|http://google.com/ 2019-01-12 11:36:28|http://www.google.com/ 2019-01-12 11:36:28|https://www.google.com/ 2019-01-12 12:01:03|https://www.amazon.com
после сохранения вывода в переменной я не могу отформатировать его, я хочу использовать его как историю последних 7 дней с датой и сайтом:
Date : 2019-01-11 15:00:07 Site : https://www.mozilla.org/privacy/firefox/
Select-Object - чтобы пропустить первые две строки, если они не являются исторической информацией.
Select-Object
ConvertFrom-Csv - создать объект из каждой строки, используя символ канала в качестве разделителя между свойствами.
ConvertFrom-Csv
Select-Object - просто используя вычисляемое свойство для преобразования Date из строки в datetime, чтобы вы могли использовать вычисления даты, чтобы получить только последние 7 дней.
Date
datetime
Select-Object -Skip 2 | ConvertFrom-Csv -Delimiter '|' -Header 'Date','Site' | Select-Object -Property @{Name = 'Date'; Expression = {[datetime]$_.Date}},Site
С некоторыми тестовыми данными:
$output = @" Username : Admin C:\\Users\\Admin\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\nr0o1s57.default\\places.sqlite 2019-01-11 15:00:07|https://www.mozilla.org/privacy/firefox/ 2019-01-11 15:00:07|https://www.mozilla.org/en-US/privacy/firefox/ 2019-01-11 15:02:28|https://twitter.com/ 2019-01-12 12:01:09|https://twitter.com/ 2019-01-12 11:36:28|http://google.com/ 2019-01-12 11:36:28|http://www.google.com/ 2019-01-12 11:36:28|https://www.google.com/ 2019-01-12 12:01:03|https://www.amazon.com 2019-01-01 12:01:03|https://www.stackoverflow.com 2019-01-02 12:01:03|https://www.superuser.com "@ # not be needed if your output is an array of strings $output = $output.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) # create object from output $history = $output | Select-Object -Skip 2 | ConvertFrom-Csv -Delimiter '|' -Header 'Date','Site' | Select-Object -Property @{Name = 'Date'; Expression = {[datetime]$_.Date}},Site # get only last 7 days $history | Where-Object -Property Date -GT (Get-Date).AddDays(-7)
Выходы:
Date Site ---- ---- 11/01/2019 15:00:07 https://www.mozilla.org/privacy/firefox/ 11/01/2019 15:00:07 https://www.mozilla.org/en-US/privacy/firefox/ 11/01/2019 15:02:28 https://twitter.com/ 12/01/2019 12:01:09 https://twitter.com/ 12/01/2019 11:36:28 http://google.com/ 12/01/2019 11:36:28 http://www.google.com/ 12/01/2019 11:36:28 https://www.google.com/ 12/01/2019 12:01:03 https://www.amazon.com
Затем вы можете сохранить это в файл:
$history | Where-Object -Property Date -GT (Get-Date).AddDays(-7) | Out-File history.txt
Или использовать Format-List для отображенияэто как список (который затем сохраняется как файл с использованием Out-File):
Format-List
$history | Where-Object -Property Date -GT (Get-Date).AddDays(-7) | Format-List
Date : 11/01/2019 15:00:07 Site : https://www.mozilla.org/privacy/firefox/ Date : 11/01/2019 15:00:07 Site : https://www.mozilla.org/en-US/privacy/firefox/ Date : 11/01/2019 15:02:28 Site : https://twitter.com/ Date : 12/01/2019 12:01:09 Site : https://twitter.com/ Date : 12/01/2019 11:36:28 Site : http://google.com/ Date : 12/01/2019 11:36:28 Site : http://www.google.com/ Date : 12/01/2019 11:36:28 Site : https://www.google.com/ Date : 12/01/2019 12:01:03 Site : https://www.amazon.com
Не так уж много работы при условии:
|
Следующий код просто разбивает текст на новые строки, пропускает первые два, а затем выполняет базовый анализ результата.
$Str = "Username : Admin C:\\Users\\Admin\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\nr0o1s57.default\\places.sqlite 2019-01-11 15:00:07|https://www.mozilla.org/privacy/firefox/ 2019-01-11 15:00:07|https://www.mozilla.org/en-US/privacy/firefox/ 2019-01-11 15:02:28|https://twitter.com/ 2019-01-12 12:01:09|https://twitter.com/" $Str -split '[\r\n]+' | Select -Skip 2 | % { $D,$S = $_ -split '\|' [PSCustomObject]@{ Date = [DateTime]::ParseExact($D,'yyyy-MM-dd HH:mm:ss',[CultureInfo]::InvariantCulture) Site = $S } }
Вы получите что-то вроде этого.
Date Site ---- ---- 11/01/2019 15:00:07 https://www.mozilla.org/privacy/firefox/ 11/01/2019 15:00:07 https://www.mozilla.org/en-US/privacy/firefox/ 11/01/2019 15:02:28 https://twitter.com/ 12/01/2019 12:01:09 https://twitter.com/