2015-01-21 21 views
13

Mi piacerebbe ricoprire un ambiente PowerShell 2.0 in cui l'aggiornamento a 3.0 non è possibile al momento.Implementazione di PowerShell 2.0 ConvertFrom-Json e ConvertTo-Json

Sto cercando un'implementazione di script PowerShell 2.0 del cmdlet ConvertFrom-Json e del cmdlet ConvertTo-Json presenti in PowerShell 3.0.

Sono più interessato allo ConvertFrom-Json, ma anche ConvertTo-Json sarebbe bello.

+2

a chi ha votato per chiudere per essere fuori tema, non ho capito. – x0n

+2

Lui/Lei probabilmente lo legge come un "ordine di script", che in parte sono d'accordo. Per usare la terminologia ITIL: questa è una richiesta di servizio (vuole uno script), non un incidente (esempio di script con errori). :) –

+1

@FrodeF., Per aggiungere alcune informazioni sulla mia richiesta, questo è sicuramente un 'ordine di script' poiché non voglio scrivere una versione che sia compatibile con JSON. Speravo che ci fosse un assemblaggio che potesse essere importato e sfruttato. Speravo che esistesse una soluzione nota al problema della monkeypatching, piuttosto che scrivere e mettere a punto il mio script nuovo di zecca. Se questo è ancora fuori tema, posso spostarlo da qualche altra parte ... –

risposta

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

Ecco una funzione ConvertFrom, basata su quanto sopra 'function ConvertFrom-Json20 ([oggetto] $ item) { add-type -assembly system.web.extensions $ ps_js = new-object system.web.script.serialization.javascriptSerializer return $ ps_js.DeserializeObject ($ item) } '. Formattato male, spiacente – Geoff

+1

Grazie Geoff! Ho aggiunto alla risposta –

+1

Se non hai installato .NET 3.5, riceverai un errore:" Aggiungi tipo: Impossibile caricare file o assembly "Sistema .Web.Extensions, versione = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 o una delle sue dipendenze S. Il sistema non trova il file specificato. "... –

2

Si potrebbe dare un'occhiata a powershelljson.codeplex.com Non provato mai.

Se questo non funziona, probabilmente dovresti scriverne uno tu stesso. Potresti scrivere un wrapper che usa Json.Net o Web.Extensions (sample) per fare un po 'del lavoro.

+0

Il collegamento codeplex sembra proprio quello di cui ho bisogno, grazie! A proposito, ho passato ore con google cercando di trovare qualcosa di simile, ma volevo solo parlare di powershell v3 :-( –

+0

BTW, proverò questi domani e accetto se funziona –

1

Sono in grado di commentare la currently top rated post above, tuttavia è possibile eseguire questi comandi di registro (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 

per consentire le suddette ConvertTo-Json20 e ConvertTo-Json20 funzioni di lavorare se stai ricevendo l'errore:

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. "