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

标签 powershell

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

$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   

最佳答案

您可以使用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”

关于powershell - 如何在创建 json 对象时转义 PowerShell 中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47725755/

相关文章:

azure - ForEach-Object - 尝试 for 循环变量中的每个地址

arrays - 从选择对象启动数组

具有单参数构造函数的 PowerShell 类不验证数据类型

PowerShell 的 Clear-History 不会清除历史记录

powershell - Powershell 查询的升序和降序

从 Powershell 运行 R 脚本

powershell - SSRS 和 PowerShell : Get report as Excel

powershell - 为什么 powershell -replace 运算符没有正确包含捕获组中捕获的所有字符?

PowerShell 获取视频持续时间并递归列出所有文件,导出为 csv

azure - 如何访问用 powershell 编写的 Azure 函数应用程序中的环境变量?