首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Powershell中ConvertFrom-Json之后访问Json数据的问题

在Powershell中ConvertFrom-Json之后访问Json数据的问题
EN

Stack Overflow用户
提问于 2018-11-13 23:09:53
回答 1查看 166关注 0票数 0

我在一个配置文件中有以下数据结构:

代码语言:javascript
复制
{
"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"     
}, ...

我使用以下脚本来解析和使用此配置文件:

代码语言:javascript
复制
$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结构作为目标。下面是我得到的输出:

代码语言:javascript
复制
First we copy D:\VMs\WS2016\Virtual Hard Disks\WS2016.vhdx into @{ProjectName=CSF; Front=;Back=}.Front.VHDDesintationPath\CSF_Front.vhdx

您可以看到,与配置文件相比,源文件是正确的,但是第二个参数类似于对象结构,而不是目标属性的值。

如果我像这样重写脚本,它会工作:

代码语言:javascript
复制
$Source = $Specs.Front.VHDSourcePath
$Dest = $Specs.Front.VHDDesintationPath
Write-Verbose "First we copy $Source\$TemplateName.vhdx into $Dest\$NewVmName.vhdx" -Verbose

怎么会这样?我是否需要系统地捕获局部变量中的属性?为什么我不能直接使用这个结构?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-11-13 23:13:46

之所以会发生这种情况,是因为powershell解释器会读取您给它的内容。基本上,.不是powershell变量的一部分。它被认为是一个字符串字符。因此,它返回您的变量并将.Front.VHDDesintationPath添加到其中。试试这个:

代码语言:javascript
复制
Write-Verbose "First we copy $Source\$TemplateName.vhdx into $($Specs.Front.VHDDesintationPath)\$NewVmName.vhdx" -Verbose
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53283975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档