Получить историю браузера Mozilla Firefox с помощью powershell - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь получить историю браузера Mozilla Firefox из places.sqlite с powershell.

Это запрос, который я выполняю, переменная $mozillapath содержит местоположение файла places.sqlite.

".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/

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Select-Object - чтобы пропустить первые две строки, если они не являются исторической информацией.

ConvertFrom-Csv - создать объект из каждой строки, используя символ канала в качестве разделителя между свойствами.

Select-Object - просто используя вычисляемое свойство для преобразования Date из строки в datetime, чтобы вы могли использовать вычисления даты, чтобы получить только последние 7 дней.

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):

$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
0 голосов
/ 15 января 2019

Не так уж много работы при условии:

  • Всегда есть только две строчки ведущей информации
  • В тексте нет символов (|), кроме сплиттера

Следующий код просто разбивает текст на новые строки, пропускает первые два, а затем выполняет базовый анализ результата.

$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/      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...