Как безопасно обрабатывать пароли в специально написанном командлете PowerShell?
================================================================================

Предположим, у меня есть собственный командлет PowerShell, который экспортирует данные и шифрует их с помощью пароля.

Как правильно обращаться с паролями безопасно? Например, я бы хотел, чтобы значение не отображалось, когда администратор вводит его в консоль. Другие варианты включают чтение файла, который содержит зашифрованный пароль.

Мне известно о PSCredential, но для этого требуется имя пользователя, которое не имеет смысла в этом сценарии.

Если вы хотите получить только пароль, вы можете использовать

`Read-Host` командлет с`–asSecureString` параметр.

Этот параметр маскирует ввод.



Если вы пишете командлет C # PowerShell и один из параметров требует от пользователя ввода пароля, его следует запутать.

Для этого нужно быть`using System.Security;`

И тогда ваш тип параметра должен быть`SecureString`.

Итак, используя ваш пример:



Измените тип параметра Password на SecureString; если администратор пропускает параметр -Password, PowerShell поступит правильно, предложив администратору ввести обязательный параметр и отобразив при этом звездочку.

В идеале реализация вашего командлета передаст SecureString некоторому API, который изначально поддерживает SecureString (наиболее безопасный); если нет, вам придется извлечь пароль из SecureString. Вот хорошая статья о том, как это сделать:[Как правильно конвертировать SecureString в String](https://blogs.msdn.com/b/fpintos/archive/2009/06/12/how-to-properly-convert-securestring-to-string.aspx)



Вы можете найти в[этот ответ](https://stackoverflow.com/a/10173670/608772) способ шифрования с паролем компьютера (работает на безопасных машинах).

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

И получить это с: