Так уж вышло, что очередная дата публикации статьи из рубрики «Совет недели» совпала с днем, который также именуют «праздником» или же «Днем святого Валентина», aka День влюбленных. Некоторые заморачиваются и пытаются устроить себе праздник, некоторые на него вообще никак не реагируют, но это личное дело каждого. Но раз уж сегодня такой день, я расскажу вам о том, как можно создать креативное поздравление при помощи возможностей Windows PowerShell.

Следовательно, дальше в этой небольшой заметке вы узнаете, как можно создать всплывающую форму средствами PowerShell, а также, в случае «массовой рассылки», как ее можно распространить сразу на несколько компьютеров при помощи групповой политики. Итак,

Креативное поздравление средствами Windows PowerShell

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

Сразу предположим, что 2 изображения (значок с именем файла heart.ico и картинка image.jpg) скопированы на целевой компьютер заранее и находятся в папке C:\PowerShell\ValScript\Image. Итак, создаем сам скрипт:

1. Загрузка сборок

Для начала следует загрузить требуемые сборки, благодаря которым мы сможем создать саму форму. Сборки предназначены для того, чтобы вы могли реализовать некоторые функции, расширяющие возможности работы с различными объектами в скриптах Windows PowerShell. Такие сборки вы можете подгрузить, используя команду Reflection. В свою очередь, reflection работает с пространствами имен, сборками и классами. Теперь кратко о том, что собой представляю сборки. Сборка (она же Assembly) представляет собой некий набор функциональных возможностей, включая различные классы. В данном примере скрипт будет начинаться следующим образом:

[Reflection.Assembly]::LoadWithPartialName(«System») | Out-Null

[Reflection.Assembly]::LoadWithPartialName(«System.Windows.Forms») | Out-Null

[Reflection.Assembly]::LoadWithPartialName(«System.Drawing») | Out-Null

[Reflection.Assembly]::LoadWithPartialName(«mscorlib») | Out-Null

[Reflection.Assembly]::LoadWithPartialName(«System.Data») | Out-Null

[Reflection.Assembly]::LoadWithPartialName(«System.IO») | Out-Null

[Reflection.Assembly]::LoadWithPartialName(«Microsoft.VisualBasic») | Out-Null

[reflection.assembly]::LoadWithPartialName(«System.DirectoryServices») | Out-Null

После этого мы начинаем создавать новую функцию:

function Create-Splash

{

2. Создание формы

Наша форма будет содержать некоторые объекты, о которых более подробно речь пойдет ниже. Задаются объекты следующим образом:

# Задаем объекты нашей формы

$script:frmValentine = New-Object System.Windows.Forms.Form

$lblTitle = New-Object System.Windows.Forms.Label

$objImage = New-Object System.Windows.Forms.PictureBox

$lblTextDown = New-Object System.Windows.Forms.Label

$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState

где frmValentine – это сама форма, lblTitle – первое текстовое поле, objImage – картинка, а lblTextDown – это текстовом поле, которое будет отображаться в самом конце данной формы.

Теперь самое время создать собственно форму. Для этого вводим следующее:

# Рисуем саму форму

$frmValentine.BackColor = [System.Drawing.Color]::FromArgb(255,255,255,255)

$System_Drawing_Size = New-Object System.Drawing.Size

$System_Drawing_Size.Height = 550

$System_Drawing_Size.Width = 500

$frmValentine.ClientSize = $System_Drawing_Size

$frmValentine.DataBindings.DefaultDataSourceUpdateMode = 0

$frmValentine.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon(‘C:\PowerShell\ValScript\Image\heart.ico’)

$frmValentine.Name = «frmValentine»

$frmValentine.StartPosition = 1

$frmValentine.Text = «Праздничная форма»

Ключевые составляющие:

  • Height – высота формы;
  • Width – ширина формы;
  • Icon – значок окна с формой;
  • Name – имя формы для PowerShell;
  • Text – наименование отображаемого диалогового окна.

3. Блоки с текстом и картинкой

На данном этапе готово одно только диалоговое окно, от которого пока нет никакого проку. Теперь нужно добавить элементы. Создаются все они практически одинаково. Для этого следует воспользоваться таким кодом:

# Первый блок с текстом

$lblTitle.AutoSize = $True

$lblTitle.DataBindings.DefaultDataSourceUpdateMode = 0

$lblTitle.Font = New-Object System.Drawing.Font(«Arial»,15,1,3,0)

$lblTitle.ForeColor = [System.Drawing.Color]::FromArgb(255,64,0,64)

$System_Drawing_Point = New-Object System.Drawing.Point

$System_Drawing_Point.X = 75

$System_Drawing_Point.Y = 15

$lblTitle.Location = $System_Drawing_Point

$lblTitle.Name = «lblTitle»

$lblTitle.TabIndex = 0

$lblTitle.Text = «В день Святого Валентина…»

$frmValentine.Controls.Add($lblTitle)

Здесь:

  • New-Object System.Drawing.Font отвечает за шрифт надписи;
  • [System.Drawing.Color]::FromArgb – ее цвет;
  • New-Object System.Drawing.Point – расположение текстового блока, с учетом координат Х и Y;
  • Text – соответственно текст.

Остальные блоки создаются следующим образом:

# Блок с картинкой

$objImage.DataBindings.DefaultDataSourceUpdateMode = 0

$objImage.Image = [System.Drawing.Image]::FromFile(‘C:\PowerShell\ValScript\Image\image.png’)

$System_Drawing_Point = New-Object System.Drawing.Point

$System_Drawing_Point.X = 23

$System_Drawing_Point.Y = 50

$objImage.Location = $System_Drawing_Point

$objImage.Name = «objImage»

$System_Drawing_Size = New-Object System.Drawing.Size

$System_Drawing_Size.Height = 311

$System_Drawing_Size.Width = 450

$objImage.Size = $System_Drawing_Size

$objImage.SizeMode = 1

$objImage.TabIndex = 1

$objImage.TabStop = $False

$frmValentine.Controls.Add($objImage)

# Текст снизу

$lblTextDown.AutoSize = $True

$lblTextDown.DataBindings.DefaultDataSourceUpdateMode = 0

$lblTextDown.Font = New-Object System.Drawing.Font(«Times New Roman»,15.75,3,3,0)

$lblTextDown.ForeColor = [System.Drawing.Color]::FromArgb(255,0,0,192)

$System_Drawing_Point = New-Object System.Drawing.Point

$System_Drawing_Point.X = 12

$System_Drawing_Point.Y = 500

$lblTextDown.Location = $System_Drawing_Point

$lblTextDown.Name = «lblTextDown»

$lblTextDown.TabIndex = 2

$lblTextDown.Text = «Здесь должен быть какой-то текст»

$frmValentine.Controls.Add($lblTextDown)

Можно отметить лишь то, что в случае с блоком с изображением, его размер можно определить при помощи New-Object System.Drawing.Size

4. Сохранение состояния формы и вывод ее отображения

Для того чтобы сохранить состояние созданного диалогового окна и вывести его на экран, следует прописать:

#Сохраняем состояние формы

InitialFormWindowState = $frmValentine.WindowState

frmValentine.add_Load($OnLoadForm_StateCorrection)

# Отображение формы

$frmValentine.Show()| Out-Null

}

Также было бы полезным дать возможность форме закрыться самостоятельно после того, как ваш адресат сможет заметить и оценить ваши труды. Для этого указываем

Create-Splash

Start-Sleep -seconds 30

$frmValentine.Close()

Готово.

Теперь осталось только сохранить этот сценарий с разрешением ps1 и вовремя запустить на целевом компьютере. В результате на 30 секунд должна отобразиться форма, которую вы можете увидеть на следующей иллюстрации:

Рис. 1. Созданная форма при помощи Windows PowerShell

Реклама