1

Я пытаюсь обновить файл Firefox Prefs.js и застрял:

#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

Хотя приведенный выше код, похоже, вносит нужные изменения. (Я вижу содержимое файла в командном окне и изменения есть.) Файл заканчивается пустым.

Я попробовал другой подход, и он входит в бесконечный цикл:

#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

Я знаю, что я близко, но у меня просто не получается получить set-content для записи вывода в файл. Бесконечный цикл во второй попытке озадачивает: цикла нет ...

Я попытался создать паттерн своего кода на основе примеров, которые я видел в Интернете, но они просто не работают. Есть идеи?

3 ответа3

1

Вы используете Set-Content неправильно.

Microsoft использует командлет Set-Content

Например, эта команда записывает текст "Это тест" в текстовый файл C:\Scripts\Test.txt:

Set-Content c:\scripts\test.txt "Это тест"

Поэтому, используя Set-Content $PrefsFiles , вы не указали текст / контент для записи, и поэтому он устанавливает содержимое файла в ничто (делая его пустым).

Вы читаете содержимое в $ Prefsjs, а затем изменяете его, поэтому вам нужно предоставить его в качестве содержимого, которое вы хотите написать - попробуйте:

Set-Content $PrefsFiles $Prefsjs
0

Если я не ошибаюсь, ответ Билла не перебирает все prefs.js, хотя загружает их все. (?)

Пожалуйста, найдите ниже обновленный код


$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"

}
0

Взял немного другой подход и заставил его работать:

#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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .