
В начале списка будут самые незначительные изменения которые призваны сделать ежедневное использование данного продукта комфортнее для администратора:
- Окну редактора PowerShell теперь можно изменять размеры, сомнительное достижение, но теперь окно можно развернуть на весь экран;
Давайте сравним:
PowerShell 2.0
PowerShell 5.1
- Следующее явное отличие которое видно на скриншотах это подсветка синтаксиса — вот это уже очень большой плюс;
- За ним следует еще одно нововведение — отныне и впредь должны поддерживаться модули и командлеты разных версий;
Данный пример лучше рассмотреть на скриншотах:
PowerShell 2.0
PowerShell 5.1
Как видно из скриншота появилась новая команда, которая, так же, как и более известная ранее Update-Help для обновления справки, служит для обновления версий модулей Update-Module.
- Появились классы, на эту тему есть отдельная статья;
- Возросла скорость работы с com объектами.
Про последний пункт хотелось бы поговорить отдельно. Размер Active Directory в организациях разный, были случаи, когда это было 20-60 пользователей, а были и когда больше нескольких десятков тысяч и если в первом случае можно обойтись только графическим интерфейсом, то во втором это сделать можно, но довольно сложно. Мало кто из администраторов представляет себе Active Directory как объемную по информации базу данных из которой можно получать необходимые для работы данные в считанные минуты применяя к этому правильный подход.
Немного рекламы
Образ Windows Server 2016 только вчера появился для загрузки в каталоге партнеров Microsoft, а уже сегодня можно ознакомиться со всеми его возможностями всего за 250 рублей на vpsville.
Лирическое отступление...
Microsoft изначально преподносила Active Directory как инструмент не только для системных администраторов, но и для сотрудников отдела кадров. Первые должны содержать все в рабочем состоянии с точки зрения серверной и программной архитектуры, вторые в свою очередь отвечать за корректное заполнение каталога. Поэтому как принято понимать из всех источников, из которых можно почерпнуть информацию по этому вопросу, администратор не должен заводить учетные записи пользователей, да и группы создавать по идеологии Active Directory тоже, но в наших суровых Российских реалиях все немного совсем не так.
Вместо технического задания.
Давайте представим, что мы работаем не в самой маленькой организации и имеем под контролем несколько контроллеров домена в филиалах, разбросанных по всей нашей необъятной родине, соответственно количество сотрудников у нас для примера будет не менее одной тысячи человек. Вспомним что страна у нас разбита на много часовых поясов и когда некоторые только приходят на работу другие уже идут спать, поэтому модель управления Active Directory у нас будет частично централизованная, что подразумевает под собой наличие администраторов в регионах, а не только в центральном офисе. Так же у нас есть внутренняя техническая документация с требованиями ведения Active Directory, чтобы все было едино и удобно мы же помним, что это крутая база данных, а не тяп ляп.
И так у нас есть знания и задание, которое необходимо решить, давайте именно этим и займемся.
В связи с тем, что согласно нашего технического задания данные у нас очень хорошо структурированы мы можем к ним обращаться, используя стандартные запросы, одним из таких примеров может послужить справочник сотрудников, который используется на каждом предприятии.
Вот так это выглядит на PowerShell:
Get-ADUser -Filter * -SearchBase "OU=Users,OU=Main Office,DC=MyCompany,DC=ru" -Server 'Domain Controller Name' -Properties displayName, description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager |
Select displayName, description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager |
Export-CSV "C:\Export\MainOffice.csv" -NoType -UseCulture -Encoding Unicode
Комментарии к коду
Get-ADUser — командлет который получает массив пользователей из области поиска (-SearchBase) с свойствами указанными через запятую после параметра -Properties;
Export-CSV — экспортирует данный массив в файл.
Export-CSV — экспортирует данный массив в файл.
В итоге мы получаем готовую таблицу с необходимыми полями: Ф.И.О., Номер кабинета, Номер телефона, Адрес почты, Должность, Наименование отдела, Наименование филиала, Ф.И.О. Руководителя данного сотрудника. Данный скрипт работает несколько секунд и позволяет нам изменив всего
$Template_Excel = "C:\PS\Шаблон.xlsx"
$SaveAs = "C:\PS\ЗаполненыйШаблон.xlsx"
$AllExcel = @(Get-Process [e]xcel | %{$_.Id})
$MyExcel = New-Object -ComObject Excel.Application
$ExcelId = Get-Process excel | %{$_.Id} | Where {$AllExcel -notcontains $_}
$MyExcel.Visible = $False
$WorkBook = $MyExcel.workbooks.open($Template_Excel)
$WorkSheet = $WorkBook.sheets.item("Шаблон")
$Users = Get-ADUser -Filter * -SearchBase "OU=Users,OU=Main Office,DC=MyCompany,DC=ru" -Server 'Domain Controller Name' -Properties displayName,
description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager |
Select sAMAccountName, displayName, description, physicalDeliveryOfficeName, telephoneNumber, mail, title, department, company, manager
For($x = 0; $x -le $Users.count; $x++)
{
$WorkSheet.Rows.Item($x+2).Columns.Item(1) = $Users[$x].displayName
$WorkSheet.Rows.Item($x+2).Columns.Item(2) = $Users[$x].description
$WorkSheet.Rows.Item($x+2).Columns.Item(3) = $Users[$x].physicalDeliveryOfficeName
$WorkSheet.Rows.Item($x+2).Columns.Item(4) = $Users[$x].telephoneNumber
$WorkSheet.Rows.Item($x+2).Columns.Item(5) = $Users[$x].mail
$WorkSheet.Rows.Item($x+2).Columns.Item(6) = $Users[$x].title
$WorkSheet.Rows.Item($x+2).Columns.Item(7) = $Users[$x].department
$WorkSheet.Rows.Item($x+2).Columns.Item(8) = $Users[$x].company
$WorkSheet.Rows.Item($x+2).Columns.Item(9)= $Users[$x].manager
}
$Workbook.SaveAs($SaveAs)
$MyExcel.quit()
Stop-Process -Id $ExcelId -Force -ErrorAction SilentlyContinue
Комментарии к коду
Get-Process — получает список процессов, в нашем случае [e]xcel;
New-Object — создаем новый COM объект, запускаем свой процесс Excel;
Stop-Process — удаляем созданный объект.
New-Object — создаем новый COM объект, запускаем свой процесс Excel;
Stop-Process — удаляем созданный объект.
Кода в PowerShell стало немного больше, но на выходе мы получили уже готовый файл, в котором исправлять ничего не нужно. Существовало только одно большое, НО данный код в Windows 8.1 работает ~ 25-40 минут в зависимости от количества обрабатываемых объектов, причем основную часть времени занимает именно работа с COM объектом. Соответственно данный подход использовать до появления в моей жизни PowerShell 5 было неудобно из-за времени формирования файла. В Windows 10 или Windows Server 2016 данный скрипт отрабатывает за пару минут что позволяет расширить рамки возможностей.
*
* — в комментариях к коду имена командлетов являются ссылками на официальную документацию.
Спасибо что дочитали до конца. Чукча не писатель, чукча читатель.