Нотатки про програмування, музику, подорожі та плівку
Про мене  •  Список нотаток  •  Плівка

PowerShell: создание Credentials.

Для того чтобы работать с авторизацией пользователя в powershell существую следующие понятия:
String — простая строка, в ней можно сохранять пароль, но не желательно, так как она хранится в памяти в открытом виде.
System.Security.SecureString — выглядит как обычная строка, но она зашифрована. Она использует «обратимое» шифрование, так что мы в любой момент можем декодировать пароль.
System.Management.Automation.PSCredential — класс, который содержит в себе логин и зашифрованный пароль. Данный тип есть почти у каждой команды, которая поддерживает авторизацию.

Создание SecureString

# Чтение из консоли
$SecurePassword = Read-Host -Prompt "Enter password" -AsSecureString

# Чтение из переменной
$PlainPassword = "P@ssw0rd"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force

Создание PSCredentials

$UserName = "Domain\User"
$Credentials = New-Object System.Management.Automation.PSCredential `
     -ArgumentList $UserName, $SecurePassword

Получение пароля из PSCredentials

$PlainPassword = $Credentials.GetNetworkCredential().Password

Получение пароля из SecureString

Можно создать PSCredentials и получить из них пароль, но есть и другой способ:

$BSTR = `
    [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
$PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Лучшие подходы

  • Старайтесь не спрашивать у пользователя пароль, а по максимуму используйте Windows authentication.
  • Никогда не держите пароли в чистом виде, только в SecureString или PSCredentials
  • Если вам нужно запросить учетные данные у пользователя, используйте командлет Get-Credential. Он использует стандартную функцию Windows для последовательного и безопасного получения пароля без сохранения его в памяти в виде открытого текста.
Надіслати
Поділитись