# Bookmarks merge from chrome into edge

**URL:** <https://forums.powershell.org/t/bookmarks-merge-from-chrome-into-edge/21644>\
**Category:** PowerShell Help\
**Created:** [February 13, 2023, 7:19pm UTC](https://forums.powershell.org/t/bookmarks-merge-from-chrome-into-edge/21644 "2023-02-13T19:19:07Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![frenk](https://avatars.discourse-cdn.com/v4/letter/f/c0e974/32.png) [@frenk](https://forums.powershell.org/u/frenk)\
**Post date:** [February 13, 2023, 7:19pm UTC](https://forums.powershell.org/t/bookmarks-merge-from-chrome-into-edge/21644/1 "2023-02-13T19:19:07Z")

</div>

Hi, I have a script that merges bookmars and folders from chrome to edge. The only issue is it migrates folders twice. Can you help to fix it?

```auto
#Script to import Chrome bookmarks to MS Edge
function Get-ChildBooks($children){
    
    $out = @()
    foreach ($nbook in $children)
    {
         if($nbook.type -eq 'url'){
                    
                        $out += [PSCustomObject]@{
                        
                                date_added = $nbook.date_added
                                guid = $nbook.guid
                                id = $nbook.id
                                name = $nbook.name
                                show_icon = 'False'
                                source = 'user_add'
                                type = $nbook.type
                                url = $nbook.url
                    
                        }
              }else{                        
                         $out += [PSCustomObject]@{
                        
                                children = @([System.Array]$(Get-ChildBooks -children $nbook.children))
                                date_added = $nbook.date_added
                                date_last_used = $nbook.date_last_used
                                date_modified = $nbook.date_modified
                                guid = $nbook.guid
                                id = $nbook.id
                                name = $nbook.name
                                source = 'extension'
                                type = 'folder'

                                }
            }
    }

    return $out
}

try{
    
    $ChromeBookMarks = Get-Content "$env:LOCALAPPDATA\Google\Chrome\User Data\*\bookmarks" -raw | ConvertFrom-Json

    $EdgeBookMarks = Get-Content "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\bookmarks" -raw | ConvertFrom-Json
    #$EdgeBookMarks = $id
    foreach ($item in @('bookmark_bar', 'other', 'synced'))
    {
        foreach($chromebook in $ChromeBookMarks){
            $folder = $chromebook.roots.$item
            if($folder.children.Count -gt 0){
                foreach ($book in $folder.children)
                {
                    
                    if($book.type -eq 'url' -and $book.url -in $EdgeBookMarks.roots.$item.children.url){
                        continue
                    }
                    if($book.type -eq 'url'){
                    
                        $EdgeBookMarks.roots.$item.children += [PSCustomObject]@{
                        
                                date_added = $book.date_added
                                guid = $book.guid
                                id = $book.id
                                name = $book.name
                                show_icon = 'False'
                                source = 'user_add'
                                type = $book.type
                                url = $book.url
                    
                        }
                    }else{                        
                         $EdgeBookMarks.roots.$item.children += [PSCustomObject]@{
                        
                                children = @([System.Array]$(Get-ChildBooks -children $book.children))
                                date_added = $book.date_added
                                date_last_used = $book.date_last_used
                                date_modified = $book.date_modified
                                guid = $book.guid
                                id = $book.id
                                name = $book.name
                                source = 'extension'
                                type = 'folder'

                        }
                    }
                }
            }
         }
    }    
    
    $start = $false
    $process = Get-Process -Name msedge -ErrorAction SilentlyContinue
    if($null -ne $process){
        $process |Stop-Process -Force -ErrorAction SilentlyContinue
        $start = $true
    }
    [string]$Json = ConvertTo-Json -InputObject $EdgeBookMarks -Depth 10

    [int]$Indentation = 4

    if ($Json -notmatch '\r?\n') {
        $Json = ($Json | ConvertFrom-Json) | ConvertTo-Json -Depth 100
    }

    $indent = 0
    $regexUnlessQuoted = '(?=([^"]*"[^"]*")*[^"]*$)'

    $result = $Json -split '\r?\n' |
        ForEach-Object {
            if ($_ -match "[}\]]$regexUnlessQuoted") {
                $indent = [Math]::Max($indent - $Indentation, 0)
            }

            $line = (' ' * $indent) + ($_.TrimStart() -replace ":\s+$regexUnlessQuoted", ': ')

            if ($_ -match "[\{\[]$regexUnlessQuoted") {
                $indent += $Indentation
            }

            $line
        }

    $k = ""
    for ($i = 0; $i -lt $result.Count; $i++)
    { 
    $k += $result[$i] + [environment]::NewLine
        if($result[$i] -like '*"children":*'){
        #if($i -gt 5){break}
            $k = $k.trim() + " "
            if($result[$i+2].trim() -eq '],'){
                $k = $k + $result[$i+2].Trim() + [environment]::NewLine
                $i+=2
                continue
            }
            $k += $result[$i+1].trim() + [environment]::NewLine
            $i++
        }
    }
    $k = $k.Trim()
    Remove-Item -Path "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\bookmarks*" -Force -ErrorAction SilentlyContinue
    
    $k | Set-Content "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\bookmarks" -Encoding UTF8 
    $k | Set-Content "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\bookmarks.mbak" -Encoding UTF8 
    
    Write-Host "Chrome bookmarks successfully imported to edge. Please start the edge. " -BackgroundColor Green -ForegroundColor White
}catch{
    Write-Host "Error: Failed to import chrome bookmarks. $($_.Exception.Message)" -BackgroundColor Red
}

```

---

<div class="post-metadata">

**Author:** ![dotnVo](https://avatars.discourse-cdn.com/v4/letter/d/4af34b/32.png) [@dotnVo](https://forums.powershell.org/u/dotnVo)\
**Post date:** [May 16, 2024, 8:15pm UTC](https://forums.powershell.org/t/bookmarks-merge-from-chrome-into-edge/21644/2 "2024-05-16T20:15:10Z")

</div>


