Разное

Powershell создание пользователя ad: Как перестать быть демиургом и поручить создание сущностей PowerShell / Хабр

18.02.1984

Содержание

Создание Microsoft 365 учетных записей пользователей с помощью PowerShell — Microsoft 365 Enterprise

  • Чтение занимает 2 мин
Были ли сведения на этой странице полезными?

Оцените свои впечатления

Да Нет

Хотите оставить дополнительный отзыв?

Отзывы будут отправляться в корпорацию Майкрософт. Нажав кнопку «Отправить», вы разрешаете использовать свой отзыв для улучшения продуктов и служб Майкрософт. Политика конфиденциальности.

Отправить

В этой статье

Эта статья относится к Microsoft 365 корпоративный и Office 365 корпоративный.

Вы можете использовать PowerShell для Microsoft 365 для эффективного создания учетных записей пользователей, в том числе нескольких учетных записей.

При создании учетных записей пользователей в PowerShell всегда требуются определенные свойства учетных записей. Другие свойства не требуются, но важны. См. следующую таблицу.

Имя свойстваОбязательный?Описание
DisplayName
Да
Это имя отображения, которое используется в Microsoft 365 службах. Например, Caleb Sills.
UserPrincipalName
Да
Это имя учетной записи, используемой для регистрации Microsoft 365 служб. Например, CalebS @ contoso.onmicrosoft.com.
FirstName
Нет
LastName
Нет
LicenseAssignment
Нет
Это план лицензирования (также известный как план лицензии или SKU), из которого доступная лицензия назначена учетной записи пользователя. Лицензия определяет Microsoft 365 службы, доступные для учетной записи. При создании учетной записи пользователю не нужно назначать лицензию, но у учетной записи должна быть лицензия на доступ к Microsoft 365 службам. Лицензию требуется добавить в течение 30 дней после создания учетной записи пользователя.
Password
Нет
Если пароль не указан, случайный пароль назначен учетной записи пользователя, и пароль отображается в результатах команды.
Если указать пароль, он должен быть от 8 до 16 текстовых символов ASCII следующих типов: буквы нижнего регистра, верхние буквы, цифры и символы.
UsageLocation
Нет
Это допустимый код страны согласно ISO 3166-1 alpha-2 (например, US для США и FR для Франции). Например, США для США и FR для Франции. Важно предоставить это значение, так как некоторые Microsoft 365 службы недоступны в некоторых странах. Вы не можете назначить лицензию учетной записи пользователя, если эта учетная запись не настроена. Дополнительные сведения см. в дополнительных сведениях об ограничениях лицензии.

Использование модуля PowerShell Azure Active Directory для Graph

Во-первых, подключите Microsoft 365 клиента.

После подключения используйте следующий синтаксис для создания отдельной учетной записи:

$PasswordProfile=New-Object -TypeName Microsoft.Open.AzureAD.Model. PasswordProfile
$PasswordProfile.Password="<user account password>"
New-AzureADUser -DisplayName "<display name>" -GivenName "<first name>" -SurName "<last name>" -UserPrincipalName <sign-in name> -UsageLocation <ISO 3166-1 alpha-2 country code> -MailNickName <mailbox name> -PasswordProfile $PasswordProfile -AccountEnabled $true

В этом примере создается учетная запись для американского пользователя Caleb Sills:

$PasswordProfile=New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$PasswordProfile.Password="3Rv0y1q39/chsy"
New-AzureADUser -DisplayName "Caleb Sills" -GivenName "Caleb" -SurName "Sills" -UserPrincipalName [email protected] -UsageLocation US -MailNickName calebs -PasswordProfile $PasswordProfile -AccountEnabled $true

Использование модуля Microsoft Azure Active Directory для Windows PowerShell

Во-первых, подключите Microsoft 365 клиента.

Создание одной учетной записи пользователя

Чтобы создать одну учетную запись, используйте следующий синтаксис:

New-MsolUser -DisplayName <display name> -FirstName <first name> -LastName <last name> -UserPrincipalName <sign-in name> -UsageLocation <ISO 3166-1 alpha-2 country code> -LicenseAssignment <licensing plan name> [-Password <Password>]

Примечание

PowerShell Core не поддерживает модуль Microsoft Azure Active Directory для Windows PowerShell и командлетов с Msol в их имени. Эти командлеты требуется запускать из Windows PowerShell.

Чтобы предоставить список доступных имен плана лицензирования, используйте следующую команду:

Get-MsolAccountSku

В этом примере создается учетная запись для американского пользователя Caleb Sills и назначается лицензия из плана лицензирования contoso:ENTERPRISEPACK (Office 365 корпоративный E3).

New-MsolUser -DisplayName "Caleb Sills" -FirstName Caleb -LastName Sills -UserPrincipalName [email protected] -UsageLocation US -LicenseAssignment contoso:ENTERPRISEPACK

Создание нескольких учетных записей пользователей

  1. Создайте CSV-файл, который содержит обязательные сведения об учетных записях пользователей. Пример:

    UserPrincipalName,FirstName,LastName,DisplayName,UsageLocation,AccountSkuId
    [email protected],Claude,Loiselle,Claude Loiselle,US,contoso:ENTERPRISEPACK
    [email protected].
    com,Lynne,Baxter,Lynne Baxter,US,contoso:ENTERPRISEPACK [email protected],Shawn,Melendez,Shawn Melendez,US,contoso:ENTERPRISEPACK

    Примечание

    Имена столбцов и их порядок в первом ряду CSV-файла являются произвольными. Но убедитесь, что порядок данных в остальном файле соответствует порядку имен столбцов. И используйте имена столбцов для значений параметров в PowerShell для Microsoft 365 команды.

  2. Используйте следующий синтаксис:

    Import-Csv -Path <Input CSV File Path and Name> | foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId [-Password $_.Password]} | Export-Csv -Path <Output CSV File Path and Name>

    В этом примере создаются учетные записи пользователей из файла C:\My Documents\NewAccounts.csv и журналы результатов в файле C:\My Documents\NewAccountResults. csv.

    Import-Csv -Path "C:\My Documents\NewAccounts.csv" | foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId} | Export-Csv -Path "C:\My Documents\NewAccountResults.csv"
    
  3. Результаты можно просмотреть в выходном файле. Мы не указали пароли, поэтому случайные пароли, Microsoft 365 созданные, видны в файле вывода.

См. также

Управление учетными записями пользователей Microsoft 365, лицензиями и группами с помощью PowerShell

Управление Microsoft 365 с помощью PowerShell

Начало работы с PowerShell для Microsoft 365

👥 Импорт пользователей в Active Directory из CSV или XLS – IT is good

Если вам нужно создать много новых учетных записей пользователей в домене одновременно, крайне неэффективно создавать их все вручную с графической консоли Active Directory Users and Computers (ADUC).

В этой статье мы рассмотрим простой скрипт PowerShell, который позволяет импортировать пользовательские данные из файла CSV / XLS и создавать для них учетные записи в домене Active Directory.

Прежде всего, создайте файл NewUser.xlsx в Excel со следующей структурой заголовка:

FullName;sn;givenName;company;department;title;telephoneNumber;City;sAMAccountName;Password

Заполните файл Excel данными всех пользователей, которых вы хотите создать в Active Directory (обычно эти данные предоставляются из системы учета персонала).

Экспортируйте файл Excel в формат CSV с запятыми в качестве разделителей (Файл> Сохранить как> Тип файла: CSV, Имя файла: new_as_users.csv).

Если вы хотите использовать «;» в качестве разделителя, вам нужно добавить следующий аргумент в командлет Import-CSV -delimiter «;».

Для создания новых пользователей в домене мы будем использовать командлет New-ADUser из модуля Active Directory для Windows PowerShell, поэтому перед запуском скрипта PowerShell убедитесь, что этот модуль установлен на сервере / компьютере, с которого вы выполняете импорт пользователей.

Создайте файл import_ad_users.ps1 со следующим кодом PowerShell (измените имя своего домена и организационную единицу Active Directory, в которой вы хотите создать пользователей):

Import-Module ActiveDirectory

$Domain="@theitbros.cpm"

$UserOu="OU=Users,OU=UK,DC=theitbros,DC=com"

$NewUsersList=Import-CSV "C:\PS\new_as_users.csv"

ForEach ($User in $NewUsersList) {

$FullName=$User.FullName

$Company=$User.company

$Department=$User.department

$Description=$User.description

$givenName=$User.givenName

$title=$User.title

$City=$User.City

$telephoneNumber=$User.telephoneNumber

$sAMAccountName=$User.sAMAccountName

$sn=$User.sn

$userPrincipalName=$User.sAMAccountName+$Domain

$userPassword=$User.Password

$expire=$null

New-ADUser -PassThru -Path $UserOu -Enabled $True -ChangePasswordAtLogon $True -AccountPassword (ConvertTo-SecureString $userPassword -AsPlainText -Force) -CannotChangePassword $False -City $City -Company $Company -Department $Department –title $title –OfficePhone $telephoneNumber -DisplayName $FullName -GivenName $givenName -Name $FullName -SamAccountName $sAMAccountName -Surname $sn -UserPrincipalName $userPrincipalName

}

Запись. Options-ChangePasswordAtLogon $ True требует изменения пароля пользователя при первом входе в систему, -CannotChangePassword $ False – позволяет пользователю самостоятельно изменять пароли.

Если вы создаете учетные записи служб, вы можете указать -ChangePasswordAtLogon $ False, -CannotChangePassword $ True.

Запустите скрипт из командной строки PowerShell, затем откройте консоль ADUC и убедитесь, что в указанном подразделении появились новые пользователи.

Как видите, этот скрипт PowerShell позволяет массово импортировать пользователей в Active Directory за несколько минут.

Вы можете удалить или добавить любые атрибуты пользователя в скрипт и файл CSV / Excel из AD.

Полный список доступных пользовательских атрибутов в схеме вашего домена можно отобразить с помощью следующего командлета:

Get-ADUser –identity administrator –filter * -properties *|fl

 

Поделитесь статьей:

Добавление пользователя AD LDS в каталог

Группы и пользователей служб Active Directory облегченного доступа к каталогам (AD LDS) можно администрировать с помощью оснастки «Редактирование ADSI» или приложений, поддерживающих службу каталога. Дополнительные сведения о пользователях и группах AD LDS см. в разделе Общее представление о пользователях и группах AD LDS.

Для создания пользователей в AD LDS необходимо вначале импортировать в схему дополнительные классы пользователей, предоставляемые с AD LDS. Эти пользовательские классы содержатся в импортируемых LDF-файлах, расположенных в каталоге %windir%\adam компьютера, на котором установлены службы AD LDS.

Минимальным требованием для выполнения этой процедуры является членство в группе экземпляра AD LDS Администраторы. По умолчанию субъект безопасности, указанный во время настройки AD LDS как администратор AD LDS, становится членом группы «Администраторы» в разделе конфигурации. Дополнительные сведения о группах AD LDS см. в разделе Общее представление о пользователях и группах AD LDS.

Чтобы добавить пользователя AD LDS в каталог
  1. Откройте оснастку «Редактирование ADSI».

  2. Выполните подключение и привязку к экземпляру AD LDS и разделу каталога, в который необходимо добавить пользователя. Дополнительные сведения см. в разделе Использование оснастки «Редактирование ADSI» для управления экземпляром AD LDS.

  3. В дереве консоли щелкните правой кнопкой мыши раздел каталога, в который необходимо добавить пользователя.

  4. В дереве консоли щелкните правой кнопкой мыши контейнер, в который требуется добавить данного пользователя, и последовательно выберите команды Создать и Объект.

  5. В разделе Выберите класс щелкните требуемый класс (user, inetOrgPerson, person или OrganizationalPerson), а затем нажмите кнопку Далее.

  6. В поле Значение введите значение для атрибута общего имени (CN) нового пользователя и нажмите кнопку Далее.

  7. Если требуется установить значения дополнительных атрибутов, щелкните Дополнительные атрибуты.

  8. Задав дополнительные атрибуты для нового пользователя, нажмите кнопку Готово.

Дополнительная информация
  • Чтобы открыть оснастку «Редактирование ADSI» на компьютере с установленными службами AD LDS, нажмите кнопку Пуск, щелкните Администрирование, а затем — Редактирование ADSI.
  • По умолчанию пользователь AD LDS активизируется при его создании. Однако для учетной записи пользователя AD LDS, созданной с помощью оснастки «Редактирование ADSI», пароль первоначально не задается. В экземплярах AD LDS, запущенных в системе Windows Server 2008 R2, в которых действуют локальные или доменные ограничения политики, учетная запись пользователя AD LDS по умолчанию отключена. Перед включением учетной записи необходимо задать для нее пароль, отвечающий требованиям действующей политики паролей.
  • Любой класс объектов может использоваться как субъект безопасности в AD LDS, если определение класса объектов содержит статический вспомогательный класс SecurityPrincipal и атрибут unicodePwd.
  • Классы объектов user, inetOrgPerson и OrganizationalPerson недоступны до тех пор, пока определения класса пользователя AD LDS не будут импортированы в схему.
  • Задачу этой процедуры можно также выполнить, используя Модуль Active Directory для Windows PowerShell. Чтобы открыть Модуль Active Directory, нажмите кнопку Пуск и последовательно выберите пункты Администрирование и Модуль Active Directory для Windows PowerShell. Дополнительные сведения см. в статье «Добавление пользователя AD LDS в каталог» (страница может быть на английском языке) (https://go.microsoft.com/fwlink/?LinkId=137802). Дополнительные сведения о Windows PowerShell см. в статье о Windows PowerShell (https://go.microsoft.com/fwlink/?LinkId=102372) (страница может быть на английском языке).
Дополнительные источники информации

создание пользователей в AD через power shell скрипт

Сегодня столкнулся с проблемой, надо было быстро создать 60 пользователей из списка предоставленного компанией, Имя Фамилия Пароль (остальное нет, хотя можно хоть все поля профайла заполнить).
60 пользователей не мало, хотя и не так много, быстро сообразив, что с экономить время мне даст power shell скрипт, я решил его накидать и проверить как он будет работать.


В первую очередь нам нужно определиться, что в профиль пользователя будем пихать, т.е. какие поля заполнять. В этом нам поможет статья (ну или команда get-help New-ADUser)
Берем вашу Excel табличку и ставим заголовки полей, у меня получились такие:

Name,Surname,GivenName,DisplayName,Password
lavrin,Лаврин,Ира,Лаврин Ира,JHHG2j41241

после того как ваш Excel файл создан, сохраните его в формате cvs (разделитель запятые), откройте csv файл замените в нем все ; на , уберите » » (у меня почему то они были), а так же переведите csv кодировку из ANSI в UTF-8

вторым этапом нам требуется создать скрипт, что-то типа такого:
Set-ExecutionPolicy Unrestricted
import-module activedirectory
Import-CSV -Path «C:\scripts\users.csv» | ForEach-Object -process {New-ADuser -Name $_. DisplayName -SamAccountName $_.Name -Surname $_.Surname -GivenName $_.GivenName -DisplayName $_.DisplayName -Path «ou=Test,dc=test-domain,dc=ru» -CannotChangePassword $false -ChangePasswordAtLogon $false -PasswordNotRequired $false -PasswordNeverExpires $true -AccountPassword (ConvertTo-SecureString -AsPlainText $_.Password -Force) -Enabled $true}

(можно уже этот жирный текст скопировать в блокнот и сохранить, например под именем create_users.ps1)

теперь по порядку, что это значит:
Set-ExecutionPolicy Unrestricted — разрешение на запуск не подписаных скриптов
import-module activedirectory — работа с AD

рассписывать сам скрипт не буду, только скажу что:
-Name $_.DisplayName   — отображение в AD как ФИО
-SamAccountName $_.Name  — логин пользователя
-Surname $_.Surname   — фамилия
-GivenName $_.GivenName  — имя

вот как то так 🙂

ITband.ru » Типовые задачи администрирования AD с использованием PowerShell

Всем администраторам Active Directory периодически приходится сталкиваться с рутинными задачами, которые хотелось бы так или иначе автоматизировать. Как правило, это делается с использованием скриптов на наиболее известных языках программирования: VBScript, Jscript, PowerShell. Последний я считаю наиболее удобным. Благодаря некоторым из его особенностей те же процедуры, которые занимают в VBScript десяток строк и требуют понимания работы WMI, LDAP и еще многих китайских слов – в PowerShell занимает всего пять строк и требуют всего лишь знания программирования на уровне школьных уроков информатики. В настоящей статье мы рассмотрим типовые задачи администрирования Active Directory, и их автоматизацию с помощью PowerShell.

P.S. Статья рассчитана на полных, или почти полных «чайников», пару раз видевших или где-то слышавших о PowerShell. На звание Терминатора не претендую, по сему просьба ногами не пинать.

 

Предполагается, что читатели уже хотя бы немного знакомы с оболочкой PowerShell и написанием скриптов. Тех, кто не знаком – хотелось бы отослать к списку ресурсов в конце статьи.

В первую очередь, необходимо заметить, что для того, чтобы все нормально работало – необходимо иметь хотя бы один контроллер домена Windows Server 2008 R2 с установленной компонентой ActiveDirectory Web Services. Увы и ах, Windows Server 2003 уходит на свалку истории. Для работы с модулем ad_powershell необходимо установить Remote Server Administration Tools, его так же можно установить на рабочем компьютере и запускать скрипты оттуда. Разумеется, ОС на компьютере должна быть не ниже Windows 7. На контроллерах домена Windows Server 2008 R2 необходимые компоненты уже установлены.
Перед тем, как выполнять скрипты – необходимо установить политику выполнения скриптов. По умолчанию, в целях безопасности включена политика Restricted, что означает, что на данном компьютере вообще запрещен запуск любых PowerShell-скриптов. О том, какие еще бывают политики выполнения – можно почитать в мануале:

Get-Help Set-ExecutionPolicy –Detailed

В нашем случае я рекомендую установить политику RemoteSigned, что позволит запускать любые собственноручно написанные скрипты, при этом запуск скриптов, скачанных из Интернета будет возможен только при наличии цифровой подписи с доверенным сертификатом. Запустите оболочку PowerShell с правами администратора (Run as Administrator) и выполните команду

Set-ExecutionPolicy RemoteSigned

Можно так же выбрать политику Unrestricted, что вообще позволит запускать любой скрипт, независимо от того, откуда он взялся – но я делать этого не рекомендую из соображений безопасности.

Теперь можно проверить работу скриптов – написать простейший скрипт «Hello World!». Я предпочитаю пользоваться PowerShell ISE, хотя можно писать и в простейшем Notepad’е. PowerShell ISE – удобная среда програмирования для PowerShell с возможностью отладки. Входит в состав ОС Wondows 7 и 2008 R2. Вобщем, рекомендую.

Теперь переходим непосредственно к автоматизации. Для того, чтобы создать объекты в Active Directory, или изменить какие-либо свойства, нам необходим список объектов со всеми необходимыми параметрами. Например, список пользователей может содержать следующие парамеры: Имя, Фамилия, Логин, Пароль. Проще всего для этого использовать CSV-файл. CSV – это текстовый файл, содержащий список объектов (например – пользователей), с разделением параметров каким-либо символом (как правило, это запятая «,», хотя может быть и точка с запятой, знак табуляции и т.д.). Каждый объект обозначается одной строчкой. Так же, первая строчка может содержать список параметров.

 

Пример:

 

Name;Surname;Login;Password

Ivan,Ivanov;i.ivanov;p@ssw0rd1

Petr,Petrov;p.petrov;p@ssw0rd2

Sidor;Sidorov;s.sidorov;p@ssw0rd3

 

Чтобы получить список объектов из CSV-файла, используется командлет Import-CSV:

$Users = Import-CSV “c:\temp\users.csv”

Такой файл можно создать и в блокноте, но проще всего будет использовать Microsoft Excel. В Excel необходимо при сохранении файла выбрать формат CSV. Интересно, что Excel при сохранении в формат CSV в качестве разделителя использует знак “;”, хотя вроде бы написано «CSV (разделители – запятые)». PowerShell же по умолчанию считает, что в качестве разделителя используется запятая («,»). Чтобы наш скрипт работал корректно – необходимо либо заменить в CSV-файле все точки с запятой на запятые (используя автозамену в блокноте) либо же, что на мой взгляд правильнее – указать в скрипте использовать точку с запятой в качестве разделителя:

$Users = Import-CSV “c:\temp\users.csv” –Delimiter “;”

Чтобы проверить, как прошел импорт – можно посмотреть, что хранится в переменной $Users.

Как видим, в переменной $Users теперь хранится массив объектов с параметрами Name, Surname, Login, Password. Эти параметры можно использовать для создания учетных записей пользователей в AD.

Прежде чем приступить к работе с Active Directory, необходимо произвести импорт соответствующего модуля в PowerShell. Только после этого появятся команды для работы с AD:

Import-Module ActiveDirectory

Эту строку можно (и даже нужно) вставлять в начало всех скриптов – чтобы не вводить эту команду вручную.

 

Каждому, кто работал с ActiveDirectory, приходилось создавать учетные записи пользователей. И хотя это делается легко и просто – в несколько щелчков мышкой – иногда, особенно в крупных организациях, приходится создавать много учетных записей в течение дня. Иногда – в районе сотни.

Для нашего примера, в качестве списка пользователей будем брать CSV-файл со следующими полями:

 

  • Name – имя пользователя

  • Surname – фамилия пользователя

  • Password – пароль

  • OU – организационное подразделение, где будет находиться пользователь (вида Contoso_Users/Fin/Accounting)

 

Вначале нам нужно импортировать пользователей из списка:

$Users = Import-CSV $1 –Delimiter “;”

Параметр $1 означает, что в качестве пути к CSV-файлу будет использоваться первый по счету параметр командной строки. Запускаться скрипт будет следующим образом:

PS C:\Users\admin > Add_Users.ps1 c:\temp\users.csv

Далее нам нужно пройтись по всему массиву пользователей из списка:

Foreach($CurrentUser in $Users) {

Знак открытой фигурной скобки означает начало цикла. Этот цикл проходит по всем объектам списка, и прискаивает текущий объект переменной $CurrentUser.

Затем, для упрощения – присвоим значения соответствующих полей отдельным переменным:

 

$Name = $CurrentUser.Name

$Surname = $CurrentUser.Surname

$Password = $CurrentUser.Password

$OU = $CurrentUser.OU

 

Для того, чтобы задать пароль пользователю – необходимо перевести его в шифрованный формат SecureString:

$SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

Так же, OU нам нужно перевести в формат, соответствующий стандарту LDAP (для примера выше: “OU=Accounting,OU= Fin,OU= Contoso_Users,DC=contoso,DC=com”).

 

Для этого вначале разделим строку $OU на отдельные составляющие:

$OUTmp = $OU –Split “/”

 

В результате переменная $OUTmp будет содержать массив из всех элементов пути:

PS C:\Users\admin> $OUTmp

Contoso_Users

Fin

Accounting

 

Далее, используя командлет Foreach-Object, получим из нашего массива первую часть LDAP-пути:

 

$Path = “” #незабудьте проинициализировать переменную!

$OUTmp | ForEach-Object {$Path = «OU=$_,» + $Path}

 

В переменной $Path появляется первая часть LDAP-пути:

 

PS C:\Users\admin> $Path

OU=Accounting,OU=Fin,OU=Contoso_Users,

 

Теперь нам нужно получить полный путь, добавив к пути домен:

 

$Path += “DC=contoso,DC=com”

Получили полный LDAP-путь:

PS C:\Users\admin> $Path

OU=Accounting,OU=Fin,OU=Contoso_Users,DC=contoso,DC=com

 

Теперь сформируем дисплейное имя пользователя, его логин, User Principal Name.

 

$Login = $Name[0] + “.” + $Surname #логин формируется из первой буквы имени и фамилии, например: i.ivanov

$Displayname = $Name + “ “ + $Surname #Дисплейное имя: Ivan Ivanov

$UserPrincipalName = $Login + “@contoso.com”

 

Наконец, можно перейти к самой главной процедуре: созданию учетной записи пользователя.

 

New-ADUser $Displayname –SamAccountName $Login –UserPrincipalName $UserPrincipalName -DisplayName $DisplayName -AccountPassword $SecurePwd -ChangePasswordAtLogon 1 -Path $Path

Здесь, в принципе, все параметры понятны. Параметр -ChangePasswordAtLogon 1 означает, что пользователю будет предложено сменить пароль сразу после логина.

По умолчанию в PowerShell, в отличие от стандартного визарда в оснастке ActiveDirectory Users And Computers учетные записи только что созданных пользователей будут отключены (Disabled). Поэтому сразу после создания учетные записи нужно включить:

Enable-ADAccount $Login

Теперь нужно закрыть цикл знаком «}». Можно сохранять скрипт и пробовать.

Готовый скрипт будет выглядеть следующим образом:

 

Import-Module ActiveDirectory

$Users = Import-CSV $1 –Delimiter “;”

Foreach($CurrentUser in $Users) {

$Name = $CurrentUser.Name

$Surname = $CurrentUser.Surname

$Password = $CurrentUser.Password

$OU = $CurrentUser.OU

$SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

$OUTmp = $OU –Split “/”

$Path = “” #незабудьте проинициализировать переменную!

$OUTmp | ForEach-Object {$Path = «OU=$_,» + $Path}

$Path += “DC=contoso,DC=com”

$Login = $Name[0] + “. ” + $Surname

$Displayname = $Name + “ “ + $Surname #в кавычках – пробел!

$UserPrincipalName = $Login + “@contoso.com”

New-ADUser $Displayname –SamAccountName $Login –UserPrincipalName $UserPrincipalName -DisplayName $DisplayName -AccountPassword $SecurePwd -ChangePasswordAtLogon 1 -Path $Path

Enable-ADAccount $Login

}

 

Как известно, для работы с Active Directory перво-наперво необходимо вводить компьютеры в домен. Сделать это можно двумя способами:

· Мышкой – самый известный способ, через «Свойства» «Моего компьютера». Легко и просто.

· Командой netdom join. Тоже несложно, и можно использовать в скриптах.

У первого способа есть существенный недостаток: учетные записи компьютеров создаются в дефолтном OU Computers. В организациях же, как правило имеются разные OU для разных типов компьютеров (сервер, десктоп, ноутбук), а так же отдельные OU для разных отделов/департаментов/и т.д., с различными групповыми политиками, действующими для разных OU. Поэтому после ввода компьютеров в домен необходимо переносить учетные записи компьютеров вручную в соответствующий OU, а затем перезагружать компьютер еще раз, чтобы на нем применились все необходимые политики. При использовании команды netdom можно указать нужное OU, но набирать все это с клавиатуры – та еще задачка, особенно – когда компьютеров много, и особенно, что часто бывают – задачку эту поручают простым эникейщикам. Где-то в какой-то букве обязательно ошибется.

Самый лучший выход из этой ситуации – создать учетные записи компьютеров заранее, в соответствующих OU. Тогда компьютер сразу после ввода в домен и перезагрузки применит все соответствующие политики.

Разумеется, учетные записи компьютеров, как и пользователей, можно создавать и вручную. Но, поскольку мы – админы, а не эникейщики – будем использовать PowerShell.

Для учетных записей, как и для компьютеров, используем CSV-файл

ComputerName;OU

Server1;Cnotoso_Computers/Servers

Server2;Cnotoso_Computers/Servers

Desktop1;Cnotoso_Computers/Desktops

Desktop2;Cnotoso_Computers/Desktops

Desktop3;Cnotoso_Computers/Desktops

Laptop1;Cnotoso_Computers/Laptops

 

Далее, пишем скрипт по анологии со скриптом для учетных записей пользователей, только он будет немного проще:

 

Import-Module ActiveDirectory

$Computers = Import-CSV $1 –Delimiter “;”

Foreach($CurrentComputer in $Computers) {

$ComputerName = $CurrentComputer. ComputerName

$OU = $CurrentComputer.OU

$OUTmp = $OU –Split “/”

$Path = “” #незабудьте проинициализировать переменную!

$OUTmp | ForEach-Object {$Path = «OU=$_,» + $Path}

$Path += “DC=contoso,DC=com”

New-ADComputer –Name $ComputerName –Path $Path

}

 

Иногда бывает необходимо массово сбросить пароли у множества пользователей.

Структура CSV-файла:

Import-Module ActiveDirectory

$Users = Import-CSV $1 –Delimiter “;”

Foreach($CurrentUser in $Users) {

$Login = $CurrentUser.Login

$NewPassword = $CurrentUser.NewPassword

$SecurePwd = ConvertTo-SecureString -AsPlainText -Force -String $Password

Set-ADAccountPassword –Identity $Login –Reset –NewPassword $SecurePwd

}

 

Допустим, в вашей организации были приняты новые корпоративные стандарты, которые требуют, чтобы у каждого пользователя в AD были указаны, помимо всего остального: адрес электронной почты, номер мобильного телефона, название организации, должность. Из отдела кадров вам прислали табличку со следующими полями:

 

 

Из нее мы создаем CSV-файл с полями:

 

  • Name

  • Surname

  • E-Mail

  • Phone

  • Organization

  • JobTitle

 

Скрипт будет следующего вида:

 

Import-Module ActiveDirectory

$Users = Import-CSV $1 –Delimiter “;”

Foreach($CurrentUser in $Users) {

$Name = $CurrentUser.Name

$Surname = $CurrentUser.Surname

$Email = $CurrentUser.E-Mail

$Phone = $CurrentUser.Phone

$Organization = $CurrentUser.Organization

$JobTitle = $CurrentUser. JobTitle

$Login = (Get-ADuser –Filter {GivenName –eq $Name –and Surname –eq $Surname}).SamAccountName #ищем юзера с заданным именем и фамилией и возвращаем его логин

Set-ADUser $Login –EmailAddress $Email –MobilePhone $Phone –Company $Organization –Title $JobTitle

}

 

В этой статье я попытался рассмотреть простейшие скрипты для автоматизации наиболее часто встречающихся задач администрирования Active Directory. На самом деле, я намеренно не стал чересчур усложнять скрипты, чтобы можно было понять логику работы.

Попробуйте сами вооружиться гуглом и ресурсами, указанными в конце статьи и улучшить скрипты самостоятельно.

Например:

 

  • Добавить обработку ошибок (например, если пользователь с таким именем уже существует, или наоборот – не существует) – конструкции типа try… catch…

  • Автоматическую генерацию паролей заданной длины и сложности

  • Вывод логинов с автоматически сгенерированными праолями для только что созданных учетных записей в CSV-файл – командлет Export-CSV

Эти ресурсы очень сильно помогут в изучении PowerShell. Во всяком случае мне они помогли.

Надеюсь, эта статья была вам полезна, и кто-то, кто раньше боялся консоли – перестанет ее бояться.

Александр Косивченко

Глава 16. Расширенное управление Active Directory с помощью PowerShell — Active Directory Полное руководство

В далёком 2006 я работал в большом Канадском поставщике службы управляемого хостинга. В то время имелся гигантский спрос на хостинг выделенных серверов. Оборудование, полоса пропускания и управление всё это стоило дорого. Однако вещи начали меняться с возникновением виртуализации: она смогла снизить стоимость хостинга. Я до сих пор помню о тех имевших место постоянных дискуссиях, спорах, статьях и встречах на высшем уровне, на которых люди обсуждали преимущества и недостатки виртуализации. Как и в случае с любой другой технологией, вначале существовали проблемы, однако технологии виртуализации развивались быстро и доводили бизнес до такой степени, что он не был способен оторвать взгляд.

Для нас это было точно так же: с точки зрения бизнеса мы находились в безопасности при выделенном хостинге. Мы получали хорошую прибыль. Однако при помощи виртуализации пользователи смогли перенести стойки выделенных серверов в несколько хостов гипервизора. Затем предприятия в области хостинга принялись искать новые способы заработка денег при помощи технологий виртуализации. Это было началом новой эры облачных технологий. Однако то что я хочу выделить, похоже на технологический переход от выделенных серверов к виртуализации: большинство современных инфраструктур переживают очень интересную фазу переноса рабочих нагрузок из локальной инфраструктуры в общедоступное облако. Когда был выпущен Microsoft Azur, мир технологий вновь наводнился всевозможными дискуссиями. Большинство моментов было связано с безопасностью данных, совместимостью, надёжностью и стоимостью.

На протяжении последних нескольких лет Microsoft решала все эти вызовы и проблемы и дошло до того, что организации не смогли оставаться в стороне от этого по следующим причинам:

Когда некая организация адаптируется к облачным технологиям, не так просто привнести за раз все и повсеместно рабочие процессы в общедоступное облако. Имеются ограничения для приложений, которые всё ещё требуют запуска каких- то рабочих процессов локально. Даже когда рабочие процессы работают в обеих технологиях, сама идентификация пользователей для организаций будет оставаться той же самой. AD (Active Directory) Azure помогает расширению имеющейся локальной инфраструктуры идентификации на аутентификацию в в приложениях и службах вне зависимости от того где они запускаются.

Управление AD посредством PowerShell — подготовка

Модуль PowerShell содержит сборки, сценарии и функциональные возможности. Для применения имеющихся функциональных возможностей нам требуется импортировать этот модуль. После этого мы получаем способность вызова содержимого данного модуля для управления относящимися к делу ролями сервера, службами или свойствами. Прежде чем мы приступим к управлению AD при помощи PowerShell, для начала нам требуется импортировать соответствующий модуль ActiveDirectory.

Для осуществления этого имеется несколько способов. Они включают установку надлежащей роли сервера AD DS или производятся через RSAT (Remote Server Administration Tools, инструменты удалённого администрирования сервером):

  • Роль сервера AD DS:

    1. Когда мы устанавливаем роль своего сервера AD DS при помощи Диспетчера серверов, в качестве функциональных возможностей устанавливается Active Directory module for Windows PowerShell:


    2. Когда роль AD DS устанавливается с применением PowerShell, нам требуется вложить инструментарий управления посредством использования IncludeManagementTools. В противном случае этот модуль не будет установлен:

      
      Install-WindowsFeature –Name AD-Domain-Services -IncludeManagementTools
      		
  • Remote Server Administration Tools:

    1. Даже когда определённый сервер не обладает установленной надлежащей ролью AD DS, среда имеющегося домена может управляться при помощи модуля PowerShell AD DS. Соответствующий модуль PowerShell AD содержится в RSAT и может быть установлен с применением Диспетчера сервера или PowerShell.

    2. В диспетчере сервера его можно отыскать переместившись в Features | Remote Server Administration Tools | Role Administration Tools | AD DS and AD LDS Tools | Active Directory module for PowerShell, как это показано на следующем снимке экрана:


    3. Также его можно установить с применением PowerShell:

      
      Add-WindowsFeature RSAT-AD-PowerShell
      		
      Замечание

      Кроме того, существует также и возможность установки RSAT в ОС рабочего стола Windows. В качестве примера, можно выгрузить RSAT для Windows 10.

После установки необходимого модуля AD DS мы имеем возможность перечислить все доступные в этом модуле команды воспользовавшись такой командой:


Get-Command -Module ActiveDirectory
		

В данном модуле имеется примерно 147команд. Полный синтаксис для любой из команд можно просмотреть воспользовавшись следующей командой:


Get-Command commandname -Syntax
		

В качестве примера, приводимая ниже команда перечислит необходимый синтаксис для команды New-ADUser:


Get-Command New-ADUser -Syntax
		

Следующий снимок экрана отображает вывод для приведённой выше команды:

Для любой из команд команда Get-Help предоставляет подсказку. В качестве примера, приводимая далее команда предоставляет подсказку для команды New-ADUser:


Get-Help New-ADUser
		

Приводимый ниже снимок экрана отображает вывод приведённой выше команды:

Также мы имеем возможность просмотреть некий образец для своей команды New-ADUser при помощи следующего:


Get-Help New-ADUser -Example
		

отображаемый далее снимок экрана показывает вывод для нашей предыдущей команды:

Дополнительные сведения для конкретной команды можно просмотреть при помощи следующего:


Get-Help New-ADUser -Detailed
		

Технические сведения по определённой команде можно просмотреть воспользовавшись командой таким образом:


Get-Help New-ADUser -Full
		

Сведения о выбранной команде в реальном режиме времени можно просмотреть при помощи такого варианта:


Get-Help New-ADUser -Online
		

В этом разделе мы изучили как установить модуль Active Directory для PowerShell. Также мы изучили имеющиеся базовые функции этого модуля. теперь давайте пройдём дальше и изучим возможности управления Active Directory при помощи этого модуля.

Команды и сценарии управления AD

Данный модуль обладает 147 командами и их можно применять бесчисленными способами для управления конкретной средой AD. В данном разделе мы рассмотрим собственно возможности этих команд и поглядим как мы можем применять их для улучшения управления AD.

Я бы желал начать этот раздел с изучения того как мы можем просматривать имеющуюся конфигурацию некой среды AD. Самый быстрый способ просмотра конфигурации и возможностей конкретного сервера каталога состоит в применении такой команды:


Get-ADRootDSE
		

Эта команда предоставляет важные сведения, такие как уровни функциональности леса и домена, установленный по умолчанию контекст именования, значение текущего времени и тот контроллер домена, в котором выполнена текущая регистрация:

Наш следующий шаг состоит в поиске контроллеров домена в своём домене. Для перечисления значений имени контроллера домена, состояния его сервера глобального каталога и установленных ролей FSMO (Flexible Single Master Operation, Гибких операций единственного хозяина) мы можем применить следующее:


Get-ADDomainController -Filter * | Select-Object Name,IPv4Address,IsGlobalCatalog,OperationMasterRoles
		

Также важно иметь сведения относительно значения площадки AD, так как оно поясняет имеющуюся физическую топологию данного AD:


Get-ADDomainController -Filter * | Select-Object Name,IPv4Address,Site
		

Некий лес AD способен обладать множеством доменов. Наша следующая команла перечислит значения имён лесов, имён доменов, названий контроллеров доменов, IP адресов и площадки AD:


$Forestwide = (Get-ADForest).Domains | %{ Get-ADDomainController -Filter * -Server $_ }
write-output $Forestwide -Filter * | Select-Object Name,Forest,Domain,IPv4Address,Site
		

Когда нам известны значения имён доменов, мы способны перечислить соответствующие контроллеры домена и RODC (read-only domain controller), воспользовавшись такой командой:


$Domain = Read-Host 'What is your Domain Name ?'
Get-ADDomain -Identity $Domain | select ReplicaDirectoryServers,ReadOnlyReplicaDirectoryServer
		

При помощи этой команды его система запросит у своего пользователя ввод значения имени домена. После отклика пользователя она перечислит все контроллеры домена.

В нашей предыдущей команде, ReplicaDirectoryServers представит контроллеры домена с доступом на чтение и запись, а ReadOnlyReplicaDirectoryServer снабдит лишь контроллерами домена, доступными только для чтения.

Репликация

Для жизнеспособности некой среды AD критически важна репликация сведений. Для некого заданного контроллера домена мы можем найти его входящих партнёров реплик при помощи следующего:


Get-ADReplicationPartnerMetadata -Target REBEL-SRV01.rebeladmin.com
		

Наша предыдущая команда предоставляет подробное описание жизнеспособности определённой реплики заданного контроллера домена, включая самую последнюю реплику, раздел реплики, сервер и тому подобное.

Воспользовавшись своей следующей командой мы можем перечислить всех имеющихся входных партнёров для заданной репликации:


Get-ADReplicationPartnerMetadata -Target "rebeladmin. com" -Scope Domain
		

В нашей предыдущей команде её сфера действия определяется рамками домена. Это можно заменить на лес для получения списка всех входных партнёров в данном лесу. Получаемый вывод основывается на установленном по умолчанию разделе. Если это требуется, значение раздела может быть изменено с помощью –Partition для конфигурации или схемы раздела. Она перечислит всех относящихся к делу входных партнёров для данного выбранного раздела.

Соответствующие связанные отказы репликаций для площадки, домена и контроллера домена можно найти при помощи cmdlet Get-ADReplicationFailure:


Get-ADReplicationFailure -Target REBEL-SRV01.rebeladmin.com
		

Наша предыдущая команда перечислит все отказы репликаций для заданного контроллера домена.

Отказы репликаций для определённого домена могут быть найдены при помощи следующего:


Get-ADReplicationFailure -Target rebeladmin. com -Scope Domain
		

отказы репликаций для конкретного леса могут быть определены с применением такой команды:


Get-ADReplicationFailure -Target rebeladmin.com -Scope Forest
		

Отказы репликаций для заданной площадки можно отыскать воспользовавшись приводимой ниже команды:


Get-ADReplicationFailure -Target LondonSite -Scope Site
		

В приведённой выше команде LondonSite можно заменить необходимым вам названием площадки.

Воспользовавшись как Get-ADReplicationPartnerMetadata, так и Get-GetADReplicationFailure, я создал свой следующий сценарий PowerShell для выработки отчёта о жизнеспособности репликации для конкретного контроллера домена.

Самая первая часть данного сценария используется для задания того объекта, который мы будем применять на протяжении своего сценария:


## Active Directory Domain Controller Replication Status##
 $domaincontroller = Read-Host 'What is your Domain Controller?'
 ## Define Objects ##
 $report = New-Object PSObject -Property @{
 ReplicationPartners = $null
 LastReplication = $null
 FailureCount = $null
 FailureType = $null
 FirstFailure = $null
 }
 	   

В своём предыдущем сценарии я задал некий параметр для того чтобы конкретный инженер определил значение имени необходимого контроллера домена:


$domaincontroller = Read-Host 'What is your Domain Controller?'
		

В последующей части своего сценария я собираю приводимые ниже сведения, которые описывают значение сосотяния соединения репликации с иными контроллерами домена:


## Replication Partners ##
 $report. ReplicationPartners = (Get-ADReplicationPartnerMetadata -Target $domaincontroller).Partner
 $report.LastReplication = (Get-ADReplicationPartnerMetadata -Target $domaincontroller).LastReplicationSuccess
 	   

Далее я также собираю перечисленные ниже сведения, которые помогут инженерам в определении проблем с репликациями в случае их наличия:

  • Число отказов репликаций AD (FailureCount)

  • Тип отказа репликации AD (FailureType)

  • Первый раз регистрации отказа репликации AD (FirstFailure)


## Replication Faliures ~##
 $report.FailureCount = (Get-ADReplicationFailure -Target $domaincontroller).FailureCount
 $report.FailureType = (Get-ADReplicationFailure -Target $domaincontroller).FailureType
 $report.FirstFailure = (Get-ADReplicationFailure -Target $domaincontroller). FirstFailureTime
 	   

Самая последняя часть моего сценария форматирует получаемый вывод для всех собранных сведений:


## Format Output ##
 $report | select ReplicationPartners,LastReplication,FirstFailure,FailureCount,FailureType | Out-GridView
 	   

Последующий снимок экрана отображает получаемый вывод для нашего предыдущего сценария.


Замечание

Приводимый выше сценарий отображается неким упрощённым для понимания читателем способом. При его применении в PowerShell избегайте лишних пробелов.

Далее в топологиях репликаций AD имеются два типа репликаций:

  • Intra-site (внутри площадки): репликации между контроллерами домена в одной и той же площадке AD

  • Intra-site (между площадками):репликации между контроллерами домена из разных площадок AD

С помощью cmdlet Get-ADReplicationSite мы имеем возможность просмотра объектов реплицируемых площадок AD. Наша следующая команда вернёт все значения реплицируемых площадок определённого AD в заданном лесу AD:


Get-ADReplicationSite -Filter *
		

При помощи приводимой далее команды мы имеем возможность просмотра соединений реплицируемой площадки AD в определённом лесу AD:


Get-ADReplicationSiteLink -Filter *
		

В соединениях площадок наиболее важными сведениями выступают знания о стоимости данной площадки и установленном расписании репликаций. Это позволяет нам понимать имеющуюся топологию репликаций и ожидаемые задержки в репликациях.

приводимая далее команда перечисляет все имеющиеся связи реплицируемой площадки, которые содержат CanadaSite, совместно со значениями названия соединения, стоимостью соединения и частоты соединения:


Get-ADReplicationSiteLink -Filter {SitesIncluded -eq "CanadaSite"} | Format-Table Name,Cost,ReplicationFrequencyInMinutes -AutoSize
		

Для связывания воедино двух или более соединений площадок и включения прозрачности между соединениями площадок можно применять мосты соединений.

При помощи следующей команды можно выполнять выборку сведений о мосте соединений площадок:


Get-ADReplicationSiteLinkBridge -Filter *
		

Некоторые площадки AD применяют множество подсетей IP, которые назначаются площадкам для их работы. Для того чтобы контроллеры домена знали какие компьютеры располагаются в каких площадках важно ассоциировать эти подсети с площадками AD.

Приводимая далее команда выдаст список всех подсетей в данном лесу в виде некой таблицы со значениями названий подсети и площадки AD:


Get-ADReplicationSubnet -Filter * | Format-Table Name,Site -AutoSize
		

Серверы плацдарма работают в качестве соответствующей первичной точки взаимодействия для обработки поступающих и уходящих прочь из данной площадки AD реплицируемых сведений.

Мы имеем возможность перечислить все имеющиеся в неком домене серверы плацдарма:


$BHservers = ([adsi]"LDAP://CN=IP,CN=Inter-Site Transports,CN=Sites,CN=Configuration,DC=rebeladmin,DC=com"). bridgeheadServerListBL
$BHservers | Out-GridView
		

В нашей предыдущей команде необходимое значение атрибута bridgeheadServerListBL получается через имеющееся соединение ADSI.

Сведения об имеющейся топологии репликаций оказывают инженерам содействие множеством способов, в частности при выявлении инженерами проблем с неисправностями репликаций Active Directory или при выполнении аудита некого Active Directory. При помощи своей предыдущей команды я создал свой следующий сценарий для получения сведений о топологии репликаций за один раз.

Как обычно, самая первая часть нашего сценария посвящается определению объектов:


## Script to gather information about Replication Topology ##
 ## Define Objects ##
 $replreport = New-Object PSObject -Property @{
 Domain = $null
 }
 	   

Прежде чем мы перейдём к самой репликации, неплохо собрать сведения о своём домене Active Directory. Это важно когда некая организация пользуется множеством доменов, ибо мы способны запросто разделять отчёты:


## Find Domain Information ##
 $replreport.Domain = (Get-ADDomain).DNSroot
 	   

Для перечисления имеющихся площадок Active Directory я воспользовался следующей частью своего сценария:


## List down the AD sites in the Domain ##
 $a = (Get-ADReplicationSite -Filter *)
 Write-Host "########" $replreport.Domain "Domain AD Sites" "########"
 $a | Format-Table Description,Name -AutoSize
 	   

Затем я намерен собрать сведения относительно имеющихся соединений реплицируемых площадок Active Directory и мосте соединений реплицируемых площадок Active Directory таким образом:


## List down Replication Site link Information ##
 $b = (Get-ADReplicationSiteLink -Filter *)
 Write-Host "########" $replreport.Domain "Domain AD Replication SiteLink Information" "########"
 $b | Format-Table Name,Cost,ReplicationFrequencyInMinutes -AutoSize
 ## List down SiteLink Bridge Information ##
 $c = (Get-ADReplicationSiteLinkBridge -Filter *)
 Write-Host "########" $replreport. Domain "Domain AD SiteLink Bridge Information" "########"
 $c | select Name,SiteLinksIncluded | Format-List
 	   

В вычислительных сетях существует множество подсетей IP. Эти подсети надлежит назначать должным образом площадкам Active Directory. Тем самым, компьютеры контроллеров домена Active Directory узнают к каким площадкам они относятся. Это также оказывает непосредственное воздействие на репликацию Active Directory. В своём следующем разделе мы намерены собрать сведения о подсети Active Directory и предпочтительных главных серверах мостов для данного домена:


## List down Subnet Information ##
 $d = (Get-ADReplicationSubnet -Filter * | select Name,Site)
 Write-Host "########" $replreport.Domain "Domain Subnet Information" "########"
 $d | Format-Table Name,Site -AutoSize
 ## List down Prefered BridgeHead Servers ##
 $e = ([adsi]"LDAP://CN=IP,CN=Inter-Site Transports,CN=Sites,CN=Configuration,DC=rebeladmin,DC=com"). bridgeheadServerListBL
 Write-Host "########" $replreport.Domain "Domain Prefered BridgeHead Servers" "########"
 $e
 ## End of the Script ##
 	   
Замечание

Наш приведённый выше сценарий отображается неким простым способом для понимания читателями. При его применении в PowerShell избегайте лишних пробельных строк.

В своём предыдущем сценарии нам требуется заменить значение соединения ADSI относящимся к делу DN домена:


$e = ([adsi]"LDAP://CN=IP,CN=Inter-Site Transports,CN=Sites,CN=Configuration,DC=rebeladmin,DC=com")
		

Репликация конкретного объекта

После того как некий объект добавлен в какой- то контроллер домена, требуется реплицировать его во все прочие контроллеры домена. В противном случае пользователи столкнутся с проблемами в процессе регистрации с применением интегрированных с AD приложений и служб. Такая репликация зависит от множества различных факторов, таких как расписание репликации и соединения внутри площадки. Порой, однако, нам требуется принудительно выполнить соответствующую необходимую репликацию для понуждения реплицирования между контроллерами домена:


## Replicate Object to From Domain Controller to Another ##
$myobject = Read-Host 'What is your AD Object Includes ?'
$sourcedc = Read-Host 'What is the Source DC ?'
$destinationdc = Read-Host 'What is the Destination DC ?'
$passobject = (Get-ADObject -Filter {Name -Like $myobject})
Sync-ADObject -object $passobject -source $sourcedc -destination $destinationdc
Write-Host "Given Object Replicated to" $destinationdc
 	   

Наш предыдущий сценарий задаст несколько вопросов:

  • Name of object (название объекта): Не должно совпадать с DN (distinguished name). Всё что требуется, это чтобы текст содержался в поле имени этого объекта.

  • Source DC: Значение имени хоста DC источника.

  • Destination DC: Значение имени хоста DC получателя.

После предоставления надлежащих сведений указанный объект будет принудительно реплицирован:

В этом разделе данной главы мы изучили как можно применять имеющийся модуль PowerShel Active Directory для просмотра установленной топологии некой среды Active Directory. Также мы изучили как мы можем осуществлять аудит, поиск неисправностей и управление репликациями с применением PowerShell. В своём следующем разделе мы обираемся взглянуть на управление объектом Active Directory.

Пользователи и группы

В этом разделе давайте взглянем на команды и сценарии PowerShell, которые мы можем применять для управления пользователями и группами AD.

Время последней регистрации

при определённых обстоятельствах нам необходимо отыскивать когда какой- то пользователь выполнял успешную регистрацию в домене. Это может служить целям аудита или поиска неисправностей:


$username = Read-Host 'What is the User account you looking for ?'
   $dcs = Get-ADDomainController -Filter {Name -like "*"}
      foreach($dc in $dcs)
   { 
     $hostname = $dc.HostName
     $user = Get-ADUser $userName -Server $hostname -Properties lastLogon
     $lngexpires = $user.lastLogon
     if (-not ($lngexpires)) {$lngexpires = 0 }
     If (($lngexpires -eq 0) -or ($lngexpires -gt [DateTime]::MaxValue.Ticks))
     {
       $LastLogon = "User Never Logged In"
     }
      Else
     {
       $Date = [DateTime]$lngexpires
       $LastLogon = $Date.AddYears(1600).ToLocalTime()
     }
  }
  Write-Host $username "last logged on at:" $LastLogon
 	   

Наш предыдущий сценарий запросит имя пользователя определённой учётной записи и, после его предоставления, наша система отыщет необходимое значение атрибута lastLogon во всех доступных контроллерах домена. Если его нельзя найти, он возвратит User Never Logged In , или, в случае обнаружения, он вернёт значение временной метки последней регистрации.

Отчёт о дате последней регистрации

Для целостности требуется периодическая чистка в AD. Могут существовать объекты пользователей, которые не использовались на протяжении лет. Если бы мы могли создать некий общий отчёт с самыми последними датами входа в систему, мы бы могли применять их в качестве справочника для очистки объектов:


## Script For Filter user with Last logon Time ##
$htmlformat = "<style>BODY{background-color:LightBlue;}</style>"
Get-ADUser -Filter * -Properties "LastLogonDate" | sort-object -property lastlogondate -descending | Select-Object Name,LastLogonDate | ConvertTo-HTML -head $htmlformat -body "<h3>AD Accounts Last Login Date</h3>"| Out-File C:\lastlogon.html
Invoke-Expression C:\lastlogon. html
 	   

Этот сценарий создаёт некий отчёт HTML, который содержит все учётные записи пользователей с их временными отметками самой последней даты входа в систему:


Отчёт о об отказах регистрации

Важно знать о попытках с отказами в регистрации в рассматриваемом DC, а не только об успешных попытках. Они могут являться результатами потенциальных вредоносных действий.

Приводимый ниже сценарий создаст некий отчёт для указания отказов во входе в систему в неком заданном контроллере домена:


## Report for DC login Failures ##
$failedevent = $null
$Date= Get-date 
$dc = Read-Host 'What is the Domain Controller ?'
$Report= "C:\auditreport.html"
$HTML=@"
<title>Failed Login Report for $dc</title>
<style>
BODY{background-color :LightBlue}
</style>
"@
 $failedevent = Get-Eventlog security -Computer $dc -InstanceId 4625 -After (Get-Date). AddDays(-7) |
 Select TimeGenerated,ReplacementStrings |
 % {
 New-Object PSObject -Property @{
 SourceComputer = $_.ReplacementStrings[13]
 UserName = $_.ReplacementStrings[5]
 SourceIPAddress = $_.ReplacementStrings[19]
 Date = $_.TimeGenerated
 }
 }
 $failedevent | ConvertTo-Html -Property SourceComputer,UserName,SourceIPAddress,Date -head $HTML -body "<h3>Failed Login Report for $dc</h3>"|
 Out-File $Report
 Invoke-Expression C:\auditreport.html
 	   
Замечание

Наш приведённый выше сценарий отображается неким простым способом для понимания читателями. При его применении в PowerShell избегайте лишних пробельных строк.

Когда вы запустите наш предыдущий сценарий, он запросит название того контроллера домена, для которого вы желаете выполнить данный отчёт. Затем, в фоновом режиме, он отыщет событие 4625 в имеющемся просмотрщике событий. а затем выводится отчёт списка следующих сведений:

  • Значение компьютера источника

  • Значение имени пользователя

  • Значение адреса IP источника

  • Время данного события

Приводимый далее снимок экрана показывает отчёт отказов для REBEL-PDC-01:


Поиск блокированной учётной записи

При назначенных политиках пароля, учётные записи с большим числом отказов во входе в систему будут заблокированы. Заблокированные учётные записи в некой среде AD можно отыскать при помощи такой команды:


Search-ADAccount -Lockedout | Select name,samAccountName,Lockedout
		

Когда кто- то из этого списка должен быть разблокирован, мы можем воспользоваться для разблокирования учётной записи имеющимся cmdlet Unlock-ADAccount.

Для некой индивидуальной учётной записи выполните следующую команду:


Unlock-ADAccount tuser4
		

Для всех учётных записей из полученного списка выполните такую команду:


Search-ADAccount -Lockedout | Unlock-ADAccount
		

Отчёт об истечении срока действия пароля

Распространённым обращением в службу поддержки являются проблемы, вызванные истечением срока паролей. Приводимый ниже сценарий способен выработать некий отчёт относительно паролей с истекшей датой:


## Password Expire Report ##
$passwordreport = $null
$dc = (Get-ADDomain | Select DNSRoot).DNSRoot
$Report= "C:\passwordreport.html"
$HTML=@"
<title>Password Expire Report For $dc</title>
<style>
BODY{background-color :LightBlue}
</style>
"@
$passwordreport = Get-ADUser -filter * –Properties "SamAccountName","pwdLastSet","msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "SamAccountName",@{Name="Last Password Change";Expression={[datetime]::FromFileTime($_. "pwdLastSet")}},@{Name="Next Password Change";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
$passwordreport | ConvertTo-Html -Property "SamAccountName","Last Password Change","Next Password Change"-head $HTML -body "<h3>Password Expire Report For $dc</h3>"|
Out-File $Report
Invoke-Expression C:\passwordreport.html
 	   
Замечание

Наш приведённый выше сценарий отображается неким простым способом для понимания читателями. При его применении в PowerShell избегайте лишних пробельных строк.

Данный сценарий отыщет необходимые значения атрибутов для SamAccountName, pwdLastSet и msDS-UserPasswordExpiryTimeComputed во всех объектах пользователей. Далее они будут представлены в отчёте HTML:


Совет

Все эти отчёты могут запускаться в качестве заданий расписания и могут быть доработаны до отправки в виде электронного письма еженедельно или раз в месяц. Это сбережёт время администратора, а также предохранит от ошибок, которые могут происходить при выполнении задач вручную.

В своей предыдущей главе я дал пояснения относительно того как работает в некой инфраструктуре JEA для целей безопасности связанных с учётными записями домена полномочий. Если вкратце, мы можем создавать конечные точки JEA и назначать их ролям. Пользователям нет нужды в обладании такими полномочиями как администратор домена или предприятия для исполнения этого. Пользователи могут применять такие конечные точки при помощи своих обычных учётных записей пользователя AD. Тем не менее, в такой окончательной JEA, команды выполняются с использованием JEA учётной записи локального администратора. Эти подробности входа в систему не должны быть известны конечным пользователям, а их пароли автоматически сбрасываются на ежедневной основе.

Как и было обещано в нашей предыдущей главе, давайте теперь рассмотрим как получить установленными и настроенными JEA.

Для установки JEA прежде всего войдите в соответствующий сервер в качестве пользователя, который обладает полномочиями локального администратора и откройте PowerShell:


Install-Module xJEA
		

После его установки мы способны убедиться в этом при помощи такой команды:


Find-Module –Name xJEA | fl
		

Настройка JEA

Теперь, когда мы обладаем установленным модулем JEA, наш следующий шаг состоит в подготовке необходимой среды для применения JEA. Это можно осуществить при помощи сценария, который поступает с самим модулем JEA. Он располагается в C:\Program Files\WindowsPowerShell\Modules\xJea\0.2.16.6\Examples\SetupJEA.ps1.

Этот сценарий осуществит следующее:

  • Удалит все имеющиеся конечные точки с данного компьютера

  • Настроит имеющегося DSC LCM (Local Configuration Manager, Диспетчера локальных настроек) принять изменения и далее выполнять проверку каждые 30 минут чтобы убеждаться в том, что нет изменений данной настройки

  • Включить необходимый режим отладки


Configuration SetupJea
    {
      Import-DscResource -module xjea Node localhost
      {
        xJeaEndPoint CleanAll
        {
          Name     = 'CleanALL'
          CleanAll = $true
        }
        LocalConfigurationManager
        {
          RefreshFrequencyMins = 30
          ConfigurationMode    = "ApplyAndAutoCorrect"
          DebugMode            = "ForceModuleImport"  
          #This disables provider caching
        }
      }
    }
    SetupJea -OutputPath C:\JeaDemo
    Set-DscLocalConfigurationManager -Path C:\JeaDemo -Verbose
    Start-DscConfiguration -Path c:\JeaDemo -Wait -Verbose
    #EOF
 	   
Замечание

Наш приведённый выше сценарий отображается неким простым способом для понимания читателями. При его применении в PowerShell избегайте лишних пробельных строк.

Для запуска этого сценария перейдите в каталог C:\Program Files\WindowsPowerShell\Modules\xJea\0.2.16.6\Examples\ и запустите .\SetupJEA.ps1, как это показано на следующем снимке экрана:

Теперь мы завершили необходимую установку и первоначальную настройку.

Проверка

JEA поставляется с тремя демонстрационными настройками конечных точек, которыми можно пользоваться в качестве руководства для создания некой конечной точки. Эти демонстрационные файлы расположены в C:\ProgramFiles\WindowsPowerShell\Modules\xJea\0.2.16.6\Examples, а также Demo1.ps1, который содержит следующее:


cls configuration Demo1
{
  Import-DscResource -module xjea
  xJeaToolKit Process
  {
    Name         = 'Process'
    CommandSpecs = @"Name,Parameter,ValidateSet,ValidatePattern Get-Process 
    Get-Service Stop-Process,Name,calc;notepad 
    Restart-Service,Name,,^A"@
  }
  xJeaEndPoint Demo1EP
  {
    Name                   = 'Demo1EP'
    Toolkit                = 'Process'
    SecurityDescriptorSddl = 
      'O:NSG:BAD:P(A;;GX;;;WD)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)'                     
    DependsOn              = '[xJeaToolKit]Process'
  }
}
Demo1 -OutputPath C:\JeaDemo

Start-DscConfiguration -Path C:\JeaDemo -ComputerName localhost -Verbose -wait -debug -ErrorAction SilentlyContinue -ErrorVariable errors
if($errors | ? FullyQualifiedErrorId -ne 'HRESULT 0x803381fa')
{
    $errors | Write-Error    
}

start-sleep -Seconds 30 #Wait for WINRM to restart

$s = New-PSSession -cn .  -ConfigurationName Demo1EP
Invoke-command $s {get-command} |out-string
Invoke-Command $s {get-command stop-process -Syntax}
# Enter-pssession $s
Remove-PSSession $s
#EOF
 	   
Замечание

Наш приведённый выше сценарий отображается неким простым способом для понимания читателями. При его применении в PowerShell избегайте лишних пробельных строк.

Что касается настроек такой конечной точки, пользователям разрешается применять лишь такие cmdlet:

Наш предыдущий cmdlet Stop-Process может применяться только для останова калькулятора. Однако он также позволяет вам применять без ограничений Restart-Service, Get-Process и Get-Service.

Для развёртывания этой конечной точки мы можем применить . \Demo1.ps1.

После успешного выполнения этого мы можем проверить настройку полученного нового сеанса PowerShell при помощи следующего:


Get-PSSessionConfiguration
		

Следующий снимок экрана отображает вывод нашей предыдущей команды:

Наш следующий этап состоит в подключении к новой конечной точке. Это можно сделать при помощи такой команды:


Enter-PSSession –ComputerName localhost –ConfigurationName demo1ep
		

В нашей предыдущей команде –ConfigurationName задаёт значение названия конечной точки.

Как только мы выполним эту команду, наша система подключается к соответствующей конечной точке и изменяет значение пути на C:\Users\JSA-Demo1EP\Documents:

Этот пользователь устанавливается в качестве части общего процесса установки со стороны JEA. Он выступает в качестве учётной записи данного сеанса PowerShell. Также эта учётная запись является частью группы локальных администраторов:

Наш следующий снимок экрана подтверждает такое участие в локальной группе безопасности Administrators:

После осуществления подключения данного сеанса мы можем проверить его вначале при помощи разрешённой команды. В соответствии с имеющимися настройками, нам теперь дозволено запускать команду Get-Service без каких бы то ни было ограничений:

Тот пользователь, под которым я вошёл в данный компьютер является локальным администратором. Поэтому я обладаю достаточными полномочиями для перезапуска этого компьютера при помощи cmdlet Restart-Computer. Однако когда я применяю эту команду через созданную конечную точку, это должно мне быть запрещено в соответствии с настройкой этой конечной точки.

Как мы можем видеть из предыдущего снимка экрана, всё работает как мы и ожидали. Пользователям дозволено работать исключительно с командами, допускаемыми конфигурацией этой конечной точки. Эти настройки не будут допустимыми для иного компьютера пока не применяются те же самые настройки конечной точки.

Настройки конечной точки Demo2.ps1 сосредоточены вокруг соответствующего администратора файлового сервера:


cls
configuration Demo2
{
  Import-DscResource -module xjea

  xJeaToolKit SMBGet
  {
    Name = 'SMBGet'
    CommandSpecs = @" Module,Name,Parameter,ValidateSet,ValidatePattern
      SMBShare,get-* "@
  }
  xJeaEndPoint Demo2EP
  {
    Name = 'Demo2EP'
    Toolkit = 'SMBGet'
    SecurityDescriptorSddl = 'O:NSG:BAD:P(A;;GX;;;WD)S:P(AU;FA;GA;;;WD)
      (AU;SA;GXGW;;;WD)' 
    DependsOn = '[xJeaToolKit]SMBGet'
  }
}

Demo2 -OutputPath C:\JeaDemo
Start-DscConfiguration -Path C:\JeaDemo -ComputerName localhost -Verbose ` -wait -debug -ErrorAction SilentlyContinue -ErrorVariable errors
if($errors | ? FullyQualifiedErrorId -ne 'HRESULT 0x803381fa')
{
 $errors | Write-Error 
}

start-sleep -Seconds 30 #Wait for WINRM to restart

$s = New-PSSession -cn . -ConfigurationName Demo2EP
Invoke-command $s {get-command} |out-string
# Enter-pssession $s

Remove-PSSession $s
#EOF
 	   
Замечание

Наш приведённый выше сценарий отображается неким простым способом для понимания читателями. При его применении в PowerShell избегайте лишних пробельных строк.

В соответствии с нашим предыдущим сценарием, данная система позволит вам применять без ограничений следующий список cmdlet:

Наш следующий снимок экрана отображает вывод для команды Get-PSSessionConfiguration.

Мы можем подключиться ко своей второй конечной точке при помощи такой команды:


Enter-PSSession –ComputerName localhost –ConfigurationName demo2ep
		

После подключения Get-Command перечислит все доступные в этой конечной точке команды:

Как и ожидалось, она допускает для нас запуск исключительно разрешённых cmdlet. В данной проверке мы воспользуемся cmdlet Get-SMBshare, который разрешён и Restart-Computer, который запрещён:

Demo3.ps1 предоставляет свою конечную точку для управления файловой системой и навигации по ней:


cls configuration Demo3
{
  Import-DscResource -module xjea
  xJeaToolKit FileSystem
  {
    Name = 'FileSystem'
    CommandSpecs = @" Module,name,Parameter,ValidateSet,ValidatePattern,
      Get-ChildItem,Get-Item,Copy-Item,Move-Item,Rename-Item,
      Remove-Item,Copy-ItemProperty,Clear-ItemProperty,Move-ItemProperty,
      New-ItemProperty,Remove-ItemProperty,Rename-ItemProperty,Set-ItemProperty,
      Get-Location,Pop-Location,Push-Location,Set-Location,Convert-Path,
      Join-Path,Resolve-Path,Split-Path,Test-Path,Get-PSDrive,New-PSDrive,
      out-file "@
    Ensure = 'Present' 
  }
 
  xJeaEndPoint Demo3EP
  {
     Name = 'Demo3EP'
     ToolKit = 'FileSystem'
     Ensure = 'Present'
     DependsOn = '[xJeaToolKit]FileSystem'
  }
}

Demo3 -OutputPath C:\JeaDemo

Start-DscConfiguration -Path C:JeaDemo -ComputerName localhost -Verbose ` -wait -debug -ErrorAction SilentlyContinue -ErrorVariable errors
if($errors | ? FullyQualifiedErrorId -ne 'HRESULT 0x803381fa')
{
 $errors | Write-Error 
}

start-sleep -Seconds 30 #Wait for WINRM to restart
# This endpoint allows you to navigate the filesystem but not see 
# the CONTENTS of any of the files
$s = New-PSSession -cn . -ConfigurationName Demo3EP
Invoke-command $s {dir 'C:\Program Files\Jea\Activity\ActivityLog.csv'} 
Invoke-Command $s {get-content ` 'C:Program FilesJeaActivityActivityLog.csv'}
# Enter-pssession $s

Remove-PSSession $s
#EOF
 	   
Замечание

Наш приведённый выше сценарий отображается неким простым способом для понимания читателями. При его применении в PowerShell избегайте лишних пробельных строк.

Настройки его конечной точки позволяют нам применять такие cmdlet:

  • Get-ChildItem

  • Get-Item

  • Copy-Item

  • Move-Item

  • Rename-Item

  • Remove-Item

  • Copy-ItemProperty

  • Clear-ItemProperty

  • Move-ItemProperty

  • New-ItemProperty

  • Rename-ItemProperty

  • Set-ItemProperty

  • Get-Location

  • Pop-Location

  • Push-Location

  • Set-Location

  • Convert-Path

  • Join-Path

  • Resolve-Path

  • Split-Path

  • Test-Path

  • Get-PSDrive

  • New-PSDrive

  • out-file

Это объясняет как мы можем применять конечные точки JEA для ограничения полномочий конкретного использования на определённые задачи. Данный сценарий может использоваться для сборки вашей собственной конфигурации. Имеется множество примеров, которые вы можете отыскать в GitHub. Вы можете выполнить доступ к странице GitHub JEA через https:/​/​github.​com/​PowerShell/​JEA.

До сих пор в этой главе мы изучали то как мы можем применять модуль Powershell Active Directory для управления неким окружением Active Directory. Однако когда дело доходит до некой гибридной среды, мы не можем воспользоваться тем же самым модулем и для управления AD Azure. Для управления объектами Azure AD (исключительно облачными и синхронизированными) нам придётся применять модуль PowerShell Azure Active Directory. В своём следующем разделе этой главы мы намерены исследовать модуль PowerShell Azure Active Directory и его возможности.

Аналогично локальному Active Directory, мы можем также применять PowerShell и в Azure Active Directory. Давайте рассмотрим зачем нам следует применять PowerShell для управления Azure Active Directory:

  • Доступ к только что появившимся возможностям: Microsoft продолжает выпуск новых свойств, исправлений, обновлений и расширенных возможностей более часто в службах Azure AD, нежели в локальных Active Directory.

    Microsoft осуществляет выпуск новых возможностей для общего доступа в два этапа. На первой стадии они выпускаются в качестве версии для предварительного знакомства. Их не рекомендуется применять в промышленном применении, однако профессионалы могут использовать их для тестирования и выполнять обратную связь с Microsoft. На этом этапе данная функциональность может обладать множеством обновлений и, в большинстве случаев, для надлежащего обновления в GUI потребуется какое- то время. Некоторые из таких изменений не будут доступны в GUI до основного выпуска. Тем не менее, когда мы пользуемся PowerShell, нам не приходится ждать. Мы можем получать ранний доступ к свойствам сразу после их выпуска.

  • Более быстрый отклик: Портал Azure Active Directory обладает большим числом различных окон, мастеров, форм настроек и управления пользователями, группами, ролями и связанными с этим свойствами. Этот GUI упрощает эти моменты, но требует времени. Например, когда вы добавляете учётную запись некого пользователя при помощи портала Azure AD, вам приходится по крайней мере проходить четыре подчинённых окна. В то время как PowerShell позволяет нам сделать это в одном окне и несколькими строками команд.

  • Гранулированное управление: Портал Azure AD визуализирует сами данные и настройки служб применяя различные окна. Тем не менее, это может не всегда тем что вам требуется. Например, давайте допустим что мы ищем конкретное значение в двух учётных записях пользователей. Когда мы применяем имеющийся GUI, для получения этих сведений нам требуется пройти через несколько различных окон. Однако, воспользовавшись командой или сценарием PowerShell мы будем способны получить те же самые сведения в одном окне. При устранении неисправностей это на самом деле полезно.

  • Интеграция с Microsoft Graph: Microsoft Graph предоставляет единообразную программируемую модель для доступа к гигантским объёмам сведений в Microsoft 365, Azure Active Directory, Enterprise Mobility Suite, Windows 10 и так далее. Будучи его частью, имеющийся модуль Azure AD PowerShell for Graph позволяет вам выполнять выборку сведений, обновлять настройки каталога, добавлять/ обновлять/ удалять объекты и настраивать свойства через Microsoft Graph.

В этой главе для управления Azure AD я буду применять Azure Active Directory PowerShell for Graph.

Необходимый нам модуль Azure Active Directory PowerShell for Graph поставляется в двух версиях. Имеющаяся в общем доступе версия предварительного просмотра является наиболее распространённой, но не рекомендуется для промышленного применения. Основные шаги для установки данной версии можно отыскать в https://www.powershellgallery.com/packages/AzureADPreview.

Общедоступная версия является стабильной, рекомендуемой для промышленных сред. Её можно установить на любой компьютер, запущенный под Windows Server 2008 R2 или выше с самыми последними обновлениями. Также необходим Microsoft .NET Framework 4.5 или выше.

После выполнения всех предварительных требований, осуществите такие шаги:

  1. Зарегистрируйтесь в своём компьютере, который вы выбрали для устанавливаемого модуля Azure Active Directory PowerShell for Graph.

  2. Запустите консоль PowerShell от имени администратора.

  3. Запустите команду Install-Module -Name AzureAD. Если она запросит обновления необходимого репозитория, ответьте Yes:


  4. После установке мы можем убедиться с том что этот модуль установлен воспользовавшись Get-Module AzureAD.

  5. Для инициализации подключения к своей аренде Azure AD, после успешной установки необходимого модуля выполните Connect-AzureAD.

  6. Далее он пригласит вас в окне входа в систему. Для подключения воспользуйтесь подробностями учётной записи глобального администратора Azure AD.

Теперь у нас имеется установленный модуль Azure Active Directory PowerShell for Graph. Давайте рассмотрим как мы можем при помощи этого модуля управлять гибридной средой Azure AD.

Общие команды

Мы можем начать с перечисления всех доступных в нашем модуле Azure AD команд, что можно сделать таким образом:


Get-Command -module AzureAD
		

При помощи команды Get-Help мы можем просматривать полный синтаксис команд. Например, пр помощи следующей команды мы способны увидеть полный синтаксис для команды Get-AzureADUser:


Get-Help Get-AzureADUser
		

Воспользовавшись своей следующей командой мы способны проверить состояние доменов Azure AD:


Get-AzureADDomain | fl
		

Наша предыдущая команда помогает идентифицировать состояние проверки нашего домена по ссылке на значение атрибута IsVerified.

Когда вы применяете в Azure AD некий индивидуально настроенный домен, нам требуется проверить владельца этого домена с применением записей DNS. Если эта проверка не прошла, мы можем выполнить выборку необходимых записей DNS, воспользовавшись такой командой:


Get-AzureADDomainVerificationDnsRecord -Name M365x562652.onmicrosoft.com | fl
		

В нашем предыдущем примере, M365x562652.onmicrosoft.com представляет имя нашего домена:

Мы можем просмотреть подробности аренды Azure AD применив следующее:


Get-AzureADTenantDetail | fl
		

В некой гибридной среде критически важной является жизнеспособность синхронизации локального AD. Мы можем просмотреть значение времени самой последней синхронизации каталога, воспользовавшись такой командой:


Get-AzureADTenantDetail | select CompanyLastDirSyncTime
		
Управление пользователями

Мы имеем возможность просмотра необходимых подробностей учётной записи пользователя для некой известной учётной записи применяя следующее:


Get-AzureADUser -ObjectId [email protected] | fl
		

А нашей предыдущей команде [email protected] представляет собой значение UPN для указанного пользователя.

Мы также способны применять атрибуты пользователя для поиска подробностей учётной записи пользователя:


Get-AzureADUser -Filter "startswith(GivenName,'Adele')"
		

Наша предыдущая команда отфильтрует пользователей Azure AD по GivenName при помощи Adele.

Мы также можем фильтровать пользователей на основании значения некого особого атрибута:


Get-AzureADUser -Filter "GivenName eq 'Adele'"
		

Эта предыдущая команда найдёт всех пользователей в точности имеющих именем значение Adele.

В своём демонстрационном окружении я бы желал посмотреть список запрещённых учётных записей. Я могу сделать это следующей командой:


Get-AzureADUser -All $true -Filter 'accountEnabled eq false'
		

Мы можем изменить свой вывод и далее фильтруя получаемые сведения:


Get-AzureADUser -All $true -Filter 'accountEnabled eq false' | select DisplayName,UserPrincipalName,Department
		

Наша приводимая выше команда отобразит значения атрибутов DisplayName, UserPrincipalName и Department для отфильтрованных учётных записей.

В некой гибридной среде мы можем фильтровать синхронизированные с локальным AD учётные записи воспользовавшись следующим:


Get-AzureADUser -All $true -Filter 'DirSyncEnabled eq true'
		

В этой приведённой выше команде значение атрибута DirSyncEnabled определяет является ли учётная запись особенной только для облачного решения или синхронизируемой учётной записью.

Мы также можем проверить значение самой последней синхронизации для своих синхронизируемых учётных записей:


Get-AzureADUser  -All $true -Filter 'DirSyncEnabled eq true' | select DisplayName,UserPrincipalName,LastDirSyncTime
		

В нашей предыдущей команде значение LastDirSyncTime определяет время самой последней синхронизации указанного объекта.

Также мы обладаем возможностью экспорта получаемого вывода в некий CSV при помощи имеющейся команды Export-CSV:


Get-AzureADUser  -All $true -Filter 'DirSyncEnabled eq true' | select DisplayName,UserPrincipalName,LastDirSyncTime | Export-CSV -Path .\syncaccount.csv
		

Указываемое значение ImmutableID некой учётной записи пользователя применяется для установления соответствия объекта пользователя Azure AD с объектом пользователя на локальной площадке. ImmutableID не обладает никакой связью с ObjectGUID учётной записи пользователя на локальной площадке. Мы можем применять его лишь для идентификации только пользователей в облаке. Когда этот пользователь присутствует только в облаке, значением ImmutableID должно быть null:


Get-AzureADUser -All $true | where-Object {$_.ImmutableId -eq $null}
		

Приводимая выше команда возвратит перечень всех учётных записей, располагающихся только в облаке. При помощи приводимой далее команды мы можем выполнить экспорт всех необходимых значений атрибутов в CSV:


Get-AzureADUser -All $true | where-Object {$_.ImmutableId -eq $null} | select DisplayName,UserPrincipalName | Export-CSV -Path .\cloudaccount.csv
		

Другим важным моментом, имеющим отношение к учётным записям, являются лицензии. Если мы намерены воспользоваться премиальными функциональными возможностями Azur AD, нам необходимо обладать надлежащими выделенными лицензиями. В установках по умолчанию пользователь обладает лишь функциями свободно распространяемой версии Azure AD.

Для просмотра связанных с некой учётной записью лицензий мы можем применить такую команду:


Get-AzureADUserLicenseDetail -ObjectId [email protected] | fl
		

Наша приведённая выше команда возвратит те лицензии, которые привязаны к нашему пользователю [email protected].

Мы также можем просмотреть SKU своих подписок при помощи следующей команды:


Get-AzureADSubscribedSku | fl
		

Приведённая выше команда перечислит все сведения относительно лицензий, связанных с данной арендой. Но по большей части, нам требуется лишь знать сколько лицензий применяется и сколько лицензий доступно. Мы можем выполнить это при помощи такой команды:


Get-AzureADSubscribedSku | select SkuPartNumber,ConsumedUnits -ExpandProperty PrepaidUnits
		

В приводимом примере значение SkuPartNumber представляет код компонента имеющейся лицензии. Получаемое значение разрешённого поля представляет собой общее число приобретённых лицензий. ConsumedUnits предоставляет общее число задействованных лицензий.

Давайте проследуем далее и рассмотрим как мы можем назначать какую- то новую лицензию некому пользователю.

В моей среде имеются два пользователя Azure AD, синхронизированных с локальной площадкой, которые не обладают назначенными им лицензиями:


Get-AzureADUserLicenseDetail -ObjectId [email protected] | fl
		

Приводимый ниже снимок экрана отображает вывод нашей предыдущей команды:

В качестве некого первичного этапа, давайте создадим объекты для их применения в процессе выделения соответствующей лицензии:


$newlicence = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$newlicenceadd = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
		

Далее нам требуется отыскать значение SkuId для рассматриваемой лицензии.

Я намерен выделить такому пользователю имеющуюся лицензию ENTERPRISEPREMIUM:


$newlicenceadd.AddLicenses = $newlicence
		

После этого нам требуется назначить полученные лицензии соответствующему объекту:


$newlicence.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value "ENTERPRISEPREMIUM" -EQ).SkuId
		

Теперь мы способны проследовать далее и назначить эту лицензию надлежащему пользователю:


Set-AzureADUserLicense -ObjectId "[email protected]" -AssignedLicenses $newlicenceadd
		

Наша предыдущая команда выделяет лицензии ENTERPRISEPREMIUM нашему пользователю [email protected]:


Замечание

Необходимо устанавливать значение UsageLocation для тех пользователей, которые синхронизированы с AD локальной площадки перед выделением лицензий. Мы можем выполнить это при помощи Set-AzureADUser -ObjectId [email protected] -UsageLocation "US".

При помощи приводимой ниже команды мы имеем возможность удаления выделенных лицензий:


$licenseB = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licenseB.RemoveLicenses =  (Get-AzureADSubscribedSku | Where-Object {$_.SkuPartNumber -eq 'ENTERPRISEPREMIUM'}).SkuId
Set-AzureADUserLicense -ObjectId "[email protected]" -AssignedLicenses $licenseB
		

При помощи приведённых выше команд я создал некий сценарий для осуществления следующего:

  • Поиска всех пользователей, синхронизированных с AD локальной площадки.

  • Из этих пользователей выбрать тех пользователей, которые не обладают выделенными им лицензиями Azure AD.

  • Установить значение атрибута UsageLocation для выбранных пользователей.

  • Для выбранных пользователей назначить лицензии Azure AD.


#######Script to Assign Licences to Synced Users from On-Permises AD#############
Import-Module AzureAD
Connect-AzureAD
###Filter Synced Users who doesn't have licence assigned#######
$ADusers = Get-AzureADUser -All $true -Filter 'DirSyncEnabled eq true'
$notlicenced = Get-AzureADUser -All $true | Where-Object {$ADusers.AssignedLicenses -ne $null} | select ObjectId | Out-File -FilePath C:\users.txt
#####Set UsageLocation value to sync users#########
(Get-Content "C:\users.txt" | select-object -skip 3) | ForEach { Set-AzureADUser -ObjectId $_ -UsageLocation "US" }
#####Set User Licecnes############
$newlicence = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$newlicenceadd = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$newlicence.SkuId = (Get-
AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value "ENTERPRISEPREMIUM" -EQ).SkuId
$newlicenceadd.AddLicenses = $newlicence
(Get-Content "C:\users.txt" | select-object -skip 3) | ForEach { Set-AzureADUserLicense -ObjectId $_ -AssignedLicenses $newlicenceadd }
 	   

В некой гибридной среде пользователи в основном создаются через Active Directory локальной площадки, тем не менее, имеются ситуации, при которых нам требуется добавлять учётные записи только для облака. Как правило, они служат задачам управления облаком.

Воспользовавшись следующей командой, мы можем создать некого нового пользователя:


$Userpassword = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$Userpassword.Password = "London@1234"
New-AzureADUser -DisplayName "Andrew Xavier" -PasswordProfile $Userpassword -UserPrincipalName "[email protected]" -AccountEnabled $true -MailNickName "AndrewXavier"
		

В приводимой выше команде -PasswordProfile используется для определения значения пароля профиля для соответствующей учётной записи нового пользователя. -MailNickName определяет краткое имя в электронной почте данного пользователя. В нашем предыдущем примере добавлена учётная запись нового пользователя, [email protected] со значением пароля London@1234.

Применяя файлы CSV мы можем создавать множество учётных записей пользователей. В своём следующем примере для создания пользователей я пользуюсь неким файлом CSV. Это файл CSV содержит:


vfs.zfs.vdev.cache.size=<10M>UserPrincipalName, DisplayName,MailNickName
[email protected], Dishan Melroy,DishanMel
[email protected],Jack May,JackMay
[email protected],Richard Parker,RichardPar
 	   

Затем применяя приводимое ниже я могу создать этих новых пользователей::


$Userpassword = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$Userpassword.Password = "London@1234"
Import-Csv -Path C:\newuser.csv | foreach {New-AzureADUser -UserPrincipalName $_.UserPrincipalName -DisplayName $_.DisplayName -MailNickName $_.MailNickName -PasswordProfile $Userpassword -AccountEnabled $true}
		

При помощи приведённых выше команд я создал сценарий для выполнения следующего:

  • Создания новых учётных записей при помощи файла CSV

  • Установки UsageLocation для учётных записей новых пользователей

  • Назначения пользователям лицензий ENTERPRISEPREMIUM


########A Script to create new users and assign Azure AD licences#######
Import-Module AzureAD
Connect-AzureAD
###########Create New Users using CSV ###################
$Userpassword = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$Userpassword.Password = "London@1234"
Import-Csv -Path C:\newuser.csv | foreach {New-AzureADUser -UserPrincipalName $_.UserPrincipalName -DisplayName $_.DisplayName -MailNickName $_.MailNickName -PasswordProfile $Userpassword -UsageLocation "US" -AccountEnabled $true} | select ObjectId | Out-File -FilePath C:\users.txt
###########Assign Licences#################
$newlicence = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$newlicenceadd = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$newlicence.SkuId = (Get-AzureADSubscribedSku | Where-Object -Property SkuPartNumber -Value "ENTERPRISEPREMIUM" -EQ).SkuId
$newlicenceadd.AddLicenses = $newlicence
(Get-Content "C:\users.txt" | select-object -skip 3) | ForEach { Set-AzureADUserLicense -ObjectId $_ -AssignedLicenses $newlicenceadd }
 	   

Для удаления некого пользователя Azure AD мы можем воспользоваться следующим:


Remove-AzureADUser -ObjectId "[email protected]"
		

Воспользовавшись приводимой далее командой мы можем объединить это с поиском пользователя:


Get-AzureADUser -Filter "startswith(DisplayName,'Dishan')" | Remove-AzureADUser
		

Наша предыдущая команды выполнит поиск учётных записей пользователей, обладающих DisplayName, которое начинается с Dishan. Если таковые имеются, вторая часть команды удалит их.

Управление группами

Группы Azure AD также работают схожим с локальными для AD группами образом. Их можно применять для управления полномочиями действенным способом. В некой гибридной среде будут иметься группы, применяемые только в облаке, а также группы, синхронизируемые с окружением AD локальной площадки. В этом разделе мы намерены рассмотреть управление группой при помощи модуля Azure Active Directory PowerShell for Graph.

Давайте начнём с перечисления групп. Мы можем найти некую группу воспользовавшись такой командой:


Get-AzureADGroup -SearchString "sg"
		

В приводимой выше команде SearchString используется для задания критерия поиска. Наш предыдущий пример перечислит все группы, содержащие sg в поле DisplayName:

В получаемых результатах поиска мы можем обнаружить значения ObjectId для искомых групп. При наличии известных ObjectId мы имеем возможность просмотра сведений об этих группах при помощи такой команды:


Get-AzureADGroup -ObjectId 93291438-be19-472e-a1d6-9b178b7ac619 | fl
		

В некой гибридной среде будут иметься группы безопасности, которые были синхронизированы с Active Directory локальной площадки. Применяя следующее, мы способны отфильтровать такие группы:


Get-AzureADGroup -Filter 'DirSyncEnabled eq true' | select ObjectId,DisplayName,LastDirSyncTime
		

В своём предыдущем примере, значения колонки LastDirSyncTime отображают время самой последней синхронизации соответствующей группы.

При помощи приводимой ниже команды мы можем отфильтровать группы, имеющиеся только в облаке:


Get-AzureADGroup -All $true | where-Object {$_.OnPremisesSecurityIdentifier -eq $null}
		

В приведённой команде для фильтрации таких групп мы воспользовались значением атрибута OnPremisesSecurityIdentifier. Этот атрибут обладает значением если он синхронизирован с AD локальной площадки.

Применяя следующее мы способны просмотреть участников группы:


Get-AzureADGroupMember -ObjectId 2a11d5ee-8383-44d1-9fbd-85cb4dcc2d5a
		

В своей предыдущей команде мы воспользовались ObjectId для уникальной идентификации интересующей нас группы.

При помощи cmdlet Add-AzureADGroupMember

мы имеем возможность добавления участников в указываемую группу:

Add-AzureADGroupMember -ObjectId 2a11d5ee-8383-44d1-9fbd-85cb4dcc2d5a -RefObjectId a6aeced9-909e-4684-8712-d0f242451338
		

В нашей приведённой выше команде значение ObjectId представляет рассматриваемую группу, а значение RefObjectId представляет добавляемого пользователя.

При помощи приводимой далее команды мы можем удалять участника из указанной группы:


Remove-AzureADGroupMember -ObjectId 2a11d5ee-8383-44d1-9fbd-85cb4dcc2d5a -MemberId a6aeced9-909e-4684-8712-d0f242451338
		

В приводимой команде значение ObjectId представляет выбранную группу, а значение MemberId представляет ObjectId соответствующего пользователя.

Мы также можем сочетать cmdlet Add-AzureADGroupMember с cmdlet Get-AzureADUser для добавления в некую группу пачки пользователей.

В своём следующем сценарии я воспользовался cmdlet Get-AzureADUser для поиска пользователей в Marketing Department, а затем применил Add-AzureADGroupMember для добавления этих пользователей к Sales Group в качестве участников:


#######Script to Add Multiple users to Security Group#############
Import-Module AzureAD
Connect-AzureAD
##### Search for users in Marketing Department ##########
Get-AzureADUser -All $true -Filter "Department eq 'Marketing'" | select ObjectId | Out-File -FilePath C:\salesusers.txt
#####Add Users to Sales Group#########
(Get-Content "C:\salesusers.txt" | select-object -skip 3) | ForEach { Add-AzureADGroupMember -ObjectId f9f51d29-e093-4e57-ad79-2fc5ae3517db -RefObjectId $_ }
 	   

В некой гибридной среде группы безопасности в основном синхронизируются их AD локальной площадки. Однако могут иметься также и требования для групп, располагающихся исключительно в облаке. При помощи следующего мы имеем возможность создания группы только для облака:


New-AzureADGroup -DisplayName "REBELADMIN Sales Team" -MailEnabled $false -MailNickName "salesteam" -SecurityEnabled $true
		

Приводимый ниже снимок экрана отображает получаемый в нашей предыдущей команде вывод:

Наша предыдущая команда создала некую группу безопасности с названием REBELADMIN Sales Team. Эта группа не является группой с включённым доступом через электронную почту.

при помощи своей следующей команды мы способны удалять группу Azure AD:


Remove-AzureADGroup -ObjectId 7592b555-343d-4f73-a6f1-2270d7cf014f
		

В приведённой выше команде значение ObjectId определяет удаляемую группу.

Помимо групп безопасности Azure AD также обладает предварительно заданными административными ролями, которые можно применять для назначения полномочий доступа к Azure AD и прочим облачным службам. Существует более 35 предварительно определённых административных ролей. Каждая из ролей обладает своим собственным набором полномочий. Дополнительные сведения об этих ролях можно найти на https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles.

Воспользовавшись следующей командой мы имеем возможность перечисления всех имеющихся административных ролей:


Get-AzureADDirectoryRoleTemplate
		

По умолчанию включёнными являются лишь несколько административных ролей. Воспользовавшись приводимой ниже командой мы можем вывести список этих ролей:


Get-AzureADDirectoryRole
		
Замечание

Здесь роль каталога администратора компании представляет соответствующих глобальных администраторов Azure AD.

Воспользовавшись следующим мы способны включать необходимую административную роль:


Enable-AzureADDirectoryRole -RoleTemplateId e6d1a23a-da11-4be4-9570-befc86d067a7
		

В нашей предыдущей команде значение RoleTemplateId представляет нужную нам административную роль.

Мы способны назначать выбранную административную роль некому пользователю применяя такую команду:


Add-AzureADDirectoryRoleMember -ObjectId b63c1671-625a-4a80-8bae-6487423909ca -RefObjectId 581c7265-c8cc-493b-9686-771b2f10a77e
		

В приведённой команде значение ObjectId представляет необходимую административную роль. RefObjectId является значением идентификатора объекта соответствующего пользователя.

При помощи своей следующей команды мы можем перечислять участников интересующей нас административной роли:


Get-AzureADDirectoryRoleMember -ObjectId 36b9ac02-9dfc-402a-8d44-ba2d8995dc06
		

В приводимой команде ObjectId представляет рассматриваемую нами административную роль.

Воспользовавшись командой внизу, мы имеем возможность удалять некого участника из указанной роли:


Remove-AzureADDirectoryRoleMember -ObjectId 36b9ac02-9dfc-402a-8d44-ba2d8995dc06 -MemberId 165ebcb7-f07d-42d2-a52e-90f44e71e4a1
		

В предыдущей команде MemberId эквивалентен значению идентификатора объекта удаляемого пользователя.

Это обозначает окончание данного раздела. Имеется великое множество cmdlet которые всё ещё можно применять для управления Azure AD, но здесь я дал пояснения лишь для тех cmdlet, которые необходимы для повседневных операций.

скрипт — B-blog.info

скрипт — B-blog.info

19Jan

Written by Super User.

Добавление имен компьютеров, на которые пользователям разрешен вход — достаточно постоянная задача, причем частенько появляется необходимость добавить компьютер сразу всем пользователям домена.

Вот скрипт, который выполняет описанную задачу (причем скрипт не трогает пользователей, которым разрешен вход на все компьютеры):

23Jan

Written by Super User.

В Microsoft SQL Server 2005/2008/R2 усечение лога транзакций происходит совсем не так, как это было в 2000-й версии.

23Jan

Written by Super User.

Вот задачка…

Есть несколько доменов AD с именами типа domain1.domain.local, domain2.domain.local. В одном из доменов есть группа «Group», членами которой являются пользователи из других доменов, а также группы — тоже из разных доменов.

Надо посчитать, сколько пользователей из каждого домена находится в группе.

23Jan

Written by Super User.

Здравствуйте!

Продолжаю публикации скриптов. Сегодняшний наш пациент был разработан в процессе создания биллинга звонков. У каждого юзера в Active Direcotry есть поле, в котором прописан его внутренний номер телефона. Этот же номер фигурирует в биллинге, но нам конечно хочется видеть не что-то вроде «1316», а «Иванов Владислав Александрович». 

В сети полно примеров и скриптов, позволяющих достать пользователей из AD в csv-файл. По логике, мы можем потом взять этот csv и импортировать в MS SQL с помощью SSIS-скриптов. Однако это мне это не понравилось, т.к. на выходе у нас получается аж два скрипта, работающих на разных технологиях + один промежуточный файл. И это только для одного домена AD. А у меня их 14.

23Jan

Written by Super User.

Как и любые скрипты, необходимо иметь возможность запускать Powershell-сценарии не вручную, а по расписанию.

Например, в заметках, указанных внизу статьи (по Lync Server), так и необходимо делать.

Естественно, на помощь приходит планировщик задач Windows, однако как все-таки заставить запуститься файл *.ps1?

23Jan

Written by Super User.

Иногда, когда изучаешь софт, бывает необходимо найти некоторое значение в базе данных Microsoft SQL Server.

Вот вам скрипт, который выполняем в Query Editor над базой. В строчке «set @search_string = ‘what.you.are.searching.for’;» в кавычках пишем, что мы ищем.

23Jan

Written by Super User.

Обычно я генерирую пароли для пользователей, закрывая глаза и нажимая кнопки на клавиатуре. Сейчас уже это делать необязательно — генерировать можно скриптом на Powershell:

23Jan

Written by Super User.

Как упростить и сделать более наглядным взаимодействие с правами доступа на файлы и их наследованием? Воспользуйтесь популярным и полезным скриптом File System Security PowerShell Module. 

13May

Written by Super User.

Когда у вас есть сразу несколько серверов WSUS с центральным корневым, бывает очень проблематично получать отчеты об обновлениях рабочих станций.

Мне был нужен скрипт, который покажет, что на каких-то компьютерах есть не установленные одобренные обновления. Такой отчет есть в консоли WSUS, он называется Computer Tabular Status for Approved Updates

Но это достаточно трудоемкая задача, когда у вас 5-10-15 серверов.

 

19May

Written by Super User.

Неожиданно для меня, Veeam Backup & Replication начал выдавать ошибку создания резервных копий некоторых моих виртуальных машин. Как оказалось, проблема заключалась в том, что Veeam не мог запустить pre-freeze скрипт для остановки сервисов.

Дальнеший разбор полетов показал, что проблема заключалась в том, что UAC не давал прав на выполнение команд. Если запустить bat-файл под расширенными правами, остановка и старт служб отрабатывал без проблем.

 

22May

Written by Super User.

В одной моей задаче надо было написать скрипт для отправки SMS-сообщений. У нас уже был настроен сервер для отправки SMS на Linux. Оставалось только научиться отправлять команды в Linux через SSH.

Первоначально я пытался использовать модуль SSH-Session, но в нем были какие-то ошибки при отправке команд. Поэтому я остановился на Posh-SSH.

 

Устанавливаем модуль:

14Oct

Written by Super User.

Задача ясна из названия — надо удалить старые файлы из какой-нибудь папки. В жизни полно ситуаций, когда надо выполнять такую процедуру. Например — удаление старых бэкапов.

22Jan

Written by Super User.

Как известно, в Lync есть своя адресная книга, которая скачивается клиентами. По умолчанию, закачка или обновление адресной книги в клиентской программе происходит в первые 60 минут после запуска программы. В целом, в нашей компании это оказалось плохим решением, точно так же, как и тот факт, что измененные в Active Directory пользовательские данные попадают на конечные компьютеры с достаточно большой задержкой.

Последствия такого поведения:

16Feb

Written by Super User.

При апгрейде контроллеров домена или их удалении\добавлении, всегда появляется необходимость изменить DNS-сервера в настройках сетевых интерфейсов. Там, где сетевые настройки выдаются через DHCP — проблем нет. А там, где все настроено вручную, придется заходить на каждый сервер и менять руками. Это долго и неудобно.

23Mar

Written by Super User.

Иногда бывает нужно отпарсить какой-нибудь сайт или большую веб-страницу. Google предлагает множество программ и целых сложных комплексов для решения этой задачи, но я хочу показать, как это достаточно просто можно делать в Powershell.

В Powershell есть специальный коммандлет Invoke-WebRequest, который собственно и разбирает HTML-страницу на тэги и содержимое. На выходе этот коммандлет выдает объект страницы с полем ParsedHtml. К этому полю можно применять методы по выборке нужных данных.

Допустим, что вам нужно выбрать все ссылки на странице. Вот как это работает.

30Mar

Written by Super User.

В бесплатной версии Microsoft SQL Server — Express — нет возможности настроить резервное копирование баз данных по расписанию. Однако вы можете настроить бэкап с помощью Powershell-скриптов и планировщика задач Windows.

Ниже — пример скрипта, как это делаю я. Скрипт не удаляет старые бэкапы. Но почитайте мою статью Удаление старых файлов и папок на Powershell, она вам поможет. И еще — Запускаем Powershell-скрипты в планировщике задач.

Обратите внимание на выделенные строки — там надо прописать ваш путь к бэкапам и инстанс SQL-сервера.

05Jul

Written by Super User.

При тестировании отказоустойчивой конфигурации Microsoft SQL Server 2012 (подробнее: Пошаговое развертывание AlwaysOn — MS SQL 2012) мне нужно было сгенерировать массовую запись данных в базу.

Т.к. я совсем не знаю T-SQL, решил написать небольшой скрипт на Powershell для решения этой задачи.

Нам понадобится:

  • Непосредственно база данных
  • Таблица в ней для службных нужд

07Mar

Written by Super User.

Вот мой скрипт, который умеет удаленно перезагружать службы Windows с помощью Powershell. Скрипт умеет пинговать машины перед тем, как попытаться перегрузить службу.

Т.к. у нас заблокирован ICMP/ping между ландшафтами разработки, я использовал WMI-запросы, чтобы определить, запущена ли удаленная машина.

20Apr

Written by Super User.

Вот скрипт, который умеет искать сервера в вашем домене, на которых установлен Microsoft SQL Server.

Скрипт умеет обрабатывать выключенные\неотвечающие сервера с помощью пингов WMI, что полезно, когда ICMP по какой-то причине заблокирован. Кроме этого, тут используется Powershell Remoting, поэтому сначала удостоверьтесь, что он включен.

23Jun

Written by Super User.

Когда вы строите свою инфраструктуру в облаке Azure, используя IaaC (Infrastructure as a Code) подход, иногда вам придется некоторые ваши виртуалки переразворачивать. От этого никуда не денешься, учитывая, в общем-то, специфику облака: что-то не работает? — передеплой. И вот иногда бывает так, что сталкиваешься с проблей переразвертывания, когда парни из Microsoft обновляют образы для виртуалок новыми версиями систем. Например — SQL server 2014 уже не поставляется с SP1. В итоге вам надо как-то быстро найти список новых ID для образов, чтобы обновить свои ARM или Powershell-скрипты.

Я написал небольшой скрипт, который поможет в этом.

Как создать новых пользователей Active Directory с помощью PowerShell

Самый простой способ создать нового пользователя в домене Active Directory — использовать оснастку MMC «Пользователи и компьютеры Active Directory». Однако что, если вам нужно создать несколько учетных записей пользователей сразу или ADUC по какой-то причине недоступен? В этой статье мы объясним несколько способов создания учетных записей пользователей Active Directory с помощью PowerShell с помощью командлета New-ADUser .

Создание новых учетных записей пользователей с помощью командлета New-ADUser

Итак, какой командлет PowerShell используется для создания пользовательских объектов? Это командлет New-ADUser , который включен в модуль Active Directory PowerShell, встроенный в Microsoft Windows Server 2008R2 / 2012 и выше.Поэтому первое, что нам нужно сделать, это включить модуль AD:

 Импорт-модуль ActiveDirectory 

Теперь давайте подробнее рассмотрим командлет New-ADUser. Мы можем получить полный синтаксис, выполнив следующую команду:

 Get-Command New-ADUser –Syntax 

Зная синтаксис, добавлять пользователей в Active Directory легко:

 Новый-AD Пользователь Б.Джонсон 

Теперь давайте проверим, успешно ли добавлен пользователь, перечислив всех пользователей Active Directory с помощью следующего скрипта:

 Get-ADUser -Filter * -Properties samAccountName | выберите samAccountName 

Вот он, последний в списке!

Создать новую учетную запись пользователя Active Directory с паролем

Учетные записи создаются со следующими свойствами по умолчанию:

  • Учетная запись создана в контейнере «Пользователи».
  • Аккаунт отключен.
  • Учетная запись
  • является членом группы «Пользователи домена».
  • Пароль не установлен.
  • Пользователь должен сбросить пароль при первом входе в систему.

Следовательно, чтобы создать новую учетную запись, которая действительно может использоваться, нам необходимо включить ее с помощью командлета Enable-ADAccount и указать пароль с помощью командлета Set-ADAccountPassword .

Итак, давайте создадим новую учетную запись со следующими атрибутами:

  • Имя — Джек Робинсон
  • Имя — Джек
  • Фамилия — Робинсон
  • Имя учетной записи — J.Робинзон
  • Основное имя пользователя [email protected]
  • Адрес пути — «OU = Managers, DC = enterprise, DC = com»
  • Ввод пароля
  • Статус — Включено

Вот сценарий, который мы будем использовать:

 New-ADUser -Name "Jack Robinson" -GivenName "Jack" -Furname "Robinson" -SamAccountName "J.Robinson" -UserPrincipalName "[email protected]" -Path "OU = Managers, DC = enterprise, DC = com "-AccountPassword (Read-Host -AsSecureString" Входной пароль ") -Enabled $ true 

Параметр Read-Host попросит вас ввести новый пароль.Обратите внимание, что пароль должен соответствовать требованиям политики безопасности вашего домена к длине, сложности и истории.

Теперь давайте посмотрим на результаты, запустив следующий командлет:

 Get-ADUser J.Robinson -Properties CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet | Выберите CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet 
.

Массовое создание пользователей AD с помощью сценария PowerShell

Теперь давайте немного усложним нашу задачу и создадим десять одинаковых учетных записей Active Directory сразу, например, для ИТ-класса нашей компании, и установим пароль по умолчанию (P @ ssw0rd) для каждой из них.Чтобы отправить пароль по умолчанию в защищенном состоянии, мы должны использовать параметр ConvertTo-SecureString . Вот сценарий, который нужно использовать:

 $ path = "OU = IT, DC = enterprise, DC = com"
$ username = "ITclassuser"
$ count = 1..10
foreach ($ i в $ count)
{New-AdUser -Name $ username $ i -Path $ path -Enabled $ True -ChangePasswordAtLogon $ true `

-AccountPassword (ConvertTo-SecureString "P @ ssw0rd" -AsPlainText -force) -passThru} 

Теперь давайте сделаем наш скрипт более гибким, добавив параметр Read-Host , который будет запрашивать имя и количество пользователей:

 $ path = "OU = IT, DC = enterprise, DC = com"
$ username = Read-Host "Введите имя"
$ n = Read-Host "Введите номер"
$ count = 1.. $ n
foreach ($ i в $ count)
{New-AdUser -Name $ username $ i -Path $ path -Enabled $ True -ChangePasswordAtLogon $ true `

-AccountPassword (ConvertTo-SecureString "P @ ssw0rd" -AsPlainText -force) -passThru} 

Импорт пользователей AD из файла CSV

Другой вариант создания пользователей в AD — их импорт из файла CSV. Этот вариант отлично подходит, если у вас есть список пользователей с предопределенными личными данными, например:

  • Имя
  • Фамилия
  • Имя пользователя
  • Отделение
  • Пароль
  • OU

CSV-файл должен быть в кодировке UTF8 и содержать контактные данные, которые выглядят следующим образом:

Следующий скрипт создаст включенные пользовательские объекты для всех пользователей в CSV, у которых еще нет учетных записей в AD.Параметр «Сбросить пароль при следующем входе в систему» ​​будет включен для новых учетных записей, поэтому вы можете использовать пароль по умолчанию:

.
 # Введите путь к импортируемому CSV-файлу
$ ADUsers = Импорт-csv C: \ scripts \ newusers.csv

foreach ($ User в $ ADUsers)
{

$ Username = $ User.username
$ Password = $ User.password
$ Firstname = $ User.firstname
$ Lastname = $ User.lastname
$ Department = $ User.department
$ OU = $ User.ОУ

# Проверить, существует ли уже учетная запись пользователя в AD
если (Get-ADUser -F {SamAccountName -eq $ Username})
{
# Если пользователь существует, вывести предупреждающее сообщение
Запись-предупреждение «Учетная запись пользователя $ Username уже существует в Active Directory».
}
еще
{
# Если пользователя не существует, создайте новую учетную запись пользователя

#Account будет создан в OU, указанном в переменной $ OU в файле CSV; не забудьте изменить имя домена в переменной "-UserPrincipalName"
New-ADUser `
-SamAccountName $ Имя пользователя `
-UserPrincipalName "$ Имя пользователя @ yourdomain.com "`
-Name "$ Firstname $ Lastname" `
-GivenName $ Firstname `
-Фамилия $ Фамилия `
-Включено $ True `
-ChangePasswordAtLogon $ True `
-DisplayName "$ Lastname, $ Firstname" `
-Department $ Department `
-Path $ OU `
-AccountPassword (convertto-securestring $ Password -AsPlainText -Force)

}
}
 

После выполнения скрипта у нас появилось два новых пользователя, Эдвард Франклин и Билл Джексон, в нашем домене Active Directory:

Давайте посмотрим на их детали, снова запустив командлет Get-ADUser:

 Get-ADUser E.Франклин -Свойства CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet | Выберите CanonicalName, Enabled, GivenName, Surname, Name, UserPrincipalName, samAccountName, whenCreated, PasswordLastSet 
.

Заключение

Теперь вы знаете, как создавать пользователей в Active Directory с помощью сценариев PowerShell. Попробуйте самостоятельно создать учетные записи, создать массовые учетные записи и импортировать CSV-файлы в локальные или удаленные системы.Помните, что оснастка ADUC MMC отлично подходит для создания нескольких пользователей с расширенными атрибутами, но PowerShell намного лучше подходит для массового импорта большого количества учетных записей пользователей.

Джефф — бывший директор по разработке глобальных решений в Netwrix. Он давний блоггер Netwrix, спикер и ведущий.В блоге Netwrix Джефф делится лайфхаками, советами и приемами, которые могут значительно улучшить ваш опыт системного администрирования.

Создание пользователей Active Directory с помощью PowerShell

Вы устали открывать Active Directory (AD) Users and Computers (ADUC) , щелкать по сторонам, делать опечатки и выполнять действия по созданию новой учетной записи пользователя в шестой раз сегодня? Если это так, вам необходимо автоматизировать очень распространенный процесс использования Active Directory для добавления пользователя с помощью PowerShell с помощью командлета New-ADUser!

Обнаруживайте, сообщайте и предотвращайте небезопасные пароли учетных записей Active Directory в вашей среде с помощью совершенно бесплатного Password Auditor Pro от Specops.Загрузите его сегодня!

Вечер пятницы и час до того, как вы собираетесь домой на выходные. Это была напряженная неделя, поэтому вы решили посмотреть большую игру со своими ближайшими друзьями. Но ваш босс небрежно подходит и спрашивает: «Вы получили письмо? Сможете ли вы справиться с этим к концу дня? » Вы быстро открываете Microsoft Outlook, и, конечно же, это электронное письмо от отдела кадров, с которым вы отправляетесь с просьбой предоставить 400 новых учетных записей Active Directory (AD) для сотрудников перед тем, как покинуть офис.Большой. Игра идет.

Вы быстро ищите в Интернете некоторые варианты ускорения создания этих учетных записей пользователей и обнаруживаете, что вы можете автоматизировать подготовку учетных записей AD с помощью командной строки и командлета PowerShell под названием New-ADUser.

Обычно администраторы вручную создают учетные записи AD с помощью оснастки Active Directory Users and Computers MMC, установленной на вашем настольном компьютере с помощью средств удаленного администрирования сервера (RSAT). Но создание пользователя AD таким образом занимает в среднем три минуты на учетную запись пользователя.Создание учетных записей пользователей AD — не такая уж приятная работа, и ее уже давно можно автоматизировать.

Существует три распространенных способа, которыми администраторы создают объекты учетных записей пользователей AD с помощью командлета New-AdUser .

  1. Добавьте учетную запись пользователя Active Directory, используя необходимые и дополнительные параметры командлета.
  2. Скопируйте существующий объект пользователя AD, чтобы создать новую учетную запись, используя параметр Instance .
  3. Сопряжение командлета Import-Csv с командлетом New-ADUser для создания нескольких пользовательских объектов Active Directory с использованием файла значений, разделенных запятыми (CSV).

Эти методы иногда можно объединить вместе, чтобы создать более эффективное решение. Например, вы можете использовать все три варианта для создания шаблона учетной записи AD, которую можно скопировать с помощью файла CSV для создания нескольких новых учетных записей AD.

В этой статье вы узнаете, как использовать New-AdUser , используя каждый из этих методов.

Предпосылки / Требования

Прежде чем вы начнете использовать командлет New-AdUser , вам сначала нужно убедиться, что вы выполняете несколько предварительных требований.

  • Windows PowerShell 5.1
  • Установлен пакет средств удаленного администрирования сервера (RSAT). Этот пакет устанавливает модуль Active Directory PowerShell, который содержит командлет New-AdUser
  • Выполнен вход на компьютер Windows в том же домене, что и учетные записи пользователей, которые вы хотите создать.
  • Выполнен вход как учетная запись пользователя AD с разрешением на создать новые учетные записи пользователей

Если вы выполнили эти требования, все готово!

Создание учетной записи одного пользователя с помощью командлета New-ADUser

Давайте сначала создадим единую учетную запись пользователя, чтобы продемонстрировать, как New-ADUser работает на базовом уровне.Вы обнаружите, что New-ADUser не имеет многих обязательных параметров. Фактически, единственным обязательным параметром является параметр Name , но он редко используется отдельно.

Обычно для создания учетной записи пользователя используется множество различных параметров. К счастью, большинство параметров не требуют пояснений и хорошо согласуются с тем, что вы видите в ADUC. В приведенном ниже примере вы можете видеть, что вы легко можете использовать множество параметров. Каждый параметр примерно соответствует одному атрибуту учетной записи пользователя.

Обратите внимание, что в примере мы используем обратные кавычки.Это сделано только для предотвращения появления длинной единственной строки для удобства чтения.

  PS51> Новый ADUser `
    -Имя "Кевин Сапп" `
    -GivenName "Кевин" `
    -Фамилия "Сапп" `
    -SamAccountName "kesapp-test" `
    -AccountPassword (Read-Host -AsSecureString «Введите пароль пользователя») `
    -ChangePasswordAtLogon $ True `
    -Компания "Код Дуэт" `
    -Заголовок "Генеральный директор"
    -Государство "Калифорния" `
    -Город "Сан-Франциско"
    -Описание «Создание тестовой учетной записи» `
    -Номер сотрудника "45" `
    -Кафедра "Машиностроение"
    -DisplayName «Кевин Сапп (Тест)» `
    -Страна "нас"
    -PostalCode "940001" `
    -Включено $ True  

Организационная единица (OU), в которой содержится объект пользователя AD, не может иметь дубликата SamAccountName.

Теперь, когда учетная запись создана, подтвердите, что учетная запись была создана с помощью командлета Get-ADUser . Ниже вы можете видеть, что Get-AdUser возвращает некоторые общие атрибуты для только что созданной учетной записи пользователя.

  PS51> Get-ADUser -Identity kesapp-test -Properties State, Department, Country, City

DistinguishedName: CN = Кевин Сапп, CN = Пользователи, DC = mylab, DC = local
Включено: True
GivenName: Кевин
Имя: Кевин Сапп
ObjectClass: пользователь
ObjectGUID: 3b18338d-b3c7-4d00-a54a-1d3121e1363f
SamAccountName: kesapp-test
SID: S-1-5-21-1181311581-1397355964-1468337501-1109
Фамилия: Сапп
UserPrincipalName: [адрес электронной почты защищен]  

Копирование существующего пользовательского объекта AD

Другой метод создания учетной записи — скопировать существующий объект пользователя AD и использовать его в качестве шаблона для новой учетной записи AD.У этого подхода есть несколько преимуществ:

  • Это избавляет от необходимости указывать каждый параметр индивидуально.
  • Это помогает стандартизировать создание учетной записи AD.
  • Это предотвращает человеческую ошибку, вызванную созданием учетной записи вручную, и позволяет сотрудникам одной группы иметь одинаковые настраиваемые атрибуты AD.

В этом примере вы будете использовать только что созданную учетную запись в качестве шаблона ( kesapp-test ). Возможно, вам нужно создать новую учетную запись пользователя с теми же атрибутами состояние , местоположение , департамент , страна и город AD.Эта новая учетная запись будет для сотрудника Джеймса Брауна.

Обратите внимание, что у этого подхода есть ограничение, и только следующие свойства учетной записи AD, перечисленные в приведенной ниже ссылке, могут быть скопированы с помощью этого процесса. Для получения дополнительной информации посетите страницу Microsoft docs «Копирование свойств пользователя».

Первый шаг — найти учетную запись пользователя AD, которая будет использоваться в качестве шаблона, а также обеспечить предоставление всех копируемых атрибутов с помощью параметра Properties .Для этого используйте командлет Get-ADUser , как показано ниже. Это просто сохраняет объект пользователя AD в переменной $ template_account .

Обратите внимание, что во второй строке для свойства UserPrincipalName (UPN) объекта шаблона устанавливается значение $ null . Это рекомендуется для обеспечения уникальности имени участника-пользователя шаблона. У каждой учетной записи пользователя AD должен быть уникальный UPN.

  $ template_account = Get-ADUser -Identity kesapp-test -Properties State, Department, Country, City
$ template_account.UserPrincipalName = $ null  

После захвата учетной записи пользователя шаблона вы можете использовать этот объект в качестве значения для параметра Instance и предоставить любые пользовательские параметры для заполнения других атрибутов, как показано ниже.

  New-ADUser `
    -Экземпляр $ template_account `
    -Название Джеймс Браун
    -SamAccountName 'jbrown' '
    -AccountPassword (Read-Host -AsSecureString «Введите пароль пользователя») `
    -Включено $ True  

Теперь у вас должна быть учетная запись Джеймса со всеми разрешенными атрибутами AD, перенесенными из объекта шаблона.

Попадания в шаблон учетной записи пользователя

Одна из распространенных ошибок этого подхода — использование подстановочного знака * для параметра Properties при захвате объекта шаблона. Администраторы делают это, потому что хотят скопировать сразу все свойства учетной записи пользователя. Но это не работает.

Например, приведенная ниже команда выдаст ошибку:

  $ template_account = Get-ADUser -Identity kesapp-test -Properties *
New-ADUser `
    -Экземпляр $ template_account `
    -Название Джеймс Браун
    -SamAccountName 'jbrown' '
    -UserPrincipalName '[адрес электронной почты защищен]' `
    -AccountPassword (Read-Host -AsSecureString «Введите пароль пользователя») `
    -Включено $ True  

Проблема с этим подходом заключается в том, что атрибут UserPrincipalName должен быть уникальным в лесу AD.Следовательно, UPN следует перезаписать в команде New-ADUser или установить значение null в переменной шаблона (показано ниже).

  $ template_account.UserPrincipalName = $ null  

Другая причина того, что использование подстановочного знака не работает, заключается в том, что некоторые свойства AD, копируемые подстановочным знаком, доступны только для чтения (принадлежат диспетчеру учетных записей безопасности).

Ошибка разрешения при копировании объектов AD

Создание новых учетных записей пользователей с помощью файла CSV

Продвинуть то, что вы узнали, — это прочитать учетные записи сотрудников из файла CSV и использовать New-ADUser для создания учетных записей пользователей AD.

Это решение часто используется многими организациями для автоматизации создания учетных записей в сочетании с системами управления персоналом, которые создают плоские файлы с информацией о новых сотрудниках.

Допустим, вам отправили список новых сотрудников в виде CSV-файла. Каждая строка в файле CSV представляет собой одну строку и содержит следующие столбцы: Имя , Фамилия , Отдел , Штат , EmployeeID и Office . Соглашение об именовании для учетной записи пользователя — это первое начальное имя сотрудника, объединенное с фамилией, например ksapp для сотрудника Kevin Sapp .

  FirstName, LastName, Department, State, EmployeeID, Office, UserPrincipalName, SamAccountName, Password
Майкл, Джордан, НБА, Чикаго, 23, Чикаго Буллз, [защита электронной почты], mjordan, [защита электронной почты]
Леброн, Джеймс, НБА, Лос-Анджелес, 24, Лос-Анджелес Лейкерс, [адрес электронной почты защищен], ljames, [адрес электронной почты защищен]
Дуэйн, Уэйд, НБА, Майами, 13, Майами Хит, [защита электронной почты], dwade, [защита электронной почты]  
  $ import_users = Import-CSV -Path sample.csv  

Получив файл CSV, используйте Import-Csv для чтения файла CSV и записи каждой строки как одного объекта.Затем выполните итерацию по каждой из этих строк, передав соответствующие поля в CSV-файле ожидаемым параметрам New-ADUser . Вы можете увидеть пример этого ниже.

Найдите просочившиеся и небезопасные пароли в Active Directory, сверяясь со списком паролей NCSC.

  $ import_users | ForEach-Object {
    New-ADUser `
        -Name $ ($ _. FirstName + "" + $ _. LastName) `
        -GivenName $ _. FirstName `
        -Фамилия $ _.Фамилия `
        -Отдел $ _. Департамент`
        -State $ _. Состояние `
        -EmployeeID $ _. EmployeeID `
        -DisplayName $ ($ _. Имя + "" + $ _. Фамилия) `
        -Office $ _. Office `
        -UserPrincipalName $ _. UserPrincipalName `
        -SamAccountName $ _. SamAccountName `
        -AccountPassword $ (ConvertTo-SecureString $ _. Пароль -AsPlainText -Force) `
        -Включено $ True
}  

Сводка

В этом посте вы узнали, как создать новые учетные записи пользователей тремя разными способами:

  1. Создание одной учетной записи
  2. Копирование учетной записи пользователя из шаблона
  3. Создание нескольких учетных записей с помощью файла CSV

Это основные способы предоставления новых пользователей в вашей среде.Эти методы отлично работают, когда вы объединяете их вместе, создавая функцию и модуль PowerShell. Вы даже можете пойти дальше и создать свой собственный процесс автоматизации, используя базу данных SQL или Oracle в качестве источника (вместо файла CSV). Не стесняйтесь использовать каждый метод на основе ваших собственных уникальных требований и вариантов использования.

Надеюсь, эта информация спасет вас в крайнем случае! Вы узнали новый навык и смогли прийти на вечеринку с друзьями, не жертвуя балансом между работой и личной жизнью!

Дополнительная литература

New-ADUser: массовое создание пользователей AD с помощью PowerShell

Самый простой способ создать новый объект пользователя в домене Active Directory — использовать графическую оснастку MMC ADUC (Active Directory Users and Computers).Но если вам нужно создать несколько учетных записей пользователей в домене, выполнение этого вручную может оказаться утомительной задачей для администратора. В этой статье мы рассмотрим пример автоматизации создания учетных записей пользователей в AD с помощью командлета New-ADUser PowerShell.

Содержание:

  • Использование командлета New-ADUser для создания новой учетной записи пользователя Active Directory
  • Массовое создание пользователей AD из файла CVS с помощью сценария PowerShell

Использование командлета New-ADUser для создания новой учетной записи пользователя Active Directory

Командлет New-ADUser является частью модуля Active Directory для PowerShell.Чтобы использовать этот модуль, необходимо установить версию RSAT, соответствующую версии вашей ОС, и включить модуль Active Directory для компонента Windows PowerShell .

Чтобы импортировать модуль в сеанс PowerShell, выполните эту команду:

Import-Module activedirectory

Вы можете получить полный синтаксис командлета New-ADUser, используя команду:

Get-Command New-ADUser –Syntax

В минимальной версии для создания новой учетной записи достаточно указать только имя пользователя AD:
New-ADUser testuser1

Как видите, новая учетная запись пользователя была создана в контейнере по умолчанию Пользователи и отключена.Чтобы использовать эту учетную запись, необходимо включить ее (командлет Enable-ADAccount), установить ее пароль (командлет Set-ADAccountPassword) и / или другие атрибуты (при необходимости).

Чтобы создать полнофункциональную учетную запись пользователя в конкретном контейнере AD домена (OU) с паролем и немедленно включить объект пользователя, используйте эту команду:

New-ADUser -Name "Albert Schmidt" -GivenName "Albert" -Furname "Schmidt" -SamAccountName "a.schmidt" -UserPrincipalName "[email protected]" -Path "OU = Users, OU = Accounts OU = Berlin, OU = DE, DC = woshub, DC = com "-AccountPassword (Read-Host -AsSecureString" Входной пароль ") -Enabled $ true

Команда предложит вам сразу установить пароль (защищенный) для нового пользователя.

Примечание . Пароль пользователя должен соответствовать политике безопасности паролей домена по длине, сложности и т. Д., Иначе командлет вернет ошибку: New-ADUser: пароль не соответствует требованиям домена по длине, сложности или истории.

Получить информацию о созданном объекте пользователя домена можно с помощью командлета Get-ADUser:

Get-ADUser a.schmidt

Массовое создание пользователей AD из файла CVS с помощью сценария PowerShell

Если вам нужно создать несколько пользователей Active Directory одновременно, проще сохранить список пользователей в формате файла CSV (Excel), а затем запустить специальный сценарий PowerShell.В этом файле вы должны заполнить все важные атрибуты пользователя.

Например, мой файл Excel пользователей состоит из 8 столбцов и имеет следующий формат заголовка:

Имя; Фамилия; SamAccountName; Телефон; Отдел; Название работы; Пароль; OU

Введите данные пользователя и сохраните файл Excel в формате CSV с запятыми в качестве разделительного символа. Кодировка должна быть UTF-8 (это важно!). Значения столбца OU содержат запятые, поэтому необходимо использовать двойные кавычки.

Теперь вы можете импортировать этот CSV-файл (create_new_ad_users.csv) и создавать новых пользователей в домене AD. Код готового скрипта PowerShell показан ниже:

Примечание. Если вы используете «; »в качестве разделительного символа в вашем CSV-файле, добавьте -delimiter«; » аргумент вашего командлета Import-CSV.



Import-Module activedirectory
Import-CSV "C: \ ps \ create_new_ad_users.csv" | ForEach-Object {
$ upn = $ _.SamAccountName + «@ woshub.com»
$ uname = $ _. LastName + "" + $ _. FirstName
New-ADUser -Name $ uname `
-DisplayName $ uname`
-GivenName $ _. FirstName `
-Furname $ _. LastName `
-OfficePhone $ _. Phone`
-Department $ _. Department `
-Title $ _. JobTitle`
-UserPrincipalName $ upn `
-SamAccountName $ _. SamAccountName`
-Path $ _. OU. `
-AccountPassword (ConvertTo-SecureString $ _. Password -AsPlainText -force) -Enabled $ true
}

После запуска сценария откройте консоль ADUC, разверните указанный контейнер AD и убедитесь, что в AD появились новые учетные записи пользователей.(Вы можете отслеживать создание учетной записи пользователя в учетных записях AD следующим образом: Получить учетные записи Active Directory, созданные за последние X часов / дней.)

Вы можете добавить созданные учетные записи в определенную группу AD с помощью командлета Add-AdGroupMember. Для этого измените скрипт, добавив эту строку в цикл For-Each:

Add-AdGroupMember -Identity AllowInternetAccess-Members $ _. SamAccountName

Или вы можете настроить фотографию пользователя в AD для отображения в Outlook и Lync с помощью командлета Set-ADUser:

Set-ADUser $ _.samAccountName -Replace @ {thumbnailPhoto = ([byte []] (Get-Content "C: \ ps \ l.wolf.jpg" -Байт кодирования))}

Добавление пользователей в Active Directory с помощью PowerShell

Всем хорошие новости! Знаете ли вы, что добавлять пользователей в Active Directory с помощью PowerShell очень просто? Ага, не шучу. Это действительно очень просто.

Предварительные требования для использования Active Directory с PowerShell

Поскольку теперь у нас есть домен лабораторного тестирования, нам нужно будет заполнить его пользователями.

К счастью, добавить учетные записи пользователей в Active Directory с помощью PowerShell очень просто. Даже такие подражатели сумасшедшего ученого, как я, могут взяться за эту проблему в лоб.

Прежде всего, мы должны убедиться, что выполняем все требования для использования Active Directory с PowerShell.

Убедитесь, что у вас есть следующее:

  • Active Directory

  • Инструменты удаленного администрирования сервера (RSAT для Windows 10)

  • PowerShell (включен и прогрет)

  • Список пользователей для импорта Active Directory

  • Кофе (или другой напиток по вашему выбору)

Давайте погрузимся!

Добавление пользователей в Active Directory с помощью PowerShell

Во-первых, давайте посмотрим, какие команды доступны для Active Directory с помощью PowerShell.Я собираюсь сузить его до всех командлетов Active Directory, которые начинаются со слова New- (поскольку мы хотим создавать новых пользователей):

На основе результатов я думаю, что New-ADUser будет звездой нашего блога. Посмотрим, какие параметры доступны.

В более новых версиях PowerShell в Windows 10 и более поздних версиях модуль PSReadLine устанавливается и импортируется по умолчанию, поэтому я могу ввести следующее, чтобы увидеть параметры New-ADUser :

  New-ADUser -  

(Затем вы можете нажать Ctrl + Пробел , чтобы увидеть всплывающий список, как на скриншоте ниже.)

Глядя на доступные параметры, у нас должно быть более чем много работы. (Определенно, слишком много, чтобы рассказать об этом в этом блоге!)

Начиная с малого

Начинать с малого кажется разумным выбором. Если мы сможем заставить его работать с помощью простого примера, мы можем начать добавлять все больше и больше опций по своему усмотрению.

Давайте просто попробуем создать пользователя с помощью:

  New-AdUser -Name Test  

Нет новостей — это хорошие новости. Команда, похоже, завершилась без ошибок, так что давайте проверим наш новый объект пользователя в Active Directory.

Похоже, что учетная запись была создана успешно, но есть несколько моментов, которые следует отметить о вновь созданной учетной записи:

  • По умолчанию пароль не установлен

  • Не включен (поскольку нет пароля)

  • Нет базовая информация (например, имена или информация о пользователе)

  • Атрибуты не определены

  • Расположение OU по умолчанию (обычно это OU Users по умолчанию)

Похоже, что по очистке больше работы, чем она того стоит.Итак, давайте продолжим.

Более сложный пример

Давайте немного улучшим нашу игру, определив несколько дополнительных полей и предоставив временный пароль для нашей учетной записи с помощью ConvertTo-SecureString .

Поскольку я собираюсь предоставить множество параметров, я собираюсь использовать технику, известную как сплаттинг.

  $ Атрибуты = @ {

   Включено = $ true
   ChangePasswordAtLogon = $ true

   UserPrincipalName = "[адрес электронной почты защищен]"
   Name = "Test.Guy"
   GivenName = "Тест"
   Фамилия = "Парень"
   DisplayName = "Test Guy III"
   Description = "Это аккаунт третьего тестировщика."
   Офис = "Нет офиса для тестировщика".

   Компания = "PDQ.com"
   Департамент = "ИТ"
   Title = "Какой-то парень"
   City = "Солт-Лейк-Сити"
   State = "Юта"

   AccountPassword = "TotallyFakePassword123" | ConvertTo-SecureString -AsPlainText -Force

}

New-ADUser @Attributes  

И снова отсутствие новостей — это хорошие новости. Как упоминалось выше, @Attributes использует метод, известный как сплаттинг, который использует хеш-таблицу для передачи именованных параметров. Наша переменная $ Attributes определяется как хеш-таблица в этом примере.

Мы можем проверить, что наш пользователь действительно создан:

Добавление пользователей в Active Directory с помощью файла .csv

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

Кроме того, я хотел бы указать подразделение, в котором я хотел бы разместить учетные записи.

Нам нужно сопоставить наши поля из нашего файла .csv с полями в Active Directory.

Вот как выглядит наш список пользователей:

Судя по приведенному выше снимку экрана, у нас меньше данных, чем для нашей учетной записи Test Guy.Итак, мы не собираемся использовать все те поля, которые мы использовали в последнем примере.

Кроме того, некоторые столбцы в нашем файле .csv немного отличаются от того, что ожидает Active Directory, поэтому нам необходимо убедиться, что они правильно сопоставлены в нашем сценарии PowerShell.

Итак, вот последний пример импорта csv (Import-CSV), интеграции цикла и файла .csv. (Обратите внимание, что если вы указываете другое подразделение, вам необходимо использовать атрибут DistinguishedName.

  $ UserList = Import-Csv -Path 'C: \ temp \ user list.csv '

foreach ($ User в $ UserList) {

     $ Attributes = @ {

        Включено = $ true
        ChangePasswordAtLogon = $ true
        Путь = "OU = Пользователи Futurama, DC = pdqlabs, DC = org"

        Name = "$ ($ User.First) $ ($ User.Last)"
        UserPrincipalName = "$ ($ User.First). $ ($ User.Last) @ pdqlabs.org"
        SamAccountName = "$ ($ User.First). $ ($ User.Last)"

        GivenName = $ User.First
        Фамилия = $ User.Last

        Компания = $ User.Company
        Отдел = $ User.Department
        Заголовок = $ User.Заголовок
        AccountPassword = "TotallyFakePassword123" | ConvertTo-SecureString -AsPlainText -Force

     }

    New-ADUser @ Атрибуты
  

Как видите, я использую имя и фамилию в файле .csv для создания значений Name , UserPrincipalName и SamAccountName . Синтаксис $ () предназначен для подвыражений, дополнительную информацию можно найти в этом блоге.

В любом случае, давайте проверим, что наши аккаунты были созданы.

Все в порядке! Наша лаборатория готова к работе с новыми модными пользователями.

Заключение

Сегодня все было о простом, без излишеств, импорте пользователей в Active Directory. Возможно, в ближайшем будущем мы рассмотрим более сложный пример.

А пока, удачного PowerShell!

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

Основы AD PowerShell 1: New-ADUser

В этой небольшой серии я хочу познакомить вас с наиболее распространенными командлетами Active Directory PowerShell, такими как New-ADUser.

С помощью командлета New-ADUser вы можете:
— создавать новых пользователей,
— добавлять пароли или
— массово создавать пользователей с помощью файла csv

Основы AD PowerShell

Я создал серию «Основы AD PowerShell», чтобы показать вам, как использовать основные команды PowerShell — и как получить большой объем информации из или в Active Directory с минимальными усилиями и небольшим скриптом. Будут представлены следующие командлеты:

New-ADUser
Get-ADUser
Set-ADUser
New-ADGroup, Get-ADGroup, Set-ADGroup

Командлет New-ADUser

В этой первой статье я хочу объяснить, что вы можете делать с помощью командлета New-ADUser.Как правило, командлет используется для создания новых пользовательских объектов в Active Directory. Для использования команды необходимо знать sAMAccountName пользователя, который будет создан. А это могло выглядеть так:

New-ADUser -Name Mike.Miller

New-ADUser -Name Mike.Miller

Если вы запустите эту строку в PowerShell, пользователь с sAMAccountname и cn (обычное имя) «Mike.Миллера ». Убедитесь, что вы установили инструменты AD.

В учетной записи задана только эта информация (sAMAcountname, cn):

  • Нет Имя или Фамилия ,
  • Нет атрибутов заполнено
  • Без пароля установить
  • Пользователь создан как «отключен» пользователь

И учетная запись пользователя будет создана в «Стандартном» пользовательском контейнере. Но в большинстве случаев мы не хотим, чтобы он там оставался.

Добавить имя, фамилию и целевой OU

Имеет смысл добавить дополнительную информацию. Как объяснялось ранее, это не обязательно, но если вы действительно хотите работать с пользовательским объектом в Active Directory, это как-то важно. Вы можете добавить, например, следующие параметры:

New-ADUser -Name Mike.Miller -GivenName Mike -Surname Miller -Path «OU = Testuser, DC = Company, DC = Com»

New-ADUser -Name Mike.Миллер -GivenName Mike -Furname Miller -Path «OU = Testuser, DC = Company, DC = Com»

В этой строке вы можете установить имя, фамилию и подразделение учетной записи пользователя. И вы можете установить почти все остальные атрибуты, чтобы указать пользователя таким образом. Есть всего несколько исключений.

Добавить пароль

Создание пользователей с помощью New-ADUser становится немного сложнее, когда дело доходит до добавления пароля. Но установка пароля имеет несколько преимуществ:

  1. Вам не нужно снова менять учетную запись.
    Установка пароля в процессе создания сэкономит вам много времени.
  1. Учетная запись будет создана как «включенная». Если вы создадите ее с паролем,

Поскольку только соответствующий пользователь должен знать свой собственный пароль, вы также должны заставить его изменить его после первого входа в систему.

Изменить пароль при первом входе в систему

К сожалению, New-ADUser не позволяет вам установить значение типа «Start12345» для параметра –AccountPassword. В этом случае вы должны установить его как Secure String .

Есть способ обойти это легко. Определите переменную со «значением пароля» и преобразуйте ее в защищенную строку . Это может выглядеть так:

$ password = «Start12345» | ConvertTo-SecureString -AsPlainText -Force New-ADUser -Name Mike.Miller -GivenName Mike -Surname Miller -Path «OU = Testuser, DC = Company, DC = Com» -AccountPassword $ Password -ChangePasswordAtLogon $ True -Enabled $ True

$ пароль = «Start12345» | ConvertTo-SecureString -AsPlainText -Force

New-ADUser -Name Mike.Миллер -GivenName Mike -Surname Miller -Path «OU = Testuser, DC = Company, DC = Com» -AccountPassword $ Password -ChangePasswordAtLogon $ True -Enabled $ True

Nun haben Sie einen Account, der vom Benutzer direkt verwendet werden kann.
Dabei ist sichergestellt, dass er das Kennwort beim ersten Войти neu vergeben muss.

Теперь у вас есть учетная запись, которую может использовать непосредственно пользователь. И гарантируется, что он установил новый пароль при первом входе в систему.

Массовый импорт пользователей с помощью New-ADUser

Пока все хорошо. Если вы сравните то, что мы сделали, с созданием пользователя в консоли Active Directory Users and Computers, PowerShell не покажется таким удобным.

НО, PowerShell и New-ADUser действительно становятся мощными, когда дело доходит до создания нескольких сотен учетных записей пользователей одновременно. Вам достаточно , один входной файл со всей необходимой информацией.

Я предлагаю CSV-файл , разделенный точкой с запятой, , так как это европейский стандарт.
US, вероятно, следует использовать , разделенные запятыми, CVS, чтобы избежать странного поведения Excel при его повторном открытии.
Создайте электронную таблицу Excel со столбцами для имени, имени, фамилии и т. Д. И сохраните ее в формате файла CSV.

CSV-файл для массового импорта пользователей может выглядеть так:

В этом примере я также добавил отдел, в котором работают пользователи. И на этот раз я не заботился об OU, потому что я хочу, чтобы все они были в одном OU.В начале будет установлено OU «Testuser». Конечно, вы также можете добавить OU для каждого пользователя, например, если у вас есть отдельные OU для каждого отдела.

Теперь вам просто нужно добавить еще немного кода к строкам, которые мы только что написали, и он запустит создание пользователя для каждой строки вашего файла CSV:

$ Import = Import-CSV «c: \ Test \ import.csv» $ OU = «OU = Testuser, DC = Company, DC = Com» Foreach ($ user в $ Import) { $ пароль = $ пользователь.Пароль | ConvertTo-SecureString -AsPlainText -Force New-ADUser -Name $ user.Name -GivenName $ user.FirstName -Surname $ user.LastName -Path $ OU -AccountPassword $ Password -ChangePasswordAtLogon $ True -Enabled $ True }

$ Import = Import-CSV «c: \ Test \ import.csv»

$ OU = «OU = Testuser, DC = Company, DC = Com»

Foreach ($ user в $ Import)

{

$ пароль = $ пользователь.Пароль | ConvertTo-SecureString -AsPlainText -Force

New-ADUser -Name $ user.Name -GivenName $ user.FirstName -Surname $ user.LastName -Path $ OU -AccountPassword $ Password -ChangePasswordAtLogon $ True

000

000

000 True -Enabled $

000 }

Что делает сценарий?

  1. Импортирует файл CSV.
  2. Устанавливает стандартный OU
  3. Вызывает каждую запись данных (строка вашего CSV), записывает пароль и создает учетную запись пользователя

Мы используем цикл «По каждому», который загружает каждую запись пользователя с ее параметрами из файла CSV.

Заключение

Создание пользователей с помощью командлета PowerShell New-ADUser очень эффективно и экономит время, когда дело доходит до (повторяющегося) создания множества пользователей одновременно.

Ищете специалистов для работы с Active Directory , оптимизации или миграции?
Мы будем рады поддержать вас — Свяжитесь с нами, если вы хотите узнать больше.

Это вам помогло? Поделитесь или оставьте комментарий:

Статья создана: 26.04.2016

Массовое создание пользователей AD с помощью Powershell из CSV — Знакомство с ИТ

Введение

Если вы хотите автоматизировать создание пользователей в Active Directory, один из лучших способов сделать это — использовать Powershell и CSV. В этом посте я покажу вам, как массово создавать пользователей AD с помощью Powershell из файла CSV.

Для этого нам понадобятся две вещи:

  • файл CSV, предварительно отформатированный с обязательными полями
  • сценарий Powershell.

Оба файла, которые я буду использовать здесь, вы можете найти в конце этого сообщения.

Итак, давайте…

Создание пользователей AD с помощью Powershell из CSV

Во-первых, откройте файл CSV. Выглядит это так:

 Имя; Фамилия; SAM; OU; Пароль; MailDomain; Описание
TestUser1 ;; TestUser1; CN = Пользователи, DC = домен, DC = local; P @ ssw0rd; domain.local;
TestUser2 ;; TestUser2; CN = Пользователи, DC = домен, DC = local; P @ ssw0rd; domain.local;
TestUser3 ;; TestUser3; CN = Пользователи, DC = домен, DC = local; P @ ssw0rd; domain.local;
 

Обратите внимание, что поля разделены знаком «;» потому что AD DN (отличительное имя) разделено запятыми.Каждая строка заканчивается знаком «;» по простой причине: это поле «Описание», и я не добавлял описания ни для одного из пользователей. Также обратите внимание, что во всех строках у меня есть два «;» последовал. Здесь вы вставляете фамилию пользователя. Поскольку у меня их нет, оставлю поле пустым.

Измените CSV в соответствии с вашими потребностями и откройте сценарий в PowerShell ISE, как показано ниже:

Измените путь, чтобы он соответствовал пути, в котором вы сохранили файл CSV, и запустите его!

Результат будет следующим:

На самом деле, даже если пользователи не созданы успешно, сценарий всегда будет выводить, что пользователи созданы, потому что в нем нет контроля ошибок вообще.Я сделал это только для того, чтобы после завершения сценария не было пустого экрана. Если вы получите ошибки, вы увидите несколько красивых красных линий. — текстовый файл. Переименуйте его в .ps1)

Как всегда, если вы нашли эту статью полезной, поделитесь ею с друзьями.

Если у вас есть вопросы или предложения, оставьте свой комментарий.

Спасибо за внимание!

Использование PowerShell для копирования пользователей Active Directory — Microsoft Certified Professional Magazine Online

Практическое руководство по PowerShell

Использование PowerShell для копирования пользователей Active Directory

  • Автор Адам Бертрам
  • 12/03/2018

Создавать пользователей Active Directory с нуля — не всегда лучшая идея. Скорее всего, у вашей компании есть стандартный «шаблон» атрибутов, который задается для каждого пользователя домена.Если да, то почему вы все еще создаете каждую вручную? Давайте ускорим этот процесс, создав копии существующих пользователей с помощью PowerShell!

Прежде всего, я предполагаю, что у вас уже есть настроенный пользователь шаблона. Это учетная запись пользователя, имеющая все стандартные атрибуты, которые вы обычно определяете. После создания этого пользователя вы сможете делать копии этой учетной записи для создания других.

Я также предполагаю, что вы собираетесь запускать этот код PowerShell на компьютере, присоединенном к домену, и входить в систему с правами для создания новых пользователей.Если это так, вам понадобится модуль ActiveDirectory PowerShell. Этот модуль доступен в составе программного пакета инструментов удаленного администрирования сервера.

Discovery Work
После того, как вы загрузили и установили модуль ActiveDirectory, вы можете использовать командлет Get-AdUser для проверки всех атрибутов, которые вы определили для своего пользователя шаблона. Для этой статьи я создал пользователя ctemplate для шаблона компании.»Мы можем использовать параметр Properties, указав звездочку, чтобы найти все свойства.

 Get-ADUser ctemplate -Свойства * 

После просмотра всех атрибутов, определенных в шаблоне пользователя, вы можете назначить эту учетную запись пользователя переменной. Это дает нам возможность передать этот объект учетной записи пользователя при создании нового пользователя.

 $ user = Get-ADUser ctemplate -Properties * 

Создание нового пользователя
После того, как учетная запись пользователя была записана в переменную, мы можем использовать командлет New-AdUser, передав ему переменную $ user в параметр Instance и затем определяя любые атрибуты, специфичные для этой отдельной учетной записи.Поскольку вы, вероятно, не назначили имя пользователю шаблона, так как все имена разные, вы можете указать здесь любые конкретные атрибуты. Ниже я устанавливаю все атрибуты из моего пользователя шаблона, но делаю имя Адам Бертрам.

 New-ADUser -Name 'Adam Bertram' -Instance $ user 

Ваш новый пользователь должен быть создан сейчас! Однако не все атрибуты переносятся. Мы можем сравнить, какие атрибуты были скопированы или нет, получив пользователя шаблона и нового пользователя вместе со всеми атрибутами с помощью параметра Properties.

 $ templateUser = Get-ADUser ctemplate -Свойства *
$ newUser = Get-ADUser 'Adam Bertram' -Properties * 

Когда у нас есть оба объекта, присвоенные переменным, мы можем затем прочитать свойства каждого объекта и сравнить их друг с другом. Ниже приведен один из способов сделать это. Это покажет вам каждое свойство нового пользователя, которое не соответствует пользователю шаблона. На основе этой информации вы можете составить список дел, если хотите добавить в этот скрипт больше функций.

 foreach ($ property в $ newUser.PSObject.Properties) {
    $ matchingTemplateUserProperty = $ templateUser.PSObject.Properties | Where-Object {$ _. Name -eq $ property.Name}
    if ($ matchingTemplateUserProperty.Value -ne $ property.Value) {
        Write-Host «Атрибут [$ ($ property.Name) отличается]»
    }
} 

Создание пользователей Active Directory — обычная задача. Если вы все еще создаете пользователей вручную, вы теряете много времени. Создайте их с помощью PowerShell, скопировав сюда существующие учетные записи или даже создав их с нуля с помощью командлета New-Aduser.Вы не только сэкономите массу времени, но и исключите человеческий фактор!


Об авторе

Адам Бертрам — ветеран ИТ с 20-летним стажем. Он инженер по автоматизации, блогер, консультант, писатель-фрилансер, автор курсов Pluralsight и советник по контент-маркетингу в нескольких технологических компаниях. Адам также основал популярную платформу электронного обучения TechSnips. В основном он специализируется на DevOps, технологиях системного управления и автоматизации, а также на различных облачных платформах, в основном в пространстве Microsoft.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *