如何在创建json对象时在PowerShell中转义特殊字符

时间:2017-12-09 05:50:58

标签: powershell

我有PowerShell脚本,我在安装时在安装程序中运行。我尝试了很多例子来逃避特殊字符,这意味着如果用户选择用户名或密码并且包含斜杠或逗号等字符,则powershell无法创建json对象。有时,如果用户输入逗号,而不是将其作为字符串,它会分成json数组。以下是我的示例,varibles的值来自安装程序,它们是有效的字符串。感谢您的见解。

$pathToJson = $InstalledPath+"appsettings.json"
$a = Get-Content $pathToJson | ConvertFrom-Json
$a.SQLConnectionSettings.SqlServerIp=$GkDbIP
$a.SQLConnectionSettings.SqlInitialCatalog=$GkDbName
$a.SQLConnectionSettings.SqlIntegratedSecurity=$SqlAuthType
$a.SQLConnectionSettings.SqlUserId=$GkDbUsername
$a.SQLConnectionSettings.SqlPassword=$SQLPassword
$a | ConvertTo-Json | set-content $pathToJson   

1 个答案:

答案 0 :(得分:2)

您可以使用Regex.Unescape来取消json内容。例如:

$OBJECT = @{username="someone"; password="someone's \password"}
$OBJECT | ConvertTo-Json -depth 100 |
     % { [System.Text.RegularExpressions.Regex]::Unescape($_) } |
         Out-File "D:\somefile.json" -Encoding utf8

结果如下:

{
    "password":  "someone's \password",
    "username":  "someone"
}

如果您不使用unescape,密码将保存为"someone\u0027s \\password"