Для хранения и извлечения зашифрованных учетных данных легко использовать PowerShell встроенный в XML-сериализации (Clixml):
$credential = Get-Credential
$credential | Export-CliXml -Path 'C:\My\Path\cred.xml'
реимпортировать:
$credential = Import-CliXml -Path 'C:\My\Path\cred.xml'
Важно помнить о том, что по умолчанию используется API защиты данных Windows, а ключ, используемый для шифрования пароля, специфичен как для пользователя , так и для устройства, в котором работает код.
В результате зашифрованные учетные данные не могут быть импортированы другим пользователем или одним и тем же пользователем на другом компьютере.
Зашифровав несколько версий одинаковых учетных данных с разными пользователями и на разных компьютерах, вы можете иметь один и тот же секрет для нескольких пользователей.
Поставив имя пользователя и компьютера в имени файла, вы можете хранить все зашифрованные секреты таким образом, что позволяет и тот же код, чтобы использовать их без жесткого либо кодирования:
Encrypter
# run as each user, and on each computer
$credential = Get-Credential
$credential | Export-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
код, который использует сохраненные учетные данные:
$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
правильная версия файла для работающего пользователя будет загружен автоматически (или она не будет выполнена потому что файл не существует).
У меня возникла идея сохранить учетные данные на моем ноутбуке, а затем использовать их на сервере, а не жестко кодировать их в скрипте. Похоже, это невозможно. Но могу ли я использовать сохраненный зашифрованный пароль на другом компьютере? – Alexan
@Alex, если вы сохраняете их на одном компьютере, вы не можете загружать их на другой, если вы не используете свой собственный ключ шифрования; но если вы это сделаете, у вас возникнет проблема получения/транспортировки/использования ключа при расшифровке и сохранении его в секрете. Вы можете перезагрузить их на своем компьютере, а затем (возможно) передать их на другой компьютер во время выполнения, например, через некоторый зашифрованный транспорт (например, через удаленный PowerShell)? Это зависит от того, что вы пытаетесь сделать. – briantist
Что делать, если есть несколько пользователей? Можем ли мы хранить учетные данные более чем у одного пользователя? Если да, то как получить учетные данные конкретного пользователя? –