Иногда вам приходится запускать сеанс не в качестве администратора домена. Для таких случаев все команды PowerShell для Active Directory (AD) поддерживают параметр -credential. Например, при работе с учетной записью, не обладающей полномочиями администратора, команда
set-aduser Tjefferson -title «Prez»
завершится ошибкой. Предположим, однако, что существует учетная запись пользователя домена по имени bigfirmKathleen, при работе с которой требуется выполнить данную команду. Для этого можно построить запрос
set-aduser Tjefferson -title «Prez» -credential bigfirmKathleen,
предписывающий PowerShell выдать диалоговое окно регистрации с текстовым полем для ввода имени пользователя (где уже содержится запись bigfirmKathleen) и пароля. Вводим пароль, нажимаем OK, и команда успешно выполняется. Этот запрос можно построить без указания конкретного имени пользователя:
set-aduser Tjefferson -title «Prez» -credential (get-credential)
В этом случае также появится диалоговое окно регистрации, но с пустым полем ввода имени пользователя. Возникает вопрос: нельзя ли, помимо имени пользователя, ввести в строку команды также и пароль?
set-aduser Tjefferson -title «Prez» -credential bigfirmKathleen -password domaincrusher
К сожалению, это невозможно. Можно, однако, сэкономить несколько нажатий на клавиши, если сохранить однажды полученные учетные данные и затем использовать их повторно. Для этого придется задействовать get-credential несколько иначе.
Запустим get-credential, но на этот раз сохраним результат в переменной PowerShell. Переменная – это область памяти, которую можно использовать для хранения данных. PowerShell идентифицирует переменные по первому символу, каковым является знак доллара — $. В переменной можно хранить практически любые данные. Например, если ввести переменные
$firstnum = 3 $secondnum=10 $myresult= $firstnum + $secondnum
и нажать Enter, то PowerShell выдаст результат 13. Переменной можно дать любое имя, начинающееся с $. Переменные начинают работать сразу после их создания, а после выхода из среды PowerShell все созданные во время сеанса переменные исчезают. Чтобы не набирать лишний раз буквы, запустим сеанс от имени bigfirmmark и сохраним учетные данные в переменную по имени $c:
$c = get-credential bigfirmmark
После этого сохраненные учетные данные можно использовать в других командах, например:
set-aduser Tjefferson -title «Prez» -credential $c
Теперь в оставшуюся часть рабочего дня всякий раз, когда мне потребуется запустить некую команду AD, можно будет просто добавить add-credential $c вместо повторного ввода своего пароля. Это уже хорошо, но еще лучше, если на протяжении рабочего дня приходится запускать команды под разными учетными записями – например, одни задачи выполнять под локальной учетной записью, а другие – под административными учетными записями из других доменов. Например, предположим, что на локальном компьютере требуются данные учетной записи me на компьютере PC429; учетные данные доменной учетной записи bigfirmalex из одного леса, а также учетные данные outsiderswally из другого леса. Помещаем в свой профиль PowerShell следующие три команды:
$c1 = get-credential PC429me $c2 = get-credential bigfirmalex $c3 = get-credential outsiderswally
После ввода команд PowerShell затребует каждый из трех паролей, после чего можно будет избежать последующего их ввода на протяжении оставшегося времени в течение дня.
Вас интересует содержимое сохраняемых учетных данных? По сути, это имя учетной записи, к которой относятся учетные данные, в сопровождении двоичных данных определенного типа. Вывести содержимое $c можно с помощью простого запроса
$c
В ответ PowerShell выдаст имя пользователя и проинформирует вас, что содержимое включает пароль, но это защищенная строка System.Security.SecureString. Впрочем, в PowerShell есть команда convertfrom-securestring, которая в ответ на запрос
$c.password | convertfrom-securestring
позволяет получить длинную строку шестнадцатеричных символов, в которой нельзя узнать указанный пароль, тогда как запрос
$c.getnetworkcredential().password,
позволяет вывести его на экран в том виде, в котором он был введен.
Таким образом, с помощью get-credential можно создавать переменные для хранения паролей, что позволит сэкономить время, затрачиваемое на их повторный ввод всякий раз, когда приходится выполнять задачи под разными учеными записями. Однако при этом необходимо обеспечить блокировку рабочей станции на время своего отсутствия, иначе простой запрос позволит раскрыть все ваши пароли.