【发布时间】:2015-10-01 12:26:40
【问题描述】:
首先,我必须使用 PowerShell v2,因为这是默认安装在 Windows 7 上的。我想做的事情是使用 PowerShell v4 以及可能的 PowerShell v3 开箱即用。
我想从文件中读取一个 JSON 对象并将其用作我的脚本中的对象。 PowerShell v2 没有 ConvertFrom-Json 方法,所以我编写了自己的实现,我希望拥有相同的功能:
function ConvertFrom-Json
{
param(
[Parameter(ValueFromPipeline=$true)]
[string]$json
)
[System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$ser = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$obj = $ser.DeserializeObject($json)
Write-Host $obj.GetType()
return $obj
}
我这样称呼这个函数:
$configObj = (Get-Content $configFile) -join "`n" | ConvertFrom-Json
Write-Host $configObj.GetType()
这个的输出:
System.Collections.Generic.Dictionary`2[System.String,System.Object]
System.Object[]
而且我无法像对象一样与 $configObj 交互并获取它的属性。事实上,我不知道如何从中获取任何信息。当我打印对象时,输出如下所示:
AC Version Location
--- ------- --------
True v2.0.50727 C:\Windows\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0__31bf3856ad364e35\System.Web.Extensions.dll
Key : DownloadURL
Value : https://example.com
Key : dir
Value :
当我期望它看起来像:
Key Value
--- -----
DownloadURL https://example.com
dir
有没有办法解决这个问题并从我的 ConvertFrom-Json 方法中获取与我的方法中存在的相同的对象?
提前致谢,
安迪
【问题讨论】:
-
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")或Add-Type -AssemblyName System.Web.Extensions -
哇,太棒了。那解决了它!我什至没有想到 LoadWithPartialName 正在返回一个被 PowerShell 拾取的值。你是救生员!也很快!
-
@PetSerAl 出于好奇,你为什么用评论回答这个问题?
标签: json function powershell powershell-2.0