由PowerShell导入的JSON中的掩码密码

时间:2019-01-02 10:19:24

标签: json powershell

我正在将JSON中的值导入PowerShell,以将其用作SQL的连接字符串。

这是我当前使用的JSON文件:

{
    "Databases": [{
            "InstanceName": "test-01\\ins01",
            "DatabaseName": "test_logs",
            "User": "dba",
                        "Password": "P@ssw0rd"
        }   
    ]
}

因为这些值之一是密码。我想知道如何屏蔽JSON文件中的密码,同时又能够在PowerShell中对其进行检索?

1 个答案:

答案 0 :(得分:0)

如前所述,您将必须使用ConvertFrom-SecureString和ConvertTo-SecureString powershell cmdlet。

大约有2种方法:

第一个想法as explained on this blog是将受保护的密码直接存储到您的Json文件中,如下所示:

$secure = ConvertTo-SecureString -String 'P@$$w0rd' -AsPlainText -Force
$cred = New-Object -typename PSCredential -ArgumentList @('company\admin',$secure)
$cred | Select Username,@{Name="Password";Expression = { $_.password | ConvertFrom-SecureString }} |  Convertto-Json

然后从您的JSON文件转换回安全密码:

$file = Get-Content -Path c:\temp\admin.json | ConvertFrom-Json
$secure = ConvertTo-SecureString $file.Password -ErrorAction Stop

但是您将只能在同一台计算机上解密SecureString。

第二种方法是使用ConvertTo-SecureString并指定一个AES文件,如on this other blog所解释的那样。

因此,基本上,您创建了AES文件:

$KeyFile = "C:\AES.key"
$Key = New-Object Byte[] 16   # You can use 16, 24, or 32 for AES
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)
$Key | out-file $KeyFile

然后将安全密码存储在json中,如上,但带有-Key选项:

$cred | Select Username,@{Name="Password";Expression = { $_.password | ConvertFrom-SecureString }} -key $Key | Convertto-Json

和恢复安全密码的相同方法:

$secure = ConvertTo-SecureString $file.Password -Key $key -ErrorAction Stop

希望获得帮助。