问题描述
我尝试了基于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"])"