首页 > 解决方案 > 用powershell修改json文件

问题描述

我需要为用户修改 Chrome 的首选项文件。

这是想要的结果:

想要的结果图片

这是我到目前为止所拥有的,但它失败了:

get-childitem -path "$env:systemdrive\Users" | foreach-object {

  $path = "$env:systemdrive\Users\$_\appdata\local\google\chrome\user data\default\preferences"

  if(test-path $path){
    $prefs = get-content $path | convertfrom-json 
    if($prefs){

      if(!($prefs.protocol_handler.excluded_schemes.alfaoffline.swe)){
        $prefs.protocol_handler.excluded_schemes.alfaoffline | add-member -name "swe" -value false -MemberType NoteProperty #-Force
      } else {
        if(!($prefs.protocol_handler.excluded_schemes.alfaoffline.swe -match "false")){
          write-host "Alfaoffline swe not set to false"
          $prefs.protocol_handler.excluded_schemes.alfaoffline.swe = $prefs.protocol_handler.excluded_schemes.alfaoffline.swe + ":false"
        } else {
          write-host "alfaoffline already set to false, ignoring."
        }
      }
      $prefs | convertto-json -depth 100 | out-file $path -encoding utf8
    }
  }
}

我收到的错误:

PS C:\WINDOWS\system32> C:\Temp\Chrome_Alfa.ps1
Add-Member : Cannot bind argument to parameter 'InputObject' because it is null.
At C:\Temp\Chrome_Alfa.ps1:11 char:64
+ ... faoffline | add-member -name "swe" -value false -MemberType NotePrope ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-Member], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCommand

标签: jsonpowershell

解决方案


您双重输入 C:\Users 路径。还需要先创建父级 JSON 对象。这可以通过使用 PSCustomObject 作为值来完成。改成这个;

get-childitem -path "$env:systemdrive\Users" | foreach-object {

  $path = "$_\appdata\local\google\chrome\user data\default\preferences"

  if(test-path $path){
    $prefs = get-content $path | convertfrom-json
    if($prefs){

      if(!($prefs.protocol_handler.excluded_schemes.alfaoffline.swe)){
        $prefs.protocol_handler.excluded_schemes | add-member -membertype NoteProperty -name "alfaoffline" -value ([PSCustomObject]@{swe=$false})
      } else {
        if(!($prefs.protocol_handler.excluded_schemes.alfaoffline.swe -match "false")){
          write-host "Alfaoffline swe not set to false"
          $prefs.protocol_handler.excluded_schemes.alfaoffline.swe = $prefs.protocol_handler.excluded_schemes.alfaoffline.swe + ":false"
        } else {
          write-host "alfaoffline already set to false, ignoring."
        }
      }
      $prefs | convertto-json -depth 100 | out-file $path -encoding utf8
    }
  }
}

推荐阅读