Категория > Новости > Секреты PowerShell. Создаем графический интерфейс для сценариев - «Новости»

Секреты PowerShell. Создаем графический интерфейс для сценариев - «Новости»


9-11-2023, 17:34. Автор: Jeff
кни­ги Андрея Попова «Сов­ремен­ный PowerShell», вышед­шей в изда­тель­стве «БХВ» в мар­те это­го года. В кни­ге под­робно опи­сан язык PowerShell и работа с обо­лоч­кой Windows PowerShell в Windows Terminal, вза­имо­дей­ствие с фай­ловой сис­темой, струк­туриро­ван­ными дан­ными и веб‑ресур­сами. Автор раз­бира­ет управле­ние про­цес­сами, служ­бами и сер­верами авто­мати­зации, рас­ска­зыва­ет, как соз­дать GUI для сце­нари­ев Windows PowerShell, уде­ляет вни­мание кросс‑плат­формен­ным воз­можнос­тям PowerShell в macOS и Linux.

Ес­ли ты адми­нис­три­руешь рабочие стан­ции, сер­веры или локаль­ные сети под управле­нием Windows, кни­га «Сов­ремен­ный PowerShell» поможет тебе осво­ить сек­реты и хит­рости этой тех­нологии и авто­мати­зиро­вать мно­жес­тво рутин­ных задач.


Читайте также - Холодильники Liebherr – это современная бытовая техника, которая экономно потребляет электрическую энергию, оснащается самыми популярными опциями, обеспечивающими качественное хранение продуктов питания - либхер холодильники официальный сервисный центр по доступным ценам.

Построение GUI с помощью Windows Forms


Да­вай соз­дадим прос­тей­шую фор­му с над­писью и кноп­кой, выпол­няя коман­ды непос­редс­твен­но в кон­соли PowerShell.


Как мы зна­ем, плат­форма .NET пос­тро­ена таким обра­зом, что для обра­щения к тем или иным объ­ектам нуж­но пред­варитель­но заг­рузить в опе­раци­онную память соот­ветс­тву­ющую сбор­ку (assembly) — динами­чес­кую биб­лиоте­ку опре­делен­ного вида. Наибо­лее час­то исполь­зующиеся сбор­ки заг­ружа­ются в PowerShell авто­мати­чес­ки. Для обра­щения к объ­ектам WinForms из PowerShell нуж­но сна­чала заг­рузить сбор­ку, под­держи­вающую эти объ­екты:


Гра­фичес­кий интерфейс в тер­минах WinForms — это набор эле­мен­тов управле­ния (кноп­ки, поля вво­да, спис­ки, флаж­ки и т. д.), которые рас­полага­ются в кон­тей­нерах (фор­мы, панели, вклад­ки). Изме­няя зна­чения свой­ств объ­ектов, соот­ветс­тву­ющих эле­мен­там управле­ния, мы опре­деля­ем внеш­ний вид этих эле­мен­тов (раз­мер, цвет фона, исполь­зуемый шрифт и т. д.).


Лю­бое гра­фичес­кое при­ложе­ние WinForms дол­жно иметь глав­ную фор­му — объ­ект типа Windows.Forms.Form. Соз­дадим нашу глав­ную фор­му и сох­раним соот­ветс­тву­ющий объ­ект в перемен­ной $form:


На­ша фор­ма пока находит­ся толь­ко в опе­ратив­ной памяти, на экра­не мы ее не видим. Зададим заголо­вок фор­мы (свой­ство Text объ­екта $form):


По­мес­тим на фор­му над­пись — для это­го нуж­но соз­дать объ­ект типа System.Windows.Forms.Label и прис­воить зна­чение свой­ству Text это­го объ­екта:


PSC:Usersandrv$label.Text='Привет!'

Кро­ме над­писи, на фор­му мож­но помещать дру­гие эле­мен­ты управле­ния, которым соот­ветс­тву­ют объ­екты из прос­транс­тва имен System.Windows.Forms. Некото­рые из этих объ­ектов пред­став­лены в таб­лице ниже.
































































ButtonКноп­ка на фор­ме. Над­пись на кноп­ке зада­ется свой­ством Text
CheckBoxФла­жок (чек­бокс) — эле­мент управле­ния для выбора одно­го или нес­коль­ких пун­ктов из пред­ложен­ных вари­антов
CheckedListBoxСос­тоит из спис­ка эле­мен­тов (ListBox), перед каж­дым из которых помещен фла­жок (чек­бокс) для воз­можнос­ти выбора
ComboBoxСос­тоит из поля для вво­да тек­ста (TextBox) и свя­зан­ного с ним рас­кры­вающе­гося спис­ка зна­чений (ListBox)
DataGridViewОс­новной эле­мент управле­ния для пред­став­ления таб­личных дан­ных (под­держи­вает связь с базой дан­ных)
GroupBoxИс­поль­зует­ся для выделе­ния групп эле­мен­тов управле­ния (чаще все­го ради­окно­пок), воз­ле которых отоб­ража­ется рам­ка
ImageListКон­тей­нер для раз­мещения кол­лекции изоб­ражений, исполь­зуемых дру­гими эле­мен­тами управле­ния (нап­ример, ListView и TreeView)
ListBoxСпи­сок эле­мен­тов, которые могут быть выб­раны. Может содер­жать прос­той текст или объ­екты
PanelВи­димый или невиди­мый кон­тей­нер для груп­пиров­ки эле­мен­тов управле­ния
PictureBoxИс­поль­зует­ся для раз­мещения гра­фичес­ких изоб­ражений в нес­коль­ких стан­дар­тных фор­матах
ProgressBarИн­дикатор хода выпол­нения какого‑либо про­цес­са
RadioButtonПе­рек­лючатель (ради­окнопка) для выбора одно­го вари­анта из спис­ка пред­ложен­ных
TextBoxЭле­мент для вво­да тек­ста в одной или нес­коль­ких стро­ках
TreeViewОтоб­ражение дан­ных в виде узлов дерева

Для задания раз­меров и рас­положе­ния эле­мен­тов управле­ния исполь­зуют­ся объ­екты типа System.Drawing.Point, в которые переда­ются коор­динаты: пер­вая — по горизон­тали, вто­рая — по вер­тикали (начало коор­динат раз­меща­ется в вер­хнем левом углу, ось X нап­равле­на впра­во, ось Y — вниз). Нашу над­пись мы смес­тим от вер­хне­го левого угла на 20 пик­селов впра­во и 10 пик­селов вниз. Объ­ект с нуж­ными коор­дината­ми записы­вает­ся в свой­ство Location объ­екта $label:


По­ка над­пись пред­став­ляет собой отдель­ный объ­ект, который не свя­зан с основной фор­мой. Помес­тим над­пись на фор­му, добавив объ­ект $label в кол­лекцию $form.Controls с помощью метода Add:


Те­перь соз­дадим кноп­ку (объ­ект типа Windows.Forms.Button) с над­писью «Наж­ми!»:


PSC:Usersandrv$button.Text="Нажми!"

За­дадим коор­динаты для кноп­ки:


По­мес­тим кноп­ку на фор­му:


Те­перь добавим нашей фор­ме фун­кци­ональ­ность — по нажатию кноп­ки $button текст в над­писи $label будет менять­ся на «Пока!». Для это­го с помощью метода Add_Click нуж­но опре­делить обра­бот­чик события Click на кноп­ке. В этот метод переда­ется блок кода, который будет выпол­нен при нажатии кноп­ки. В нашем слу­чае дос­таточ­но изме­нить зна­чение свой­ства $label.Text:


Ес­ли бы обра­бот­чик события был более объ­емный, то удоб­нее было бы заранее сох­ранить соот­ветс­тву­ющий блок кода в перемен­ной, которую затем передать в метод Add_Click.


Те­перь с помощью метода ShowDialog мож­но отоб­разить соз­данную фор­му с эле­мен­тами управле­ния на экра­не.


Секреты PowerShell. Создаем графический интерфейс для сценариев - «Новости»
Фор­ма, соз­данная в PowerShell

По нажатию кноп­ки над­пись на фор­ме изме­нит­ся.


Из­менения в эле­мен­те на фор­ме
Перейти обратно к новости