在持久环境变量中保存安全字符串

Saving secure string in persistent environment variable

所以我想为本地用户保存一个安全的字符串变量类型。这样我就可以 运行 一个 convertfrom-securestring 来在 .ps1 文件中进行其余 api 调用,而无需访问密码。我正在尝试的可能吗?

我正在使用的代码如下,但尚未运行:

$PlainPassword = "atestpassword"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force
[Environment]::SetEnvironmentVariable('JiraCreds', $SecurePassword, "User")

环境变量是否只保存为字符串,不支持其他数据类型?

是的,环境变量总是字符串[securestring]实例不能直接使用,因为它的字符串表示只是它的类型名称(System.Security.SecureString).

但是,您可以通过管道传输到 ConvertFrom-SecureString 以获得(仍然加密的)字符串表示形式:

$PlainPassword = "atestpassword" # Don't actually store this in your script.
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force | 
  ConvertFrom-SecureString
[Environment]::SetEnvironmentVariable('JiraCreds', $SecurePassword, "User")

稍后使用环境变量构造[pscredential]实例(以当前用户的用户名为例):

$cred = New-Object pscredential $env:USERNAME, (ConvertTo-SecureString $env:JiraCreds)