Сохранение паролей для использования в скриптах Powershell

Иногда при запуске скриптов в Powershell бывает необходимо запускать какой-нибудь командлет под чужой учетной запиью, служебной например. Обычно в таких случаях создается специальный объект PSCredential при помощи несложной конструкции $user = Get-Credential, и пользоваться далее этим объектом в последующих командлетах. При нечастом запуске это может и не быть проблемой, но когда надо скрипт запускать несколько раз в день, то неэффективно вводить логин-пароль.

Лучшим способом было бы сохранить данные учетной записи в зашифрованном виде где-нибудь на диске рядом с файлом скрипта. Или, как вариант, в самом скрипте.

 

Возьмем такой объект PSCredential и посмотрим, что с ним можно сделать.

PS H:\> $user = Get-Credential

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
Credential
PS H:\>
PS H:\> $user

UserName                                                                   Password
--------                                                                          --------
domain\user1_test                                               System.Security.SecureString


PS H:\> $user.Password
System.Security.SecureString
PS H:\>
PS H:\> $user.Password | ConvertFrom-SecureString
01000000d08c9ddf0115d1118c7a00c04fc297eb01000000aadf8d427c78254197fb3ea6aa1ec70a0000000002000000000003660000c0000000100000001840e0a2490aa909d914ad971ac710ea0000000004800000a000000010000000d87265646824b997b424b94e3eb679ce18000000802545f1f25abb9be169d1c8a1c9d1ec37ca776adc56d086140000009f3bba93295d38e0f80813e364739f94deaacf26

Как видим, изначально переменная password имеет тип System.Security.SecureString.

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

 

Теперь надо получить из строки опять объект PSCredential.

PS H:\> $password = $user.Password | ConvertFrom-SecureString
PS H:\>
PS H:\> $password = $password | ConvertTo-SecureString
PS H:\> $credential = New-Object System.Management.Automation.PSCredential "alt\dadimov_test",$password
PS H:\> $credential

UserName                                                                        Password
--------                                                                              --------
alt\dadimov_test                                                      System.Security.SecureString

Как видно, мы конвертируем переменную $password в SecureString. Потом создаем объект System.Management.Automation.PSCredential, и скармиваем ему имя пользователя в открытом виде и зашифрованный пароль.

Теперь PSCredential можно использовать как обычно.

Метки: script, powershell (ru)

ПечатьE-mail

Добавить комментарий


Защитный код
Обновить