Powershell:由于向前和向后的兼容性,ConvertFrom-Json没有获得分配的变量

问题描述 投票:0回答:1

我正在尝试从具有以下内容的variables.json将变量加载到powershell中

{
    "psfp":  "C:/San\/SV65\/ps",
    "vmfp": "'C:/San\/SV65\/hyper-packer\/hyper-packer\/output-centos8-9\/Virtual Machines'",
    "psmp": "C:/San\/SV65\/ps",
    "vmname": ""
} 

尝试与之导入

$jvariables=Get-Content -Raw -Path '.\variables-ps.json' | ConvertFrom-Json

Powershell上的输出

PS C:\San\SV65\ps> Write-host $jvariables.psfp
C:/San/SV65/ps

PS C:\San\SV65\ps> Write-host $jvariables.vmfp
'C:/San/SV65/hyper-packer/hyper-packer/output-centos8-9/Virtual Machines'

PS C:\San\SV65\ps> Write-host $jvariables.psmp
C:/San/SV65/ps

这些正斜线在Windows路径的Powershell上不兼容! ConvertFrom-Json也不接受对用''尝试过的变量的反斜杠]

因此无法在这些路径上加载我的模块

实现上述情况的其他方法?想要使用JSON,因为最终用户可以轻松地更新它而不是txt文件]

请分享

powershell hyper-v slash
1个回答
0
投票

您可以遍历对象属性并像这样更改路径分隔符:

$jvariables.psobject.properties | where {$_.membertype -eq "NoteProperty"} | 
foreach {$data.($_.name) = $_.value.replace("/","\")}

或更简单的方法是在配置文件中转义反斜杠,如下所示:

{
"psfp":  "C:\\San\\SV65\\ps",
"vmfp": "'C:\\San\\SV65\\hyper-packer\\hyper-packer\\output-centos8-9\\Virtual Machines'",
"psmp": "C:\\San\\SV65\\ps",
"vmname": ""

} 
© www.soinside.com 2019 - 2024. All rights reserved.