Редактировать данные JSON в PowerShell 2.0 - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть скрипт, который должен записывать данные предпочтений json для изменения автоматического открытия из разных расширений.

Первая часть, которую я получил от здесь , но этот скрипт использует ConvertFrom-Json и ConvertTo-Json, которые поддерживаются только в Powershell> = 3.0.

Затем я нашел функцию, которая имитирует этот командлет здесь . Теперь моя проблема в том, что он вообще не работает, и я не знаю почему, потому что я не получаю никаких ошибок или чего-то подобного.

$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 
}

Буду признателен за любые предложения или помощь.

  • мой вопрос не является дубликатом этого поста , потому что я использовал функцию из этого поста, но мой код не соответствует

1 Ответ

0 голосов
/ 06 сентября 2018

PowerShell версии 2 не позволяет расширять свойства непосредственно из списка объектов, как вы:

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

Для PowerShell версии 2 следует использовать Select-Object -ExpandProperty командлет / параметр:

($prefs | gm | Select -ExpandProperty Name) -contains "download"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...