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

将由PowerShell导入的JSON中的掩码密码,json,powershell,Json,Powershell,我正在将值从JSON导入PowerShell,以将其用作SQL的连接字符串 以下是我当前使用的JSON文件: { "Databases": [{ "InstanceName": "test-01\\ins01", "DatabaseName": "test_logs", "User": "dba", "Password": "P@ssw0rd" }

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

以下是我当前使用的JSON文件:

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

因为其中一个值是密码。我想知道如何在能够在PowerShell中检索密码的同时屏蔽JSON文件中的密码?

如前所述,您必须使用ConvertFrom-SecureString&ConvertTo-SecureString PowerShell cmdlet

围绕这一点,有两种方法:

第一个想法是直接将安全密码存储到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

第二种方法是使用ConvertToSecureString并指定一个AES文件,这已经很好地解释过了

因此,基本上创建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

希望获得此帮助。

查看
获取有关SecureString的帮助-详细信息
。如果使用该方法,则需要先转换该值,然后再将其放入JSON。JSON从何而来?您是使用powershell创建的吗?我手动创建JSON并在其上分配这些值。它不是一个输出文件。我使用它作为PowerShell Variables软件的输入,将安全字符串的加密绑定到计算机并创建它们的帐户(这意味着它们不可移植)。他们的名字可能会让你相信,但他们并没有那么安全。通常,它应该足够安全,可以通过文件系统ACL限制对JSON文件的访问。您可以使用
ConvertTo SecureString
-Key
参数使其可移植。请看如何做到这一点。