我正在尝试更新 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。
例如,此命令将文本“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"
}