Powershell: ConvertFrom- Json не получает назначенную переменную из-за прямой и обратной совместимости - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь загрузить переменные в powershell из переменных. json, имеющий следующее

{
    "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

Эти форварды sla sh не несовместимы на powershell для windows пути! ConvertFrom- Json не принимает backsla sh для переменных, которые также пытались использовать с ''

Следовательно, не удалось загрузить мои модули по этому пути

любым другим способом для достижения вышеуказанного дело? Хотите использовать json, так как конечный пользователь может легко обновлять текстовые файлы

Пожалуйста, поделитесь

1 Ответ

2 голосов
/ 20 февраля 2020

вы можете l oop через свойства объекта и изменить разделитель пути следующим образом:

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

, или более простой подход - экранирование backsla sh в файле конфигурации, например так:

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

} 
...