json - 用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
解决方案
您双重输入 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
}
}
}
推荐阅读
- swift - 呈现另一个视图控制器
- node.js - .wait() nightmare 和 Puppeteer evaluate 都找不到 ID
- android - 如何使用文件路径android获取排序数组?
- python - 如何在长列表中保持一致的宽度?
- r - R sqldf 无法识别使用“write_csv”制作的源 csv 文件
- node.js - 从公共网络访问在 AWS-EC2 上运行的 NodeJs 应用程序
- sql - 在单个更新语句中更新多个表 - Exasol
- python - 数据流管道卡在从 Pub/Sub 读取
- python - 在列表列表中搜索值然后附加到空列表
- python - discord.py - 我应该如何使用 on_reaction_add?