Powershell:编辑 Firefox Prefs.js 文件

Powershell:编辑 Firefox Prefs.js 文件

我正在尝试更新 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 将输出写入文件。第二次尝试中的无限循环令人费解:没有循环...

我尝试根据在线看到的示例来设计我的代码,但它们似乎不起作用。有什么想法吗?

答案1

您错误地使用了 Set-Content。

来自微软使用 Set-Content Cmdlet

例如,此命令将文本“This is a test”写入文本文件 C:\Scripts\Test.txt:

设置内容 c:\scripts\test.txt“这是一个测试”

因此Set-Content $PrefsFiles,您没有指定要写入的文本/内容,因此它将文件的内容设置为无(使其成为空白)。

您将内容读入 $Prefsjs,然后对其进行修改,因此您需要提供它作为您想要写入的内容——尝试:

Set-Content $PrefsFiles $Prefsjs

答案2

采取稍微不同的方法并使其发挥作用:

#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

答案3

除非我错了,否则比尔的答案并没有遍历所有的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"

}

相关内容