При использовании PowerShell для автоматизации процессов очень удобным инструментом является снипет подобного вида:
Я не первый, кто задумался о необходимости подобного функционала, поэтому воспользуемся результатами чужого труда для достижения необходимых результатов.
Для создания файла с паролями нужно выполнить вот такой скрипт:
Для импорта сохранённых подобным образом данных в основном скрипте используется следующий код:
$credentials = @{
production = Get-Credential -Message 'Please enter production server credentials'
testing = Get-Credential -Message 'Please enter testing server credentials'
development = Get-Credential -Message 'Please enter development server credentials'
}
$credentials | Export-Clixml -Path "${env:\userprofile}\passwd.xml"
Он позволяет хранить учётные данные за пределами основного скрипта в зашифрованном виде. Для получения данных сохранённых в файле passwd.xml можно в основном скрипте использовать подобную конструкцию:
$credentials = Import-Clixml -Path "${env:\userprofile}\passwd.xml"
$devUserName = $credentials."development".UserName
$devPassword = $credentials."development".Password
У такого подхода есть только один недостаток, для шифрования паролей используются идентификаторы текущего компьютера и пользователя, что делает невозможным перенос файла с паролями на другой компьютер или передачу его другому пользователю.
Я не первый, кто задумался о необходимости подобного функционала, поэтому воспользуемся результатами чужого труда для достижения необходимых результатов.
Для создания файла с паролями нужно выполнить вот такой скрипт:
$passwdFile = "${env:\userprofile}\passwd.xml"
Function Export-Credential {
Param ([PSCredential] $Credential)
$Key = New-Object Byte[](32)
$Rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::Create()
$Rng.GetBytes($Key)
return New-Object PSObject -Property @{
Username = $Credential.UserName
Password = ConvertFrom-SecureString -SecureString $Credential.Password -Key $Key
Key = $Key
}
}
$credentials = @{
production = Export-Credential (Get-Credential -Message 'Please enter production server credentials')
testing = Export-Credential (Get-Credential -Message 'Please enter testing server credentials')
development = Export-Credential (Get-Credential -Message 'Please enter development server credentials')
}
$credentials | Export-Clixml $passwdFile
Он запросит учётные данные у пользователя, зашифрует их и сохранит в файл passwd.xml
Для импорта сохранённых подобным образом данных в основном скрипте используется следующий код:
$passwdFile = "$PSScriptRoot\passwd.xml"
$rawCredentials = Import-Clixml $passwdFile
$devCredentials = New-Object System.Management.Automation.PSCredential($rawCredentials.'development'.Username, (ConvertTo-SecureString -String $rawCredentials.'development'.Password -Key $rawCredentials.'development'.Key))
Не стоит быть уверенным, что пароли сохранённые подобным образом, будь они зашифрованы с использованием идентификатора пользователя или же собственным ключом, абсолютно безопасно использовать где угодно.
В обоих случаях можно получить пароль в открытом виде, выполнив команду
$devCredentials.GetNetworkCredential().password
Так что нужно очень аккуратно подходить к тому, где хранится файл с сохранёнными паролями и насколько хороший пароль от вашей учётной записи и записи Администратора домена (компьютера).
Комментариев нет:
Отправить комментарий