305 lines
7.9 KiB
PowerShell
305 lines
7.9 KiB
PowerShell
# Get profile folders
|
|
function TBGetProfiles{
|
|
$profilesIni = "$env:APPDATA" + "/Thunderbird/profiles.ini"
|
|
$profiles = @()
|
|
|
|
foreach($line in (Get-Content $profilesIni)){
|
|
if($line -match '^Path=(.*)$'){
|
|
$path = $matches[1]
|
|
|
|
if($path -match '^Profiles/.*$'){
|
|
$path = "$env:APPDATA" + '/Thunderbird/' + $path
|
|
if(Test-Path $path){
|
|
$profiles += @($path)
|
|
}
|
|
}else{
|
|
if(Test-Path $path){
|
|
$profiles += @($path)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# return every profile path for every profile found in Thunderbird profiles directory
|
|
return $profiles
|
|
}
|
|
|
|
# Get prefs.js config content
|
|
function TBGetConfig{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$profilePath
|
|
)
|
|
|
|
# Verify that profilePath exists
|
|
if(Test-Path $profilePath){
|
|
# Check if prefs.js exists
|
|
$prefsJS = $profilePath + "/prefs.js"
|
|
if((Test-Path $prefsJS)){
|
|
# Return content of prefs.js
|
|
return (Get-Content -Path $prefsJS)
|
|
}
|
|
}
|
|
}
|
|
|
|
function TBRevertBackup{
|
|
param(
|
|
[string]$profilePath
|
|
)
|
|
# Searching for old backups
|
|
$nums = Get-ChildItem -Path $profilePath | Where Name -Like "prefs-*.js" | foreach {$_.Name.Split("-")[1].Split(".")[0]}
|
|
if($nums.length -ne 0){
|
|
$numlist = @()
|
|
|
|
# getting backups number
|
|
foreach($num in $nums){
|
|
$numlist += [int]$num
|
|
}
|
|
|
|
# getting last backup number
|
|
$lastbackup = $numlist | sort | select -Last 1
|
|
}else{
|
|
# no backup found
|
|
Write-Host "No backup found."
|
|
}
|
|
Move-Item "$profilePath\prefs-$lastbackup.js" "$profilePath\prefs.js" -Force
|
|
}
|
|
|
|
# Get prefs.js config content
|
|
function TBSaveConfig{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$profilePath,
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration
|
|
)
|
|
|
|
# Verify that profilePath exists
|
|
if(Test-Path $profilePath){
|
|
# Check if prefs.js exists
|
|
$prefsJS = $profilePath + "/prefs.js"
|
|
if((Test-Path $prefsJS)){
|
|
TBCreateConfigBackup $profilePath
|
|
}
|
|
Set-Content $configuration -Path $prefsJS
|
|
}
|
|
}
|
|
|
|
# Create a backup of prefs.js with incrementing number
|
|
function TBCreateConfigBackup{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$profilePath
|
|
)
|
|
|
|
# Searching for old backups
|
|
$nums = Get-ChildItem -Path $profilePath | Where Name -Like "prefs-*.js" | foreach {$_.Name.Split("-")[1].Split(".")[0]}
|
|
if($nums.length -ne 0){
|
|
$numlist = @()
|
|
|
|
# getting backups number
|
|
foreach($num in $nums){
|
|
$numlist += [int]$num
|
|
}
|
|
|
|
# getting last backup number
|
|
$lastbackup = $numlist | sort | select -Last 1
|
|
$lastbackup++
|
|
}else{
|
|
# no backup found
|
|
$lastbackup = 1
|
|
}
|
|
|
|
$backupSource = $profilePath + "/prefs.js"
|
|
$backupDestination = $profilePath + "/prefs-" + $lastbackup + ".js"
|
|
|
|
# Creating new backup
|
|
Copy-Item -Path $backupSource -Destination $backupDestination
|
|
}
|
|
|
|
# Retrieve every mail account settings for every account
|
|
# or only one with the optional "id" parameter
|
|
function TBGetMailAccountSettings{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration,
|
|
$id
|
|
)
|
|
|
|
# Pattern based on id set or every id
|
|
if($id -ne $null){
|
|
$searchPattern = "^user_pref\(`"mail\.identity\.id"+$id+"\."
|
|
}else{
|
|
$searchPattern = "^user_pref\(`"mail\.identity\.id[0-9]+\."
|
|
}
|
|
|
|
$lines = $configuration | Select-String $searchPattern | foreach{ $_.Line }
|
|
|
|
$mailAccounts = [ordered]@{}
|
|
|
|
foreach($line in $lines){
|
|
# This allow us to used $matches to get account id, parameter name and parameter value
|
|
if($line -match "^user_pref\(`"mail\.identity\.id([0-9]+)\.([^`"]+)`", ([^\)]+)\);"){
|
|
$mailAccount = @{$matches[2] = $matches[3]}
|
|
}
|
|
# We add every account to a hashtable that will be returned
|
|
$mailAccounts[$matches[1]] += $mailAccount
|
|
}
|
|
|
|
return $mailAccounts
|
|
}
|
|
|
|
function TBGetTagsSettings{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration
|
|
)
|
|
|
|
$searchPattern = "^user_pref\(`"mailnews\.tags\."
|
|
|
|
$lines = $configuration | Select-String $searchPattern | foreach{ $_.Line }
|
|
|
|
return $lines
|
|
}
|
|
|
|
function TBDeleteTagsSettings{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration
|
|
)
|
|
|
|
$searchPattern = "^user_pref\(`"mailnews\.tags\."
|
|
|
|
$configuration = $configuration | Select-String $searchPattern -NotMatch | foreach{ $_.Line }
|
|
|
|
return $configuration
|
|
}
|
|
|
|
# Update mail account setting in prefs.js
|
|
function TBSetMailAccountSettings{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration,
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$id,
|
|
[Parameter(Mandatory=$true)]
|
|
[hashtable]$settings
|
|
)
|
|
|
|
foreach($setting in $settings.getEnumerator()){
|
|
$parameterName = $setting.key
|
|
|
|
# Create search pattern with id and parameterName
|
|
$searchPattern = "user_pref(`"mail.identity.id" + $id +"." + $parameterName + "`""
|
|
# Search for matching line in conf
|
|
$lineInConf = $configuration | Select-String $searchPattern -SimpleMatch | foreach{ $_.Line }
|
|
|
|
# format new value based on type of value (boolean, int, string)
|
|
if((($setting.value -ne "false") -and ($setting.value -ne "true")) -and ($setting.value -is [string])){
|
|
# add "" for strings only
|
|
$parameterValue = "`""+$setting.value+"`""
|
|
}else{
|
|
$parameterValue = $setting.value
|
|
}
|
|
|
|
# Create line to set in conf with new value
|
|
$lineToSet = "user_pref(`"mail.identity.id" + $id + "." + $parameterName + "`", " + $parameterValue + ");"
|
|
|
|
# Check if the line already exist in the conf with the same value
|
|
# and replace it if it does and add it if it does not exist
|
|
if($lineInConf -ne $null){
|
|
if($lineInConf -ne $lineToSet){
|
|
$configuration = $configuration.replace($lineInConf, $lineToSet)
|
|
}
|
|
}else{
|
|
$configuration += $lineToSet
|
|
}
|
|
}
|
|
# return new conf
|
|
return $configuration
|
|
}
|
|
|
|
function TBSetGlobalSettings{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration,
|
|
[Parameter(Mandatory=$true)]
|
|
[hashtable]$settings
|
|
)
|
|
foreach($setting in $settings.getEnumerator()){
|
|
$parameterName = $setting.key
|
|
|
|
# Create search pattern with id and parameterName
|
|
$searchPattern = "user_pref(`"" + $parameterName + "`""
|
|
# Search for matching line in conf
|
|
$lineInConf = $configuration | Select-String $searchPattern -SimpleMatch | foreach{ $_.Line }
|
|
|
|
# format new value based on type of value (boolean, int, string)
|
|
if((($setting.value -ne "false") -and ($setting.value -ne "true")) -and ($setting.value -is [string])){
|
|
# add "" for strings only
|
|
$parameterValue = "`""+$setting.value+"`""
|
|
}else{
|
|
$parameterValue = $setting.value
|
|
}
|
|
|
|
# Create line to set in conf with new value
|
|
$lineToSet = "user_pref(`"" + $parameterName + "`", " + $parameterValue + ");"
|
|
|
|
# Check if the line already exist in the conf with the same value
|
|
# and replace it if it does and add it if it does not exist
|
|
if($lineInConf -ne $null){
|
|
if($lineInConf -ne $lineToSet){
|
|
$configuration = $configuration.replace($lineInConf, $lineToSet)
|
|
}
|
|
}else{
|
|
$configuration += $lineToSet
|
|
}
|
|
}
|
|
return $configuration
|
|
}
|
|
|
|
# Delete mail account setting in prefs.js
|
|
function TBDeleteMailAccountSettings{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration,
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$id,
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$settings
|
|
)
|
|
|
|
foreach($setting in $settings.getEnumerator()){
|
|
$parameterName = $setting
|
|
|
|
# Create search pattern with id and parameterName
|
|
$searchPattern = "user_pref(`"mail.identity.id" + $id +"." + $parameterName + "`""
|
|
# Search for not matching line in conf
|
|
$configuration = $configuration | Select-String $searchPattern -NotMatch -SimpleMatch | foreach{ $_.Line }
|
|
}
|
|
# return new conf
|
|
return $configuration
|
|
}
|
|
|
|
# Delete setting in prefs.js
|
|
function TBDeleteGlobalSettings{
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$configuration,
|
|
[Parameter(Mandatory=$true)]
|
|
[array]$settings
|
|
)
|
|
|
|
foreach($setting in $settings.getEnumerator()){
|
|
$parameterName = $setting
|
|
$setting
|
|
|
|
# Create search pattern with id and parameterName
|
|
$searchPattern = "user_pref(`"" + $parameterName + "`""
|
|
# Search for not matching line in conf
|
|
$configuration = $configuration | Select-String $searchPattern -NotMatch -SimpleMatch | foreach{ $_.Line }
|
|
}
|
|
# return new conf
|
|
return $configuration
|
|
}
|