【发布时间】:2019-04-16 11:04:40
【问题描述】:
我在配置文件中有以下数据结构:
{
"ProjectName" : "Test",
"Front" : {
"Credentials" : {
"Login" : "Administrator",
"Password" : "1234"
},
"RoleName" : "WebServer",
"TemplateName" : "WS2016",
"VHDSourcePath" : "D:\\VMs\\WS2016\\Virtual Hard Disks",
"VHDDesintationPath" : "D:\\VMs\\new",
"SwitchName" : "JoelSwitch"
}, ...
我使用下面的脚本来解析和使用这个配置文件:
$Specs = Get-Content -Raw -Path .\Specs.json | ConvertFrom-Json
$NewVmName = $Specs.ProjectName + "_" + "Front"
$TemplateName = $Specs.Front.TemplateName
$Source = $Specs.Front.VHDSourcePath
Write-Verbose "First we copy $Source\$TemplateName.vhdx into
$Specs.Front.VHDDesintationPath\$NewVmName.vhdx" -Verbose
当我访问 json 结构时,它有一个奇怪的行为:在最后一个命令中,我使用局部变量来捕获 Source,而我直接使用 json 结构作为目标。 这是我得到的输出:
First we copy D:\VMs\WS2016\Virtual Hard Disks\WS2016.vhdx into @{ProjectName=CSF; Front=;Back=}.Front.VHDDesintationPath\CSF_Front.vhdx
您看到源与配置文件相比是正确的,但第二个参数就像一个对象结构,而不是目标属性的值。
如果我这样重写脚本,它可以工作:
$Source = $Specs.Front.VHDSourcePath
$Dest = $Specs.Front.VHDDesintationPath
Write-Verbose "First we copy $Source\$TemplateName.vhdx into $Dest\$NewVmName.vhdx" -Verbose
怎么会?我需要系统地捕获局部变量中的属性吗?为什么我不能直接使用结构?
谢谢!
【问题讨论】:
标签: json powershell