powershell - 仅当脚本首次运行时才会发生异常

标签 powershell

我正在开发Powershell版本2,以实现向后兼容性。因此,我已将 shell 程序启动为powershell -version 2。我的目标是将字符串格式的JSON转换为可以使用的某些对象。 Here我已经找到了ConvertTo-JsonConvertFrom-Json cmdlet。

我有这个简单的代码:

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

我也没有在official documentation下找到此异常。我做错了什么?

最佳答案

这是可行的:将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

关于powershell - 仅当脚本首次运行时才会发生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59897367/

相关文章:

powershell - 创建 PowerShell 连接字符串

powershell - 在 PowerShell 中执行 Get 命令时有没有办法放置计数器列?

regex - Powershell - notMatch

xml - 在Powershell中解析XML

azure - 是否可以使用 Powershell 更新 Azure AD 中现有用户的 SignInNames

powershell - 如何格式化 1-liner 以打印对象属性

powershell - 使用 Azure PowerShell 添加或更新(设置)终结点

powershell - 删除继承后,使用 powershell 从 NTFS 文件夹中删除组失败并显示 SeSecurityPrivilege

azure - 如何在 PowerShell 中导出新的单独 csv

function - Powershell用查找变量替换