Showing results for 
Show  only  | Search instead for 
Did you mean: 
Former Member
Not applicable
Report Inappropriate Content
Message 1 of 1

Custom collector - Webhistory - search results no accurate


We have a custom collector running a Powershell script to get web history and bookmarks from end points. However, the results of the search is not accurate...some user's information is missing.

When checked the MAR log of one of the failing end points there's an error 4084 ERROR Plugin [0] : 9.2 Exception xxxxxxxx"

I'm not a powershell nor a MAR expert so any assistance to get this collector working is much appreciated. Thanks in advance

The Powershell script is:

function Get-BrowserData {
Dumps Browser Information
Author: @424f424f
License: BSD 3-Clause
Required Dependencies: None
Optional Dependencies: None
Enumerates browser history or bookmarks for a Chrome, Internet Explorer,
and/or Firefox browsers on Windows machines.
The type of browser to enumerate, 'Chrome', 'IE', 'Firefox' or 'All'
Type of data to enumerate, 'History' or 'Bookmarks'
Specific username to search browser information for.
Term to search for
PS C:\> Get-BrowserInformation
Enumerates browser information for all supported browsers for all current users.
PS C:\> Get-BrowserInformation -Browser IE -Datatype Bookmarks -UserName user1
Enumerates bookmarks for Internet Explorer for the user 'user1'.
PS C:\> Get-BrowserInformation -Browser All -Datatype History -UserName user1 -Search 'github'
Enumerates bookmarks for Internet Explorer for the user 'user1' and only returns
results matching the search term 'github'.
[Parameter(Position = 0)]
[ValidateSet('Chrome','IE','FireFox', 'All')]
$Browser = 'All',

[Parameter(Position = 1)]
$DataType = 'All',

[Parameter(Position = 2)]
$UserName = '',

[Parameter(Position = 3)]
$Search = ''


function ConvertFrom-Json20([object] $item){
Add-Type -AssemblyName System.Web.Extensions
$ps_js = New-Object System.Web.Script.Serialization.JavaScriptSerializer
return ,$ps_js.DeserializeObject($item)


function Get-ChromeHistory($user) {
$Path = "$Env:systemdrive\Users\$user\AppData\Local\Google\Chrome\User Data\Default\History"
if (-not (Test-Path -Path $Path)) {
Write-Verbose "[!] Could not find Chrome History for username: $UserName"
$Regex = '(htt(p|s))://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)*?'
$Value = Get-Content -Path "$Env:systemdrive\Users\$user\AppData\Local\Google\Chrome\User Data\Default\History"|Select-String -AllMatches $regex |% {($_.Matches).Value} |Sort -Unique
$Value | ForEach-Object {
$Key = $_
if ($Key -match $Search){
Write-Output "Chrome,History,$user,$Key"

function Get-ChromeBookmarks($user) {
$Path = "$Env:systemdrive\Users\$user\AppData\Local\Google\Chrome\User Data\Default\Bookmarks"
if (-not (Test-Path -Path $Path)) {
Write-Verbose "[!] Could not find FireFox Bookmarks for username: $UserName"
} else {
$Json = Get-Content $Path
$Output = ConvertFrom-Json20($Json)
$Jsonobject = $Output.roots.bookmark_bar.children
$Jsonobject.url |Sort -Unique | ForEach-Object {
if ($_ -match $Search) {
Write-Output "Chrome,Bookmark,$user,$_"

function Get-InternetExplorerHistory {

$Null = New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
$Paths = Get-ChildItem 'HKU:\' -ErrorAction SilentlyContinue | Where-Object { $_.Name -match 'S-1-5-21-[0-9]+-[0-9]+-[0-9]+-[0-9]+$' }

ForEach($Path in $Paths) {

$User = ([System.Security.Principal.SecurityIdentifier] $Path.PSChildName).Translate( [System.Security.Principal.NTAccount]) | Select -ExpandProperty Value
$uname = $User.split('\')[1]
$Path = $Path | Select-Object -ExpandProperty PSPath

$UserPath = "$Path\Software\Microsoft\Internet Explorer\TypedURLs"

if (-not (Test-Path -Path $UserPath)) {
Write-Verbose "[!] Could not find IE History for SID: $Path"
else {
Get-Item -Path $UserPath -ErrorAction SilentlyContinue | ForEach-Object {
$Key = $_
$Key.GetValueNames() | ForEach-Object {
$Value = $Key.GetValue($_)
if ($Value -match $Search) {
Write-Output "IE,History,$uname,$Value"

function Get-InternetExplorerBookmarks {
$URLs = Get-ChildItem -Path "$Env:systemdrive\Users\" -Filter "*.url" -Recurse -ErrorAction SilentlyContinue
ForEach ($URL in $URLs) {
if ($URL.FullName -match 'Favorites') {
$User = $URL.FullName.split('\')[2]
Get-Content -Path $URL.FullName | ForEach-Object {
try {
if ($_.StartsWith('URL')) {
# parse the .url body to extract the actual bookmark location
$URL = $_.Substring($_.IndexOf('=') + 1)

if($URL -match $Search) {
Write-Output "IE,Bookmark,$User,$URL"
catch {
Write-Verbose "Error parsing url: $_"

function Get-FireFoxHistory($user) {
$Path = "$Env:systemdrive\Users\$user\AppData\Roaming\Mozilla\Firefox\Profiles\"
if (-not (Test-Path -Path $Path)) {
Write-Verbose "[!] Could not find FireFox History for username: $UserName"
else {
$Profiles = Get-ChildItem -Path "$Path\*.default\" -ErrorAction SilentlyContinue
$Regex = '(htt(p|s))://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)*?'
$Value = Get-Content $Profiles\places.sqlite | Select-String -Pattern $Regex -AllMatches |Select-Object -ExpandProperty Matches |Sort -Unique
$Value.Value |ForEach-Object {
if ($_ -match $Search) {
ForEach-Object {
Write-Output "Firefox,History,$user,$_"

$UserList = Get-ChildItem "C:\Users"
$UserList | ForEach-Object {
Get-ChromeHistory $_
Get-ChromeBookmarks $_
Get-FireFoxHistory $_





You Deserve an Award
Don't forget, when your helpful posts earn a kudos or get accepted as a solution you can unlock perks and badges. Those aren't the only badges, either. How many can you collect? Click here to learn more.

Community Help Hub

    New to the forums or need help finding your way around the forums? There's a whole hub of community resources to help you.

  • Find Forum FAQs
  • Learn How to Earn Badges
  • Ask for Help
Go to Community Help

Join the Community

    Thousands of customers use the McAfee Community for peer-to-peer and expert product support. Enjoy these benefits with a free membership:

  • Get helpful solutions from McAfee experts.
  • Stay connected to product conversations that matter to you.
  • Participate in product groups led by McAfee employees.
Join the Community
Join the Community