Powershell: Editando o arquivo Firefox Prefs.js

1

Estou tentando atualizar o arquivo Firefox Prefs.js e estou preso:

#Sets up a bogus (0.0.0.0) proxy for FireFox
#Modfies the following settings in Firefox's pref.js configuration file:

#user_pref("network.proxy.http", "0.0.0.0");
#user_pref("network.proxy.http_port", 80);
#user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, 192.0.0.0/8, 10.0.0.0/8");

#locate the prefs.js files
$PrefsFiles = Get-Item -Path ($env:SystemDrive+"\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\prefs.js")

$out = $PrefsFiles.FullName + ".new"
#Read in the content
$Prefsjs = (Get-Content $PrefsFiles)

$Prefsjs -replace 'user_pref\(\"network.proxy.http\".+', 'user_pref("network.proxy.http", "0.0.0.0");'
$Prefsjs -replace 'user_pref\(\"network.proxy.http.port\".+', 'user_pref("network.proxy.http_port", 80);'
$Prefsjs -replace 'user_pref\(\"network.proxy.http.no_proxies\".+', 'user_pref("network.proxy.no_proxies_on", "localhost, 127.1.1.1, 192.1.0.0/8, 10.0.0.0/8");'
Set-Content $PrefsFiles

Enquanto o código acima parece fazer as alterações desejadas. (Eu posso ver o conteúdo do arquivo na janela de comando e as alterações estão lá.) O arquivo termina em branco.

Eu tentei uma abordagem diferente e ela entrou em um loop infinito:

#Sets up a bogus (0.0.0.0) proxy for FireFox
#Modfies the following settings in Firefox's pref.js configuration file:

#user_pref("network.proxy.http", "0.0.0.0");
#user_pref("network.proxy.http_port", 80);
#user_pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, 192.0.0.0/8, 10.0.0.0/8");

#locate the prefs.js files
$PrefsFiles = Get-Item -Path ($env:SystemDrive+"\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\prefs.js")

$out = $PrefsFiles.FullName + ".new"

(Get-Content $PrefsFiles) | ForEach-Object{

$_ -replace 'user_pref\(\"network.proxy.http\".+', 'user_pref("network.proxy.http", "0.0.0.0");'
$_ -replace 'user_pref\(\"network.proxy.http.port\".+', 'user_pref("network.proxy.http_port", 80);'
$_ -replace 'user_pref\(\"network.proxy.http.no_proxies\".+', 'user_pref("network.proxy.no_proxies_on", "localhost, 127.1.1.1, 192.1.0.0/8, 10.0.0.0/8");'
} | Set-Content $out

Eu sei que estou perto, mas parece que não consigo configurar o conteúdo para gravar a saída no arquivo. O loop infinito na segunda tentativa é intrigante: não há loop ...

Eu tentei padronizar meu código com base nos exemplos que vi online, mas eles simplesmente não parecem funcionar. Alguma idéia?

    
por Bill Westrup 29.10.2015 / 19:06

3 respostas

0

Adoptou uma abordagem ligeiramente diferente e conseguiu que funcionasse:

#read in the prefs file
#locate the prefs.js files
$PrefsFiles = Get-Item -Path ($env:SystemDrive+"\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\prefs.js")
$out = @()
$out2 = @()

#clear screen
clear

#load changes
$Update= 'user_pref("network.proxy.backup.ftp", "0.0.0.0");
user_pref("network.proxy.backup.ftp_port", 80);
user_pref("network.proxy.backup.socks", "0.0.0.0");
user_pref("network.proxy.backup.socks_port", 80);
user_pref("network.proxy.backup.ssl", "0.0.0.0");
user_pref("network.proxy.backup.ssl_port", 80);
user_pref("network.proxy.ftp", "0.0.0.0");
user_pref("network.proxy.ftp_port", 80);
user_pref("network.proxy.http", "0.0.0.0");
user_pref("network.proxy.http_port", 80);
user_pref("network.proxy.no_proxies_on", "localhost,    127.0.0.1,10.0.0.0/8,192.0.0.0/8");
user_pref("network.proxy.share_proxy_settings", true);
user_pref("network.proxy.socks", "0.0.0.0");
user_pref("network.proxy.socks_port", 80);
user_pref("network.proxy.ssl", "0.0.0.0")
user_pref("network.proxy.ssl_port", 80);
user_pref("network.proxy.type", 1);'


#Read in Prefsjs
$Prefsjs = (Get-Content $PrefsFiles)

#delete all the network proxy settings
foreach ($line in $Prefsjs){
if ($line -like 'user_pref("network.proxy.*') {$line = $null}

Else
{$out+= $line}
}




#add the whole chunk of proxy settings
foreach ($line in $out)
{
if ($line -like 'user_pref("network.cookie.prefsMigrated"*')
    {
    $out2+=$line+$Update
    }
    Else
        {
        $out2+= $line
        }
} 

$out2

#back up the existing file
Copy-Item $PrefsFiles $PrefsFiles".back"
#writeout the new file
Clear-Content $PrefsFiles
Add-Content $PrefsFiles $out2
    
por 02.11.2015 / 15:43
1

Você está usando o Set-Content incorretamente.

De Usando o Cmdlet Set-Content

da Microsoft

For example, this command writes the text “This is a test” to the text file C:\Scripts\Test.txt:

Set-Content c:\scripts\test.txt "This is a test"

Portanto, com Set-Content $PrefsFiles , você não especificou nenhum texto / conteúdo a ser escrito e, por isso, está definindo o conteúdo do arquivo como nada (tornando-o em branco).

Você lê o conteúdo em $ Prefsjs e depois o modifica, então você precisa fornecer isso como o conteúdo que deseja escrever - tente:

Set-Content $PrefsFiles $Prefsjs
    
por 29.10.2015 / 19:19
0

A menos que eu esteja errado, a resposta do Bill não se repete sobre todos os prefs.js, apesar de carregar todos eles. (?)

Por favor, encontre abaixo um código atualizado

$PrefsFiles = Get-Item -Path ($env:SystemDrive+"\Users\*\AppData\Roaming\Mozilla\Firefox\Profiles\*\prefs.js")
$currentDate=Get-Date -UFormat "%Y-%m-%d-%Hh%M"

#clear screen
clear


# Go through all files
foreach ($file in $PrefsFiles) {
$path = Get-ItemProperty -Path $file
 Write-Output "editing $path"
    $out = @()

    #Clean selected values

    foreach ($line in Get-Content $file){


        if (-Not ($line.Contains('"network.proxy.type",')) -and -Not ($line.Contains('"security.sandbox.content.level",')) ) {

             $out+= $line     
        }
    }

    #Add new values
    $out+= 'user_pref("network.proxy.type", 4);'
    $out+= 'user_pref("security.sandbox.content.level", 2);'


    #back up the existing file
    Copy-Item $file $file$currentDate".txt"

    #writeout the new file
    Clear-Content $file
    Add-Content $file $out

    Write-Output "Updated $path"

}
    
por 09.04.2018 / 11:27