我正在尝试从具有以下内容的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文件]
请分享
您可以遍历对象属性并像这样更改路径分隔符:
$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": ""
}