首页 > 解决方案 > 仅在脚本第一次运行时发生异常

问题描述

我正在为 powershell 版本 2 开发以实现向后兼容性。所以我已经开始我的外壳了powershell -version 2。我的目标是将字符串格式的 JSON 转换为我可以使用的某个对象。在这里,我找到了 ConvertTo-JsonConvertFrom-Jsoncmdlet 的实现。

我有这个简单的代码:

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
    return ,$ps_js.DeserializeObject($item)
}

$jsonString = '{"key1":true, "key2": ["val21", "val22"]}'
$jsonObj = ConvertFrom-Json20 $jsonString
Write-Host $jsonObj.key1
Write-Host $jsonObj.key2

但是当我运行包含此代码的脚本时,我第一次得到异常,第二次它正在工作:

PS C:\Users\wakatana\Desktop> .\script.ps1
DeserializeObject : Exception calling "DeserializeObject" with "1" argument(s): "Configuration system failed to initialize"
At C:\Users\wakatana\Desktop\script.ps1:10 char:37
+     return ,$ps_js.DeserializeObject <<<< ($item)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException



PS C:\Users\wakatana\Desktop> .\script.ps1
True
val21 val22

另外我在官方文档下也没有发现这个异常。我做错了什么?

标签: powershell

解决方案


这是有效的:在脚本之上采用 add-type 。

add-type -assembly system.web.extensions

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

function ConvertFrom-Json20([object] $item){ 
    $ps_js=new-object system.web.script.serialization.javascriptSerializer
    return ,$ps_js.DeserializeObject($item)
}

$jsonString = '{"key1":true, "key2": ["val21", "val22"]}'
$jsonObj = ConvertFrom-Json20 $jsonString
Write-Host $jsonObj.key1
Write-Host $jsonObj.key2

推荐阅读