Windows powershell system windows forms: Creating a custom input box — PowerShell
Содержание
Создание пользовательского поля ввода — PowerShell
Редактировать
Твиттер
Фейсбук
Электронная почта
- Статья
Этот пример применим только к платформам Windows.
Создание сценария пользовательского графического поля ввода с использованием функций построения форм Microsoft .NET Framework в Windows
PowerShell 3.0 и более поздние версии.
Создайте пользовательское графическое поле ввода
Скопируйте и вставьте следующее в Windows PowerShell ISE, а затем сохраните его как PowerShell
файл сценария ( .ps1
).
Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System. Drawing $form = Новый объект System.Windows.Forms.Form $form.Text = 'Форма ввода данных' $form.Size = Новый объект System.Drawing.Size(300,200) $form.StartPosition = 'Центр экрана' $okButton = Новый объект System.Windows.Forms.Button $okButton.Location = Новый объект System.Drawing.Point(75,120) $okButton.Size = Новый объект System.Drawing.Size(75,23) $okButton.Text = 'ОК' $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.AcceptButton = $okButton $form.Controls.Add($okButton) $cancelButton = Новый объект System.Windows.Forms.Button $cancelButton.Location = Новый объект System.Drawing.Point(150,120) $cancelButton.Size = Новый объект System.Drawing.Size(75,23) $cancelButton.Text = 'Отмена' $cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Отмена $form.CancelButton = $cancelButton $form.Controls.Add($cancelButton) $label = Новый объект System.Windows.Forms.Label $label.Location = Новый объект System.Drawing.Point(10,20) $label.Size = Новый объект System. Drawing.Size(280,20) $label.Text = 'Пожалуйста, введите информацию в поле ниже:' $form.Controls.Add($label) $textBox = Новый объект System.Windows.Forms.TextBox $textBox.Location = Новый объект System.Drawing.Point(10,40) $textBox.Size = Новый объект System.Drawing.Size(260,20) $form.Controls.Add($textBox) $form.Самый верхний = $true $form.Add_Shown({$textBox.Select()}) $результат = $form.ShowDialog() если ($result -eq [System.Windows.Forms.DialogResult]::OK) { $х = $текстовое поле.текст $х }
Сценарий начинается с загрузки двух классов .NET Framework: System.Drawing и
Система.Windows.Forms . Затем вы запускаете новый экземпляр класса .NET Framework.
Система.Windows.Forms.Form . Это обеспечивает пустую форму или окно, в которое вы можете начать добавлять
контролирует.
$form = Новый объект System.Windows.Forms.Form
После создания экземпляра класса Form присвойте значения трем свойствам этого класса.
- Текст. Это становится заголовком окна.
- Размер. Это размер формы в пикселях. Предыдущий скрипт создает форму со значением 300.
пикселей в ширину и 200 пикселей в высоту. - Стартовая позиция. Это необязательное свойство имеет значение CenterScreen в предыдущем сценарии.
Если вы не добавите это свойство, Windows выберет расположение при открытии формы. Установив
StartingPosition to CenterScreen , вы автоматически отображаете форму посередине
экрана при каждой загрузке.
$form.Text = 'Форма ввода данных' $form.Size = Новый объект System.Drawing.Size(300,200) $form.StartPosition = 'Центр экрана'
Затем создайте кнопку OK для формы. Укажите размер и поведение кнопки OK . В
В этом примере кнопка расположена на расстоянии 120 пикселей от верхнего края формы и 75 пикселей от края формы.
левый край. Высота кнопки составляет 23 пикселя, а длина кнопки — 75 пикселей. Сценарий использует
предопределенные типы Windows Forms для определения поведения кнопок.
$okButton = Новый объект System.Windows.Forms.Button $okButton.Location = Новый объект System.Drawing.Point(75,120) $okButton.Size = Новый объект System.Drawing.Size(75,23) $okButton.Text = 'ОК' $okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK $form.AcceptButton = $OKButton $form.Controls.Add($OKButton)
Точно так же вы создаете кнопку Отмена . Кнопка Отмена расположена на 120 пикселей сверху, но на 150
пикселей от левого края окна.
$cancelButton = Новый объект System.Windows.Forms.Button $cancelButton.Location = Новый объект System.Drawing.Point(150,120) $cancelButton.Size = Новый объект System.Drawing.Size(75,23) $cancelButton.Text = 'Отмена' $cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Отмена $form.CancelButton = $cancelButton $form. Controls.Add($cancelButton)
Затем укажите в окне текст метки, описывающий информацию, которую должны предоставить пользователи.
$label = Новый объект System.Windows.Forms.Label $label.Location = Новый объект System.Drawing.Point(10,20) $label.Size = Новый объект System.Drawing.Size(280,20) $label.Text = 'Пожалуйста, введите информацию в поле ниже:' $form.Controls.Add($label)
Добавьте элемент управления (в данном случае текстовое поле), который позволяет пользователям предоставлять описанную вами информацию.
в тексте вашей этикетки. Помимо текстовых полей, вы можете применять множество других элементов управления. Для большего
элементы управления см. в разделе пространство имен System.Windows.Forms.
$textBox = Новый объект System.Windows.Forms.TextBox $textBox.Location = Новый объект System.Drawing.Point(10,40) $textBox.Size = Новый объект System.Drawing.Size(260,20) $form.Controls.Add($textBox)
Установите для свойства Topmost значение $true , чтобы заставить окно открываться поверх других открытых окон и
диалоговые окна.
$form.Topmost = $true
Затем добавьте эту строку кода, чтобы активировать форму, и установите фокус на текстовое поле, которое вы
созданный.
$form.Add_Shown({$textBox.Select()})
Добавьте следующую строку кода для отображения формы в Windows.
$результат = $form.ShowDialog()
Наконец, код внутри блока Если указывает Windows, что делать с формой после того, как пользователи
введите текст в текстовое поле, а затем нажмите кнопку OK или нажмите клавишу Enter .
если ($result -eq [System.Windows.Forms.DialogResult]::OK) { $х = $текстовое поле.текст $х }
См. также
- GitHub: WinFormsExampleUpdates Дэйва Вятта)
- Совет недели по Windows PowerShell: создание пользовательского поля ввода
Обратная связь
Просмотреть все отзывы о странице
PowerShell GUI — Как начать — LazyAdmin
За последние пару лет я создал множество сценариев PowerShell. Все с единственной целью — максимально автоматизировать мою работу в сфере ИТ. Но на этой неделе мне нужно было создать скрипт, который могли бы запускать сами пользователи. А пользователи и командная строка — не лучшая комбинация, поэтому давайте рассмотрим использование графического интерфейса PowerShell.
Мы все любим PowerShell за простоту и эффективность, когда дело доходит до написания сценариев, но обычные пользователи не привыкли работать с интерфейсом командной строки. В этой статье я объясню, как вы можете создать простой графический интерфейс для своего скрипта, и помогу вам преодолеть основные препятствия.
Пример проекта
В этой статье я буду использовать в качестве примера один из моих собственных проектов, поэтому позвольте мне сначала немного рассказать о проблеме, которую мне нужно было решить.
Я работаю в строительной компании, и наши строительные площадки подключены через сеть 4G IPVPN к центру обработки данных. Из-за двойной сети мы не можем развернуть принтеры с сервером печати.
Наши пользователи могут сами установить принтер, но, поскольку они не указаны на сервере печати, они могут легко найти принтер. Им потребуется создать порт TCP/IP, найти IP-адрес принтера, выбрать драйвер и указать имя принтера.
Я создал сценарий PowerShell, который я мог запускать удаленно, чтобы сделать это в фоновом режиме, но для этого потребуется, чтобы они позвонили мне, поэтому я мог запустить сценарий в фоновом режиме. Теперь я мог бы просто установить все принтеры, но это только запутало бы меня и привело бы к длинному списку принтеров.
Итак, я понял, что скрипту PowerShell нужны только модель принтера, IP-адрес и имя. Мы можем найти IP-адрес, поэтому, если пользователь может выбрать модель и ввести имя, все готово. Сэкономил мне 2 звонка в неделю.
Основы графического интерфейса PowerShell
Прежде чем мы начнем создавать форму, важно знать, что сценарий PowerShell запускается последовательно. Так вы определяете свою форму и показываете ее. Но любой код после того, как вы отобразите форму, не будет выполнен, пока вы не закроете форму.
Мне потребовалось 30 минут, чтобы понять это… Я просто подумал, что смогу показать форму и обработать ввод под ней в PowerShell.
Создание формы
Начнем с пустой формы. Во-первых, мы добавляем .Net Windows. Формы. Также нам нужно определить размер формы (ширину, высоту), заголовок и цвет фона. Просто скопируйте и вставьте приведенный ниже код в PowerShell ISE и нажмите «Выполнить 9».0003
# Инициализация графического интерфейса PowerShell Add-Type -AssemblyName System.Windows.Forms # Создать новую форму $LocalPrinterForm = Система нового объекта.Windows.Forms.Form # Определите размер, заголовок и цвет фона $LocalPrinterForm.ClientSize = '500 300' $LocalPrinterForm.text = "LazyAdmin — пример графического интерфейса PowerShell" $LocalPrinterForm. BackColor = "#ffffff" # Показать форму [void]$LocalPrinterForm.ShowDialog()
Вы увидите простую форму, как показано ниже:
Добавление элементов в вашу форму
В нашу форму мы можем добавлять элементы. Их можно использовать для отображения информации и сбора пользовательского ввода. Место ввода основано на точках/пикселях с левой и верхней стороны. Таким образом, местоположение 20,50 находится в 20 пикселях слева и в 50 точках сверху.
У нас есть следующие элементы, которые мы можем использовать в наших формах:
- TextBox (для ввода данных пользователем)
- Label
- Button
- PictureBox
- CheckBox
- ComboBox (раскрывающийся список)
- ListView
- ListBox
- RadioButton
- Panel
- Groupbox (для группировки элементов)
- ProgressBar
- DataGridView
Итак, давайте создадим несколько элементов на нашей форме. Добавьте приведенный ниже код в свой скрипт. Убедитесь, что ShowDialog находится в конце вашего скрипта.
# Создайте заголовок для нашей формы. Мы будем использовать для этого ярлык. $Titel = Новый объект system.Windows.Forms.Label # Содержимое метки $Titel.text = "Добавление нового принтера" # Убедитесь, что размер метки соответствует высоте и длине содержимого $Titel.AutoSize = $true # Определяем минимальную ширину и высоту (не обязательно с autosize true) $Tител.ширина = 25 $Тит.высота = 10 # Позиционируем элемент $Titel.location = Новый объект System.Drawing.Point(20,20) # Определяем тип и размер шрифта $Titel.Font = 'Microsoft Sans Serif,13' # Другие элементы $Description = Новый объект system.Windows.Forms.Label $Description.text = "Добавьте новый строительный принтер на свой компьютер. Убедитесь, что вы подключены к сети строительной площадки. " $Description.AutoSize = $false $Описание.ширина = 450 $Описание.высота = 50 $Description.location = Новый объект System.Drawing.Point(20,50) $Description.Font = 'Microsoft Sans Serif, 10' $PrinterStatus = Новый объект system.Windows.Forms.Label $PrinterStatus.text = "Статус:" $PrinterStatus.AutoSize = $true $PrinterStatus.location = Новый объект System.Drawing.Point(20,115) $PrinterStatus.Font = 'Microsoft Sans Serif,10,style=Bold' $PrinterFound = Новый объект system.Windows.Forms.Label $PrinterFound.text = "Поиск принтера..." $PrinterFound.AutoSize = $true $PrinterFound.location = Новый объект System.Drawing.Point(75,115) $PrinterFound.Font = 'Microsoft Sans Serif, 10' # ДОБАВЬТЕ ДРУГИЕ ЭЛЕМЕНТЫ ВЫШЕ ЭТОЙ ЛИНИИ # Добавляем элементы в форму $LocalPrinterForm.controls.AddRange(@($Titel,$Description,$PrinterStatus,$PrinterFound)) # СЕЙЧАС ЭТО ДОЛЖНО БЫТЬ В КОНЦЕ ВАШЕГО СЦЕНАРИЯ # Показать форму [void]$LocalPrinterForm.ShowDialog()
Здесь вы видите, что каждый элемент создан. Все это простые элементы текста или меток. Вы можете определить ширину и высоту каждого элемента, но если ваш контент длиннее, чем элемент, он будет отображаться только частично. Таким образом, установив для параметра Autosize значение true , вы гарантируете, что пользователь сможет прочитать всю этикетку.
Каждому элементу присваивается местоположение, первая цифра — количество пикселей слева, вторая — количество пикселей сверху.
Результат будет выглядеть следующим образом:
Использование выпадающего списка
Нашему пользователю необходимо выбрать производителя принтера, мы используем только две марки, поэтому радиокнопка I тоже может работать. Мы используем общие драйверы печати, поэтому мне не нужно знать конкретную модель принтера.
$PrinterType = Новый объект system. Windows.Forms.ComboBox $PrinterType.text = "" $PrinterType.width = 170 $printerType.autosize = $true # Добавляем элементы в выпадающий список @('Канон','Hp') | ForEach-Object {[void] $PrinterType.Items.Add($_)} # Выберите значение по умолчанию $PrinterType.SelectedIndex = 0 $PrinterType.location = Новый объект System.Drawing.Point(20,210) $PrinterType.Font = 'Microsoft Sans Serif,10'
Приведенный выше код довольно ясен. Я думаю, мы создаем поле со списком и добавляем элементы с помощью цикла foreach в одну строку в список. Опять же, мы также определяем положение, и я установил минимальную ширину для элемента.
Вы можете установить значение по умолчанию для раскрывающегося списка, выбрав индекс. Убедитесь, что вы добавили переменную элемента в $LocalPrinterForm.controls.AddRange, , иначе она не будет отображаться.
Добавление кнопок
Мы также собираемся добавить несколько кнопок на нашу форму. Кнопка может иметь стандартное действие, например (
OK, Cancel, Abort, Retry, Ignore, Yes или No) или вы можете назначить ему пользовательскую функцию.
Мы собираемся добавить кнопки «Отмена» и «Добавить принтер». Cancel просто закроет форму и больше ничего не сделает, а AddPrinter запустит нашу логику для добавления принтера. Добавьте кнопки с кодом ниже, снова убедитесь, что вы добавили переменные кнопок в $LocalPrinterForm.controls.AddRange
$AddPrinterBtn = New-Object system.Windows.Forms.Button $AddPrinterBtn.BackColor = "#a4ba67" $AddPrinterBtn.text = "Добавить принтер" $AddPrinterBtn.width = 90 $AddPrinterBtn.height = 30 $AddPrinterBtn.location = Новый объект System.Drawing.Point(370,250) $AddPrinterBtn.Font = 'Microsoft Sans Serif, 10' $AddPrinterBtn.ForeColor = "#ffffff" $cancelBtn = Новый объект system.Windows.Forms.Button $cancelBtn.BackColor = "#ffffff" $cancelBtn.text = "Отмена" $cancelBtn.width = 90 $cancelBtn. height = 30 $cancelBtn.location = Новый объект System.Drawing.Point(260,250) $cancelBtn.Font = 'Microsoft Sans Serif,10' $cancelBtn.ForeColor = "#000" $cancelBtn.DialogResult = [System.Windows.Forms.DialogResult]::Отмена $LocalPrinterForm.CancelButton = $cancelBtn $LocalPrinterForm.Controls.Add($cancelBtn)
Теперь многие примеры на других веб-сайтах отбрасывают результаты диалога, используя [void]$form.ShowDialog(). Но возвращаемое значение диалога должно использоваться, чтобы сообщить, как пользователь закрыл форму.
Итак, мы собираемся изменить командную строку ShowDialog.
$result = $LocalPrinterForm.ShowDialog()
Таким образом мы можем проверить, нажал ли пользователь кнопку Cancel или любую другую кнопку по умолчанию в форме
if ($result –eq [System. Windows.Forms.DialogResult]: :Отмена) { write-output 'Пользователь нажал кнопку отмены' }
Добавление пользовательской функции к кнопке
Когда пользователь нажимает Добавить принтер , должен выполняться пользовательский сценарий. Мы можем создать функцию с нашей логикой и назначить функцию кнопке с помощью следующей команды cmd
$AddPrinterBtn.Add_Click({AddPrinter})
И наша функция
function AddPrinter { # ЗДЕСЬ ДОБАВЛЯЕТСЯ ДОБАВЛЕНИЕ ЛОГИКИ ПРИНТЕРА }
Result
Итак, после того, как мы добавили все элементы и добавили несколько дополнительных меток, наша окончательная форма GUI PowerShell выглядит так:
Теперь нам нужно только закончить наш скрипт, чтобы добавить принтер.
Добавление логики
Итак, с нашей формой мы можем начать с добавления логики. Во время выполнения скрипта вам может понадобиться изменить текст, показать или удалить поля или выполнить определенное действие. Давайте сначала начнем с описания нашего сценария PowerShell.
#------------ [Инициализации]------------ # Запустить графический интерфейс PowerShell Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing #---------------[Форма]------------------- # Здесь находится наша форма [Система.Windows.Forms.Application]::EnableVisualStyles() $LocalPrinterForm = Система нового объекта.Windows.Forms.Form $LocalPrinterForm.ClientSize = '480 300' $LocalPrinterForm.text = "LazyAdmin — пример графического интерфейса PowerShell" $LocalPrinterForm.BackColor = "#ffffff" $LocalPrinterForm. TopMost = $false $Icon = Новый объект system.drawing.icon (""./form.ico") $LocalPrinterForm.Icon = $Icon # ОСТАЛОСЬ ФОРМЫ $LocalPrinterForm.controls.AddRange(@( "<ВСЕ ЭЛЕМЕНТЫ ФОРМЫ>" )) #------------[Функции]------------ функция AddPrinter { # Функция, которая запускается кнопкой добавления принтера } #------------[Скрипт]------------ $AddPrinterBtn.Add_Click({AddPrinter}) # ОСТАЛОСЬ ВАШЕГО СЦЕНАРИЯ #------------[Показать форму]------------ # Показать форму $результат = $LocalPrinterForm.ShowDialog() # Перехват любого вывода формы если ($result –eq [System.Windows.Forms.DialogResult]::Cancel) { write-output 'Пользователь нажал кнопку отмены' }
В разделе функций или скриптов вы можете оставить отзыв пользователю или использовать данные из полей ввода.
Чтение и изменение элементов графического интерфейса PowerShell
Чтение данных из текстового поля выполняется довольно просто. В нашем примере мы хотим использовать имя, которое ввели пользователи, и проверить, существует ли уже имя принтера. Если имя существует, мы хотим показать ошибку.
если (Get-Printer -Name $printerName.text) { $PrinterStatus.ForeColor = "#D0021B" $PrinterStatus.Text = 'Имя принтера уже существует.' }
В приведенном выше примере мы проверяем заданное имя принтера, если оно существует, мы меняем цвет шрифта метки «PrinterStatus» на чтение и меняем текст метки, чтобы отображать сообщение для пользователей.
Нет необходимости обновлять форму или ввод, вы можете просто изменить текст по ходу дела.
Отображение и скрытие полей
Перед загрузкой формы я проверяю, доступен ли принтер по ожидаемому сетевому адресу. Если нет, то пользователю не нужно продолжать. Поэтому, когда я инициализирую элементы формы, я скрываю некоторые элементы.
Если у нас есть связь, то показываю элементы или меняю метки кнопок например. Скрытие и отображение элементов в графическом интерфейсе PowerShell можно выполнить с помощью следующего кода:
$PrinterNameLabel.Visible = $false # или $true, конечно 😉
Онлайн-редактор PowerShell GUI PoshGUI
Создание более крупной или сложной формы из командной строки только может быть немного сложным. Вам нужно будет расположить все элементы в правильном месте, создать весь необходимый код. К счастью, есть онлайн-редактор графического интерфейса PowerShell PoshGUI.
Это отличный инструмент для создания первоначального макета формы. Вы можете загрузить файл PS1 и продолжить работу над формой в своем любимом редакторе.
Заключение
Итак, я надеюсь, что эта статья помогла вам приступить к созданию вашей первой формы PowerShell. Хотя PowerShell на самом деле не предназначен для создания форм, он может быть отличным способом сделать сценарий более удобным для вашего пользователя или коллег.
Подпишитесь на информационный бюллетень, чтобы получать последние статьи о PowerShell или Office 365 на свой почтовый ящик.
Полный код выглядит следующим образом:
#----------------------------------------------------- -------------------[Инициализации]--------------------------------------------------------- ----------------------------
# Запустить графический интерфейс PowerShell
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
#------------------------------------------------- --------[Форма]--------------------------------------- ------------------
[Система.Windows.Forms.Application]::EnableVisualStyles()
$LocalPrinterForm = Система нового объекта.Windows.Forms.Form
$LocalPrinterForm.ClientSize = '480 300'
$LocalPrinterForm.text = "Принтеры"
$LocalPrinterForm. BackColor = "#ffffff"
$LocalPrinterForm.TopMost = $false
$Icon = New-Object system.drawing.icon ("//thunnissen.local/netlogon/printer.ico")
$LocalPrinterForm.Icon = $Icon
$Titel = Новый объект system.Windows.Forms.Label
$Titel.text = "Добавить новый принтер"
$Titel.AutoSize = $true
$Tител.ширина = 25
$Тит.высота = 10
$Titel.location = Новый объект System.Drawing.Point(20,20)
$Titel.Font = 'Microsoft Sans Serif,13'
$Description = Новый объект system.Windows.Forms.Label
$Description.text = "Чтобы добавить принтер, убедитесь, что вы подключены к той же сети, что и принтер.."
$Description.AutoSize = $false
$Описание.ширина = 450
$Описание.высота = 50
$Description.location = Новый объект System.Drawing.Point(20,50)
$Description.Font = 'Microsoft Sans Serif, 10'
$PrinterStatus = Новый объект system.Windows.Forms.Label
$PrinterStatus.text = "Статус:"
$PrinterStatus.AutoSize = $true
$PrinterStatus.width = 25
$PrinterStatus.height = 10
$PrinterStatus.location = Новый объект System.Drawing.Point(20,115)
$PrinterStatus. Font = 'Microsoft Sans Serif,10,style=Bold'
$PrinterFound = Новый объект system.Windows.Forms.Label
$PrinterFound.text = "Поиск принтера..."
$PrinterFound.AutoSize = $true
$PrinterFound.width = 25
$PrinterFound.height = 10
$PrinterFound.location = Новый объект System.Drawing.Point(100,115)
$PrinterFound.Font = 'Microsoft Sans Serif, 10'
$PrinterDetails = Новый объект system.Windows.Forms.Label
$PrinterDetails.text = "Сведения о принтере"
$PrinterDetails.AutoSize = $true
$PrinterDetails.width = 25
$PrinterDetails.height = 10
$PrinterDetails.location = Новый объект System.Drawing.Point(20,150)
$PrinterDetails.Font = 'Microsoft Sans Serif,12'
$PrinterDetails.Visible = $false
$PrinterNameLabel = Новый объект system.Windows.Forms.Label
$PrinterNameLabel.text = "Имя:"
$PrinterNameLabel.AutoSize = $true
$PrinterNameLabel.width = 25
$PrinterNameLabel.height = 20
$PrinterNameLabel.location = Новый объект System.Drawing.Point(20,180)
$PrinterNameLabel.Font = 'Microsoft Sans Serif,10,style=Bold'
$PrinterNameLabel. Visible = $false
$PrinterName = Система нового объекта.Windows.Forms.TextBox
$PrinterName.multiline = $false
$PrinterName.width = 314
$PrinterName.height = 20
$PrinterName.location = Новый объект System.Drawing.Point(100,180)
$PrinterName.Font = 'Microsoft Sans Serif, 10'
$PrinterName.Visible = $false
$PrinterTypeLabel = Новый объект system.Windows.Forms.Label
$PrinterTypeLabel.text = "Марка:"
$PrinterTypeLabel.AutoSize = $true
$PrinterTypeLabel.width = 25
$PrinterTypeLabel.height = 20
$PrinterTypeLabel.location = Новый объект System.Drawing.Point(20,210)
$PrinterTypeLabel.Font = 'Microsoft Sans Serif,10,style=Bold'
$PrinterTypeLabel.Visible = $false
$PrinterType = Новый объект system.Windows.Forms.ComboBox
$PrinterType.text = ""
$PrinterType.width = 170
$PrinterType.height = 20
@('Канон','Hp') | ForEach-Object {[void] $PrinterType.Items.Add($_)}
$PrinterType.SelectedIndex = 0
$PrinterType.location = Новый объект System.Drawing.Point(100,210)
$PrinterType.Font = 'Microsoft Sans Serif, 10'
$PrinterType. Visible = $false
$AddPrinterBtn = Новый объект system.Windows.Forms.Button
$AddPrinterBtn.BackColor = "#ff7b00"
$AddPrinterBtn.text = "Добавить"
$AddPrinterBtn.width = 90
$AddPrinterBtn.height = 30
$AddPrinterBtn.location = Новый объект System.Drawing.Point(370,250)
$AddPrinterBtn.Font = 'Microsoft Sans Serif, 10'
$AddPrinterBtn.ForeColor = "#ffffff"
$AddPrinterBtn.Visible = $false
$cancelBtn = Новый объект system.Windows.Forms.Button
$cancelBtn.BackColor = "#ffffff"
$cancelBtn.text = "Отмена"
$cancelBtn.width = 90
$cancelBtn.height = 30
$cancelBtn.location = Новый объект System.Drawing.Point(260,250)
$cancelBtn.Font = 'Microsoft Sans Serif,10'
$cancelBtn.ForeColor = "#000"
$cancelBtn.DialogResult = [System.Windows.Forms.DialogResult]::Отмена
$LocalPrinterForm.CancelButton = $cancelBtn
$LocalPrinterForm.Controls.Add($cancelBtn)
$LocalPrinterForm.controls.AddRange(@($Titel,$Description,$PrinterStatus,$PrinterFound,$PrinterName,$PrinterNameLabel,$PrinterType,$AddPrinterBtn,$cancelBtn,$PrinterTypeLabel,$PrinterDetails))
#------------------------------------------------- -------------------------[Функции]------------------------------------- -----------------------
функция AddPrinter {
$PrinterFound. ForeColor = "#000000"
$PrinterFound.Text = 'Добавление принтера...'
# Проверить порт принтера
$portName = "TCPPort:"+$printerIp
$portExists = Get-Printerport -Name $portname -ErrorAction SilentlyContinue
# Создаем порт, если он не существует
если (-не $portExists) {
$PrinterFound.Text = 'Создание порта принтера...'
Add-PrinterPort -name $portName -PrinterHostAddress $printerIp
}
# Выберите правильный драйвер
если ($PrinterType.SelectedItem -eq 'Canon') {
$printerDriverName = "Canon Generic Plus PCL6"
}еще{
$printerDriverName = "HP LaserJet M227-M231 PCL-6"
}
# Проверяем, существует ли драйвер принтера
$printDriverExists = Get-PrinterDriver -name $printerDriverName -ErrorAction SilentlyContinue
# Установите принтер или драйвер принтера и принтер
если ($printDriverExists) {
$PrinterFound.Text = 'Установка принтера...'
Add-Printer -Name $printerName.text -PortName $portName -DriverName $printerDriverName
}еще{
$PrinterFound.Text = 'Установка драйвера принтера...'
Add-PrinterDriver -имя $printerDriverName
$PrinterFound. Text = 'Установка принтера...'
Add-Printer -Name $printerName.text -PortName $portName -DriverName $printerDriverName
}
если (Get-Printer -Name $printerName.text) {
$PrinterFound.ForeColor = "#7ed321"
$PrinterFound.Text = 'Принтер установлен'
}
еще {
$PrinterFound.ForeColor = "#D0021B"
$PrinterFound.Text = 'Ошибка установки'
}
$PrinterNameLabel.Visible = $false
$PrinterName.Visible = $false
$PrinterType.Visible = $false
$AddPrinterBtn.Visible = $false
$PrinterDetails.Visible = $false
$PrinterTypeLabel.Visible = $false
$cancelBtn.text = "Закрыть"
}
#------------------------------------------------- --------[Скрипт]------------------------------------------------------ ------------------
# Получить IP-адрес принтеров
$клиентский IP = (
Get-NetIPConfiguration |
Где-Объект {
$_.IPv4DefaultGateway -ne $null -и
$_.NetAdapter.Status -ne "Отключено"
}
).IPv4Address.IP-адрес
$networkAddress = $clientIP.Split('.')
$networkAddress = $networkAddress[0]+"."+$networkAddress[1]+".