Создание графического интерфейса PowerShell (часть 1)

Опубликовано: 18 Марта, 2023

  • Создание графического интерфейса PowerShell (часть 13)

Те из вас, кто регулярно читает мои статьи, знают, что я обычно пишу много материалов о Windows PowerShell. На это есть несколько причин. Прежде всего, Microsoft неоднократно заявляла, что PowerShell в конечном итоге станет предпочтительным механизмом для управления серверами Windows. В таком случае я стараюсь помочь всем подготовиться к переходу, написав о способах выполнения различных административных задач в PowerShell. Моя другая причина немного более личная. Я был программистом задолго до того, как начал писать о сетях, и работа с PowerShell дает мне возможность вернуться к своим корням.

Независимо от причин, по которым я пишу о PowerShell, есть одна вещь, с которой я сталкиваюсь снова и снова. Есть значительное количество людей, которым просто не нравится работать в среде командной строки. Некоторые действительно не любят писать код. У других нет проблем с написанием кода, но они не чувствуют себя полностью комфортно, предоставляя своим пользователям решение бизнес-проблемы на основе PowerShell, потому что PowerShell — это среда командной строки, а не среда «укажи и щелкни», к которой пользователи так привыкли..

Хотите верьте, хотите нет, но PowerShell не ограничивает вас текстовым интерфейсом, который стал почти синонимом среды PowerShell. Microsoft позволяет создавать графический интерфейс для ваших сценариев PowerShell. Таким образом, если у вас есть сценарий, который нужно передать конечному пользователю (или если вы просто предпочитаете самостоятельно взглянуть на графический интерфейс), вы можете отказаться от стандартного синего текстового интерфейса.

Итак, что нужно для создания графического интерфейса PowerShell? Когда я впервые обнаружил, что можно создать графический интерфейс PowerShell, я мгновенно вспомнил свой старый цветной компьютер Radio Shack, на котором я писал программы в 1980-х годах. Этот компьютер, как и многие другие в то время, загружался в текстовой среде программирования BASIC. Эта среда была основана на командной строке, но если вы хотели переключиться в графический режим, вы могли сделать это, введя три команды (PMODE, PCLS и SCREEN). Должен признаться, я предполагал, что PowerShell будет чем-то похож. Я ожидал, что PowerShell предложит команду Set-GraphicMode или что-то подобное, которую можно использовать для переключения в режим графического интерфейса. Увы, такой команды не существует.

Хотя процесс создания графического интерфейса для ваших сценариев PowerShell не очень сложен, он может потребовать от вас немного выйти за пределы вашей зоны комфорта, поскольку вам придется использовать некоторые внешние инструменты. В частности, вам понадобится Visual Studio. Вам также понадобится Microsoft.NET Framework версии 4.x и, конечно же, PowerShell.

Так как же выглядит процесс создания графического интерфейса PowerShell? Что ж, как объяснялось ранее, вы не сможете достичь своей цели, используя только нативную оболочку PowerShell. На самом деле будут использоваться три разных файла.

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

Второй файл, который вам понадобится, — это файл XAML. Файл XAML — это часть, определяющая, как будет выглядеть графический интерфейс пользователя. Файлы XAML кодируются с использованием схемы, очень похожей на XML. Хорошая новость заключается в том, что вам не нужно вручную кодировать XAML. Visual Studio предоставляет инструмент, позволяющий перетаскивать различные элементы на холст для создания графического интерфейса. Когда вы это сделаете, Visual Studio напишет за вас необходимый код XAML.

Третий компонент, который вам понадобится, — это вторичный сценарий PowerShell. Если вы остановитесь и подумаете об этом, вы получите сценарий PowerShell, который действует как текстовая версия приложения, которое вы создаете. У вас также есть файл XAML, который создает графический интерфейс пользователя. Этот третий файл связывает два других вместе.

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

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

Из всего процесса больше всего работы требует построение сценария диалога. Для этого есть две основные причины. Прежде всего, сценарий диалога использует.NET Framework. Конечно, сценарий содержит некоторые стандартные командлеты PowerShell, но некоторые администраторы могут обнаружить, что сценарий выглядит совершенно необычно из-за кода.NET, который существует в сценарии.

Другая причина, по которой создание диалогового сценария требует некоторой работы, заключается в том, что он не просто делает ваш сценарий PowerShell и файл XAML осведомленными друг о друге (хотя это часть его работы). Он также обрабатывает сопоставление функций. Позвольте привести пример.

Предположим на мгновение, что при создании файла XAML вы определили кнопку OK как часть графического интерфейса вашего скрипта. PowerShell понятия не имеет, что вы хотите, чтобы произошло, когда кто-то нажимает кнопку «ОК». Вы должны создать что-то, называемое обработчиком событий, который определяет нажатие кнопки как событие и сообщает PowerShell, что должно произойти, когда кто-то нажимает кнопку.

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

Вывод

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