2015-01-21 2 views
13

Я бы хотел, чтобы monkeypatch среда PowerShell 2.0, где обновление до 3.0 в настоящее время невозможно.PowerShell 2.0 ConvertFrom-Json и ConvertTo-Json реализация

Я ищу реализацию сценария PowerShell 2.0 командлета ConvertFrom-Json и командлета ConvertTo-Json, которые находятся в PowerShell 3.0.

Меня больше всего интересует ConvertFrom-Json, но ConvertTo-Json также будет приятным.

+2

Кому бы вы ни проголосовали за то, что вы не по теме, я вас не понимаю. – x0n

+2

Он/она, вероятно, читал это как «заказ сценария», от которого я частично согласен. Использовать терминологию ITIL: это запрос на обслуживание (требуется скрипт), а не инцидент (образец сценария с ошибками). :) –

+1

@FrodeF., Чтобы добавить некоторую информацию о моем запросе, это определенно «порядок скриптов», так как я не хочу писать версию, совместимую с JSON. Я надеялся, что будет сборка, которую можно было бы импортировать и использовать. Я надеялся, что есть известное решение проблемы monkeypatching, вместо того, чтобы писать и отлаживать собственный собственный новый скрипт. Если это по-прежнему не по теме, я могу переместить его где-то еще ... –

ответ

30
function ConvertTo-Json20([object] $item){ 
    add-type -assembly system.web.extensions 
    $ps_js=new-object system.web.script.serialization.javascriptSerializer 
    return $ps_js.Serialize($item) 
} 

function ConvertFrom-Json20([object] $item){ 
    add-type -assembly system.web.extensions 
    $ps_js=new-object system.web.script.serialization.javascriptSerializer 

    #The comma operator is the array construction operator in PowerShell 
    return ,$ps_js.DeserializeObject($item) 
} 
+4

Вот функция ConvertFrom, основанная на приведенном выше . 'функция ConvertFrom-Json20 ([объект] $ элемент) { добавить тип -assembly System.Web.Extensions $ ps_js = новый объект system.web.script.serialization.javascriptSerializer возврата $ ps_js.DeserializeObject ($ item) } '. Плохо отформатировано, извините. – Geoff

+1

Спасибо Джефф! Я добавил к ответу –

+1

Если у вас нет установленного .NET 3.5, вы получите сообщение об ошибке:« Add-Type: Не удалось загрузить файл или сборку »System .Web.Extensions, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 или одно из его зависимостей s. Система не может найти указанный файл. "... –

2

Вы можете взглянуть на powershelljson.codeplex.com Никогда не пробовал.

Если это не сработает, вам, вероятно, потребуется написать его самостоятельно. Вы можете написать оболочку, которая использует Json.Net или Web.Extensions (sample), чтобы выполнить часть работы.

+0

Ссылка codeplex выглядит как раз то, что мне нужно, спасибо! Кстати, я потратил несколько часов с поиском Google, пытаясь найти что-то подобное, но он просто хотел поговорить о powershell v3 :-( –

+0

BTW, я попробую это завтра и соглашусь, если он работает –

1

Я не могу прокомментировать currently top rated post above, однако вы можете запустить эти команды реестра (more details):

reg add hklm\software\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1 /f 
    reg add hklm\software\wow6432node\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1 /f 

разрешить вышеуказанные ConvertTo-Json20 и ConvertTo-Json20 функции, чтобы работать, если вы получаете ошибка:

Add-Type : Could not load file or assembly 'System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 or one of its dependencies. The system cannot find the file specified. " 
Смежные вопросы