【问题标题】:Replace text in google preferences file替换谷歌首选项文件中的文本
【发布时间】:2022-01-03 08:41:15
【问题描述】:

我们的组织正在将 chrome 作为默认浏览器。

问题是,它已经在大多数车队中,并且自定义语言设置已设置为 en-US。我需要一些方法将其修改为 en-AU。

我最初使用 fart.exe 并用 en-AU 替换了所有 en-US 实例,但是当 chrome 重新启动时,它不喜欢这种格式。

我基本上想做的是替换:

"intl":{"accept_languages":"en-US,en-AU,en-GB,en","selected_languages":"en-US,en-AU,en-GB,en"}

"intl":{"accept_languages":"en-AU","selected_languages":"en-AU"}

问题是“accept_languages”之后的文本:可以是国家/地区设置的任意组合。

我被难住了。谁能指出我正确的方向?

【问题讨论】:

  • 看起来文件是 JSON 格式。您可以使用ConvertFrom-Json 将其读入对象图,操作该对象图,然后使用ConvertTo-Json 重新转换为 JSON 并保存。
  • 如果您不关心语言,只需将它们全部替换为您想要的语言"[^"]+?""intl":{"accept_languages":"[^"]+?","selected_languages":"[^"]+?"}。替换为"intl":{"accept_languages":"en-AU","selected_languages":"en-AU"}
  • @user3783243 谢谢你。我想出了这个。似乎进行了修改: $FilePath = "C:\Temp\Preferences" (Get-Content -Raw $FilePath) -replace '"intl":{"accept_languages":"[^"]+?","selected_languages" :"[^"]+?"}.' , '"intl":{"accept_languages":"en-AU","selected_languages":"en-AU"},' |输出文件 $FilePath -Encoding UTF8

标签: json powershell


【解决方案1】:

这种情况下不需要regex,你可以使用ConvertFrom-Json来更新它:

$json = @'
{
    "intl":{
        "accept_languages":"en-US,en-AU,en-GB,en",
        "selected_languages":"en-US,en-AU,en-GB,en"
    }
}
'@ | ConvertFrom-Json

$json.intl.'accept_languages' = 'en-AU'
$json.intl.'selected_languages' = 'en-AU'

$json | ConvertTo-Json | Out-File path\to\json.json -Encondig utf8

在上面的例子中,$json | ConvertTo-Json 会产生一个像这样的 Json:

{
  "intl": {
    "accept_languages": "en-AU",
    "selected_languages": "en-AU"
  }
}

注意,文件的默认编码似乎是ANSI,在这种情况下-Encondig Default 应该可以工作。谢谢@Theo

【讨论】:

  • 我喜欢这个(我之前没有听说过这个 powershell 选项)。我尝试了以下方法,但没有将其改回 utf8 并且 chrome 不会接受它 $json = Get-Content C:\temp\preferences | ConvertFrom-Json $json.intl.'accept_languages' = 'en-AU' $json.intl.'selected_languages' = 'en-AU' $json |转换为 JSON |输出文件 C:\temp\Preferences -Encoding utf8
  • @alokin123 我不认为 Chrome 喜欢包含 utf8 BOM 的文件。试试Set-Content -Path 'C:\temp\Preferences' -Encoding Default
  • 感谢@Theo,通过查看master_preferences 文件,我可以看到默认编码是ANSI-Encoding Default 应该可以工作,但尚未测试。
  • 感谢您的关注。我尝试将其设置为默认值,一旦我重新启动 chrome,chrome 就会爆炸。我注意到,当我在记事本中打开首选项文件时,它在运行代码后整齐地格式化,但在此之前它都是一团糟。
  • 在类似的情况下我也发现Chrome非常不愿意接受来自“外部”的改变。它不喜欢篡改,如果发现更改不是由 chrome 本身进行的,它想要恢复到出厂设置……不记得我当时试图操纵的是什么,但这里可能就是这种情况太..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2020-05-25
  • 2012-12-30
  • 2011-03-07
  • 2016-10-22
相关资源
最近更新 更多