繁体   English   中英

在PowerShell 2.0中编辑JSON数据

[英]Edit JSON data in PowerShell 2.0

我有一个脚本,应该在json首选项数据内编写脚本,以更改来自不同扩展名的自动打开。

我从这里获得了第一部分,但是此脚本使用仅在Powershell> = 3.0中受支持的ConvertFrom-JsonConvertTo-Json

然后我在这里找到了一个模仿此Cmdlet的函数。 现在我的问题是它根本无法工作,我也不知道为什么,因为我没有收到任何错误或其他信息。

$neededFileExt = "2er"
$path = $env:LOCALAPPDATA + "\Google\Chrome\User Data\Default\Preferences"
$prefContent = Get-Content $path -Encoding utf8

我认为接下来的两个功能是无法正常运行的原因。

function ConvertTo-Json([object] $prefcontent) {
    add-type -assembly system.web.extensions
    $prefs = new-object system.web.script.serialization.javascriptSerializer
    return $prefs.Serialize($prefcontent)
}

function ConvertFrom-Json([object] $prefcontent) { 
    add-type -assembly system.web.extensions
    $prefs = new-object system.web.script.serialization.javascriptSerializer
    return , $prefs.DeserializeObject($prefcontent)
}

$prefs = ConvertFrom-Json $prefContent
if (($prefs | gm).name -contains "download") {
    if (($prefs.download | gm).name -contains "extensions_to_open") {
        if ($prefs.download.extensions_to_open) { #if it has value, grab the contents
            [string[]]$existingFileExt = 
            $prefs.download.extensions_to_open.tostring().split(":")
        }
        else {
            [string[]]$existingFileExt = $null
        }
    }
    else {
        #if extensions_to_open doesn't exist, create it
        $prefs.download | Add-Member -MemberType NoteProperty -Name extensions_to_open -Value ""
        [string[]]$existingFileExt = $null
    }
    foreach ($ext in $neededFileExt) {
        if ($existingFileExt -notcontains $ext) { #only add the necessary extension if it isn't already there
            [string[]]$existingFileExt += $ext
        }
    }
    $prefs.download.extensions_to_open = $existingFileExt -join ":" 
    ConvertTo-Json $prefs -Compress -depth 100 | Out-File $path -Encoding utf8 
}

将不胜感激任何建议或帮助。

  • 我的问题不是这篇文章的重复,因为我使用了这篇文章中的函数,但是我的代码不相关

PowerShell版本2不允许像您一样直接从对象列表扩展属性:

($prefs | gm).name -contains "download"

对于PowerShell版本2,应该使用Select-Object -ExpandProperty cmdlet / parameter:

($prefs | gm | Select -ExpandProperty Name) -contains "download"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM