Estoy buscando un script de PowerShell que pueda programar y que haga una copia de seguridad automática de todos mis Favoritos/Marcadores de IE, Edge y Chrome en una unidad separada en caso de que mi computadora portátil se atasque.
Puede alguien ayudarme con esto? Realmente lo apreciaría.
¡Gracias!
Respuesta1
La secuencia de comandosEdgeChromium-Bookmarks-Copia de seguridad-JSON-a-HTML.ps1logra lo que pediste para Edge (no he probado Chrome pero supongo que también podría funcionar).
Fue escrito para EdgeChromium Beta 78, sin embargo, todavía funciona para las versiones de Edge hasta 91 al momento de escribir este artículo.
Necesitas modificar la línea:
$JSON_File_Path = "$env:localappdata\Microsoft\Edge Beta\User Data\Default\Bookmarks"
a
$JSON_File_Path = "$env:localappdata\Microsoft\Edge\User Data\Default\Bookmarks"
y cree una carpeta denominada backup
en la siguiente ruta $env:userprofile\backup
( C:\Users\Username\backup
cambie el nombre de usuario por su nombre de usuario)
Respuesta2
Se actualizó para funcionar con Edge v98 y se solucionó el problema de la barra de favoritos. Solicitud de extracción de GitHub
# Read EdgeChromium Bookmarks (JSON File) and Export/Backup to HTML File
# Gunnar Haslinger, 30.10.2019 - tested width EdgeChromium Beta 78
# SCCMOG - Richie Schuster, 2022.02.08 - Tested with Edge Chromium 98.0.1108.43 - https://github.com/SCCMOG - SCCMOG.com
# Path to EdgeChromium Bookmarks File and HTML Export
$JSON_File_Path = "$($env:localappdata)\Microsoft\Edge\User Data\Default\Bookmarks"
$ExportedTime = Get-Date -Format 'yyyy-MM-dd_HH.mm'
$HTML_File_Root = "c:\admin"
$HTML_File_Path = "$($HTML_File_Root)\EdgeChromium-Bookmarks.backup_$($ExportedTime).html"
# Reference-Timestamp needed to convert Timestamps of JSON (Milliseconds / Ticks since LDAP / NT epoch 01.01.1601 00:00:00 UTC) to Unix-Timestamp (Epoch)
$Date_LDAP_NT_EPOCH = Get-Date -Year 1601 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0
if (!(Test-Path -Path $JSON_File_Path -PathType Leaf)) {
throw "Source-File Path $JSON_File_Path does not exist!"
}
if (!(Test-Path -Path $HTML_File_Root -PathType Container)) {
throw "Destination-Root Path $HTML_File_Root does not exist!"
}
# ---- HTML Header ----
$BookmarksHTML_Header = @'
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
It will be read and overwritten.
DO NOT EDIT! -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
'@
$BookmarksHTML_Header | Out-File -FilePath $HTML_File_Path -Force -Encoding utf8
# ---- Enumerate Bookmarks Folders ----
Function Get-BookmarkFolder {
[cmdletbinding()]
Param(
[Parameter(Position = 0, ValueFromPipeline = $True)]
$Node
)
function ConvertTo-UnixTimeStamp {
param(
[Parameter(Position = 0, ValueFromPipeline = $True)]
$TimeStamp
)
$date = [Decimal] $TimeStamp
if ($date -gt 0) {
$date = $Date_LDAP_NT_EPOCH.AddTicks($date * 10)
$date = $date | Get-Date -UFormat %s
$unixTimeStamp = [int][double]::Parse($date) - 1
return $unixTimeStamp
}
}
if ($node.name -like "Favorites Bar") {
$DateAdded = [Decimal] $node.date_added | ConvertTo-UnixTimeStamp
$DateModified = [Decimal] $node.date_modified | ConvertTo-UnixTimeStamp
" <DT><H3 FOLDED ADD_DATE=`"$($DateAdded)`" LAST_MODIFIED=`"$($DateModified)`" PERSONAL_TOOLBAR_FOLDER=`"true`">$($node.name )</H3>" | Out-File -FilePath $HTML_File_Path -Append -Force -Encoding utf8
" <DL><p>" | Out-File -FilePath $HTML_File_Path -Append -Force -Encoding utf8
}
foreach ($child in $node.children) {
$DateAdded = [Decimal] $child.date_added | ConvertTo-UnixTimeStamp
$DateModified = [Decimal] $child.date_modified | ConvertTo-UnixTimeStamp
if ($child.type -eq 'folder') {
" <DT><H3 ADD_DATE=`"$($DateAdded)`" LAST_MODIFIED=`"$($DateModified)`">$($child.name)</H3>" | Out-File -FilePath $HTML_File_Path -Append -Force -Encoding utf8
" <DL><p>" | Out-File -FilePath $HTML_File_Path -Append -Force -Encoding utf8
Get-BookmarkFolder $child # Recursive call in case of Folders / SubFolders
" </DL><p>" | Out-File -FilePath $HTML_File_Path -Append -Force -Encoding utf8
}
else {
# Type not Folder => URL
" <DT><A HREF=`"$($child.url)`" ADD_DATE=`"$($DateAdded)`">$($child.name)</A>" | Out-File -FilePath $HTML_File_Path -Append -Encoding utf8
}
}
if ($node.name -like "Favorites Bar") {
" </DL><p>" | Out-File -FilePath $HTML_File_Path -Append -Force -Encoding utf8
}
}
# ---- Convert the JSON Contens (recursive) ----
$data = Get-content $JSON_File_Path -Encoding UTF8 | out-string | ConvertFrom-Json
$sections = $data.roots.PSObject.Properties | Select-Object -ExpandProperty name
ForEach ($entry in $sections) {
$data.roots.$entry | Get-BookmarkFolder
}
# ---- HTML Footer ----
'</DL>' | Out-File -FilePath $HTML_File_Path -Append -Force -Encoding utf8