无法直接在Powershell 2.0中获取对象属性值

问题描述

我尝试了基于Powershell 3和更高版本构建的脚本。在Powershell 2.0中存在兼容性问题

$JsonConfig = Get-Content -Path $PSScriptRoot\Utilities\conf\cmsAgent.conf
$ErrorActionPreference = "Stop"

[System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") | out-null
$javaSerializer = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$deserialziedJson = New-Object -type PSObject -Property $javaSerializer.DeserializeObject($JsonConfig)


$API = $deserialziedJson.API
$APIURL = "https://$($API.Server)/$($API.EndPoint)"

$Message = $null
Write-host "test"
Write-host $($API)
Write-host $API.Server
Write-host $API.Port

我得到以下输出

test
[Server,ghtk.net.com] [Port,443] [EndPoint,xyzhtc]
    
0

因此,$ API.Port和$ API.Server似乎返回空值。我相信这是因为在PS版本2中没有引入直接引用PSObject的问题。

请提供一种解决方法,也可以与更高版本兼容。

解决方法

目前我无法在v2上对其进行测试,但是绝对始终可以正常工作的是直接使用键进行索引。 (注意:区分大小写!)

$deserializedJson = $javaSerializer.DeserializeObject($JsonConfig)
$api = $deserializedJson["API"]
$server = $api["Server"]
$port = $api["Port"]
$APIURL = "https://${server}:$port/$($API["EndPoint"])"