Сохранение защищенной строки в постоянной переменной среды

Поэтому я хочу сохранить безопасный тип строковой переменной для локального пользователя. Таким образом, я могу запустить convertfrom-securestring для выполнения вызовов rest api в файле .ps1 без доступа к паролю. Возможно ли то, что я пытаюсь сделать?

Код, который я использую, приведен ниже, но еще не работает:

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

Переменные среды сохраняются только в виде строк без поддержки других типов данных?


person shoppers1d3e    schedule 27.03.2018    source источник


Ответы (1)


Да, переменные среды всегда являются строками, и экземпляр [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)
person mklement0    schedule 27.03.2018