» » » Новые возможности PowerShell в Windows Server 2016

 

Новые возможности PowerShell в Windows Server 2016

Автор: admin от 13-10-2016, 21:25, посмотрело: 123

Новые возможности PowerShell в Windows Server 2016 Доброго времени суток %HabraUser%! Не так давно мне посчастливилось стать обладателем VDS с предустановленным Windows Server 2016 для ознакомления с данной операционной системой и ее новыми возможностями. В связи с тем, что последние несколько лет я являюсь поклонником администрирования с использованием PowerShell, в первую очередь меня заинтересовал именно он, так как применяю его в своей работе ежедневно для автоматизации рутинных задач. В корпоративной среде на сегодняшний день чаще всего последняя используемая версия операционных систем Windows 8.1 и Windows Server 2012 R2, соответственно я не обращал внимания, на изменения, которые принесла мне Windows 10 на домашнем компьютере, и как оказалось зря. Я пропустил мимо себя обновленный инструмент, который стал гораздо лучше, удобнее и быстрее по сравнению с предыдущими версиями, об этих основных изменениях и хотелось бы поговорить. Добро пожаловать под кат.

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


  • Окну редактора PowerShell теперь можно изменять размеры, сомнительное достижение, но теперь окно можно развернуть на весь экран;

    Давайте сравним:

    Новые возможности PowerShell в Windows Server 2016
    PowerShell 2.0

    Новые возможности PowerShell в Windows Server 2016
    PowerShell 5.1


  • Следующее явное отличие которое видно на скриншотах это подсветка синтаксиса — вот это уже очень большой плюс;


  • За ним следует еще одно нововведение — отныне и впредь должны поддерживаться модули и командлеты разных версий;

    Данный пример лучше рассмотреть на скриншотах:

    Новые возможности PowerShell в Windows Server 2016
    PowerShell 2.0

    Новые возможности PowerShell в Windows Server 2016
    PowerShell 5.1

    Как видно из скриншота появилась новая команда, которая, так же, как и более известная ранее Update-Help для обновления справки, служит для обновления версий модулей Update-Module.


  • Появились классы, на эту тему есть отдельная статья;


  • Возросла скорость работы с com объектами.


Про последний пункт хотелось бы поговорить отдельно. Размер Active Directory в организациях разный, были случаи, когда это было 20-60 пользователей, а были и когда больше нескольких десятков тысяч и если в первом случае можно обойтись только графическим интерфейсом, то во втором это сделать можно, но довольно сложно. Мало кто из администраторов представляет себе 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:ExportMainOffice.csv" -NoType -UseCulture -Encoding Unicode


В итоге мы получаем готовую таблицу с необходимыми полями: Ф.И.О., Номер кабинета, Номер телефона, Адрес почты, Должность, Наименование отдела, Наименование филиала, Ф.И.О. Руководителя данного сотрудника. Данный скрипт работает несколько секунд и позволяет нам изменив всего два (имя файла) один параметр область поиска (-SearchBase) и получить справочник по любому филиалу в текущий момент времени. Дальше мы открываем созданный нами файл в Excel, меняем названия колонок, форматируем как нам нравится и сохраняем уже в родном для Excel формате. Поняв, что это баловство и можно сделать что-то более серьезное самим собой пришел вариант работы с COM объектом, а именно с Excel.

$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


Кода в PowerShell стало немного больше, но на выходе мы получили уже готовый файл, в котором исправлять ничего не нужно. Существовало только одно большое, НО данный код в Windows 8.1 работает ~ 25-40 минут в зависимости от количества обрабатываемых объектов, причем основную часть времени занимает именно работа с COM объектом. Соответственно данный подход использовать до появления в моей жизни PowerShell 5 было неудобно из-за времени формирования файла. В Windows 10 или Windows Server 2016 данный скрипт отрабатывает за пару минут что позволяет расширить рамки возможностей.

 *

Спасибо что дочитали до конца. Чукча не писатель, чукча читатель.

Источник: Хабрахабр

Категория: Операционные системы » Windows

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

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *