Содержание статьи
В Windows PowerShell доступны два варианта создания GUI с помощью объектов .NET Framework. Классические элементы интерфейса Windows можно добавить с помощью библиотеки .NET Windows Forms (WinForms), которая поддерживалась в .NET c самого начала. Более современный вариант дизайна реализуется с помощью технологии Windows Presentation Foundation (WPF), которая была добавлена позже в .NET Framework 3.0.
Современный PowerShell
Эта статья — глава из книги Андрея Попова «Современный PowerShell», вышедшей в издательстве «БХВ» в марте этого года. В книге подробно описан язык PowerShell и работа с оболочкой Windows PowerShell в Windows Terminal, взаимодействие с файловой системой, структурированными данными и веб‑ресурсами. Автор разбирает управление процессами, службами и серверами автоматизации, рассказывает, как создать GUI для сценариев Windows PowerShell, уделяет внимание кросс‑платформенным возможностям PowerShell в macOS и Linux.
Если ты администрируешь рабочие станции, серверы или локальные сети под управлением Windows, книга «Современный PowerShell» поможет тебе освоить секреты и хитрости этой технологии и автоматизировать множество рутинных задач.
Построение GUI с помощью Windows Forms
Давай создадим простейшую форму с надписью и кнопкой, выполняя команды непосредственно в консоли PowerShell.
Как мы знаем, платформа .NET построена таким образом, что для обращения к тем или иным объектам нужно предварительно загрузить в операционную память соответствующую сборку (assembly) — динамическую библиотеку определенного вида. Наиболее часто использующиеся сборки загружаются в PowerShell автоматически. Для обращения к объектам WinForms из PowerShell нужно сначала загрузить сборку, поддерживающую эти объекты:
PS C:\Users\andrv> Add-Type -Assemblyname System.Windows.Forms
Графический интерфейс в терминах WinForms — это набор элементов управления (кнопки, поля ввода, списки, флажки и т. д.), которые располагаются в контейнерах (формы, панели, вкладки). Изменяя значения свойств объектов, соответствующих элементам управления, мы определяем внешний вид этих элементов (размер, цвет фона, используемый шрифт и т. д.).
Любое графическое приложение WinForms должно иметь главную форму — объект типа Windows.
. Создадим нашу главную форму и сохраним соответствующий объект в переменной $form
:
PS C:\Users\andrv> $form = New-Object System.Windows.Forms.Form
Наша форма пока находится только в оперативной памяти, на экране мы ее не видим. Зададим заголовок формы (свойство Text
объекта $form
):
PS C:\Users\andrv> $form.Text = 'Первая форма'
Поместим на форму надпись — для этого нужно создать объект типа System.
и присвоить значение свойству Text
этого объекта:
PS C:\Users\andrv> $label = New-Object System.Windows.Forms.LabelPS C:\Users\andrv> $label.Text = 'Привет!'
Кроме надписи, на форму можно помещать другие элементы управления, которым соответствуют объекты из пространства имен System.
. Некоторые из этих объектов представлены в таблице ниже.
Объект | Описание |
---|---|
Button | Кнопка на форме. Надпись на кнопке задается свойством Text |
CheckBox | Флажок (чекбокс) — элемент управления для выбора одного или нескольких пунктов из предложенных вариантов |
CheckedListBox | Состоит из списка элементов (ListBox), перед каждым из которых помещен флажок (чекбокс) для возможности выбора |
ComboBox | Состоит из поля для ввода текста (TextBox) и связанного с ним раскрывающегося списка значений (ListBox) |
DataGridView | Основной элемент управления для представления табличных данных (поддерживает связь с базой данных) |
GroupBox | Используется для выделения групп элементов управления (чаще всего радиокнопок), возле которых отображается рамка |
ImageList | Контейнер для размещения коллекции изображений, используемых другими элементами управления (например, ListView и TreeView) |
ListBox | Список элементов, которые могут быть выбраны. Может содержать простой текст или объекты |
Panel | Видимый или невидимый контейнер для группировки элементов управления |
PictureBox | Используется для размещения графических изображений в нескольких стандартных форматах |
ProgressBar | Индикатор хода выполнения какого‑либо процесса |
RadioButton | Переключатель (радиокнопка) для выбора одного варианта из списка предложенных |
TextBox | Элемент для ввода текста в одной или нескольких строках |
TreeView | Отображение данных в виде узлов дерева |
Для задания размеров и расположения элементов управления используются объекты типа System.
, в которые передаются координаты: первая — по горизонтали, вторая — по вертикали (начало координат размещается в верхнем левом углу, ось X направлена вправо, ось Y — вниз). Нашу надпись мы сместим от верхнего левого угла на 20 пикселов вправо и 10 пикселов вниз. Объект с нужными координатами записывается в свойство Location
объекта $label
:
PS C:\Users\andrv> $label.Location = New-Object System.Drawing.Point 20,10
Пока надпись представляет собой отдельный объект, который не связан с основной формой. Поместим надпись на форму, добавив объект $label
в коллекцию $form.
с помощью метода Add
:
PS C:\Users\andrv> $form.Controls.Add($label)
Теперь создадим кнопку (объект типа Windows.
) с надписью «Нажми!»:
PS C:\Users\andrv> $button = New-Object Windows.Forms.ButtonPS C:\Users\andrv> $button.Text = "Нажми!"
Зададим координаты для кнопки:
PS C:\Users\andrv> $button.Location = New-Object System.Drawing.Point 20,40
Поместим кнопку на форму:
PS C:\Users\andrv> $form.Controls.Add($button)
Теперь добавим нашей форме функциональность — по нажатию кнопки $button
текст в надписи $labe
l будет меняться на «Пока!». Для этого с помощью метода Add_Click
нужно определить обработчик события Click
на кнопке. В этот метод передается блок кода, который будет выполнен при нажатии кнопки. В нашем случае достаточно изменить значение свойства $label.
PS C:\Users\andrv> $button.Add_Click({$label.Text='Пока!'})
Если бы обработчик события был более объемный, то удобнее было бы заранее сохранить соответствующий блок кода в переменной, которую затем передать в метод Add_Click
.
Теперь с помощью метода ShowDialog
можно отобразить созданную форму с элементами управления на экране.
PS C:\Users\andrv> $form.ShowDialog()
По нажатию кнопки надпись на форме изменится.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»