我正在将JSON中的值导入PowerShell,以将其用作SQL的连接字符串。
这是我当前使用的JSON文件:
{
"Databases": [{
"InstanceName": "test-01\\ins01",
"DatabaseName": "test_logs",
"User": "dba",
"Password": "P@ssw0rd"
}
]
}
因为这些值之一是密码。我想知道如何屏蔽JSON文件中的密码,同时又能够在PowerShell中对其进行检索?
答案 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
希望获得帮助。