PowerShell ze względu na to, że bazuje na technologii .NET pozwala oprócz skryptów w formie konsolowej, tworzyć nie tyle bardziej zaawansowanych, co przyjemniejszych dla oka skryptów w formie graficznej. Można to zrealizować na dwa sposoby, albo za pośrednictwem Windows Forms, albo Windows Presentation Framework. W tej serii opiszę Wam jak wykorzystać tą pierwszą metodę. Będziemy korzystać z wbudowanego w system edytora ISE. Jednym z przykładów zastosowania może być sytuacja, w której będzie korzystać z Waszego skryptu osoba nie koniecznie znająca PowerShella.
Zacznijmy od stworzenia pierwszej formatki, do tego wystarczy zaledwie 4 linie kodu:
Zdefiniowanie klasy .NET:
Add-Type -AssemblyName System.Windows.Forms
Utworzenie obiektu formatki
$Form = New-Object System.Windows.Forms.Form
Zdefiniowanie tytułu
$Form.Text = "Hello World!"
Wyświetlenie formatki:
$Form.ShowDialog()
Wystarczy zaledwie tyle aby wygenerować prostą, pustą (na razie) formatkę:
Po uruchomieniu skryptu przywita nas pierwsza formatka:
Jak wspomniałem na początku Powershell jest oparty na .NET mamy do dyspozycji te same właściwości formatki co, np w C#, możemy zatem zdefiniować dla niej konkretne właściwości, takie jak np: rozmiar, kolor tła, przyciski maksymalizacji, minimalizacji, położenie po starcie i wiele innych. Wszystkie właściwości znajdziecie tutaj.
Dodajmy zatem do naszej formatki na początek zdefiniowaną wielkość okna
$Form.Size = New-Object System.Drawing.Size(640,480)
Oraz zablokujmy możliwość zmiany wielkości okna
$Form.FormBorderStyle = "Fixed3D"
W ten oto sposób możemy dopasować okienko do własnych potrzeb.
Przejdźmy zatem do dodania do formatki dodatkowych obiektów. Zacznijmy od najprostszego, ale jednocześnie często stosowanego – etykiety (Label). Pozwala ona na wprowadzanie opisów, np. pól tekstowych, pól jedno- i wielokrotnego wyboru, itp.
Aby dodać do naszej formatki etykietę wystarczy utworzyć nowy obiekt, nadać mu niezbędne atrybuty, po czym dodać do formatki.
$Label = New-Object System.Windows.Forms.Label
$Label.Text = "Wprowadź tekst:"
$Label.Size = New-Object System.Drawing.Size(100,25)
$Label.Location = New-Object System.Drawing.Size(15,15)
$Form.Controls.Add($Label)
Wystarczy tyle aby wyświetlić etykietę, czyli: utworzenie obiektu, dodanie wyświetlanego tekstu, zdefiniowanie rozmiaru oraz lokalizacji na formatce. I na koniec dodanie obiektu etykiety do naszej formatki. Nic nie stoi na przeszkodzie, aby dostosować czcionkę do naszych potrzeć, użyć pogrubionej, czy też ją zmienić na inną
$Label.Font = New-Object System.Drawing.Font("SegoeUI",8.25,[System.Drawing.FontStyle]::Bold)
$Label.ForeColor = [System.Drawing.Color]::Red
W taki sposób możemy konstruować coraz bardziej złożone formatki w zależności od naszych potrzeb. W tym poście do naszego Formsa dodamy jeszcze pole tekstowe (TextBox) i przycisk (Button). Oba obiekty dodajemy w podobny sposób jak etykietę, tylko definiując obiekt wybieramy odpowiednio TextBox i Button.
$TextBox = New-Object System.Windows.Forms.TextBox
$TextBox.Text = "Wprowadź tekst"
$TextBox.Size = New-Object System.Drawing.Size(120,25)
$TextBox.Location = New-Object System.Drawing.Size(115,11)
$Form.Controls.Add($TextBox)
Podobnie postępujemy z przyciskiem.
$Button = New-Object System.Windows.Forms.Button
$Button.Text = "OK"
$Button.Size = New-Object System.Drawing.Size(100,25)
$Button.Location = New-Object System.Drawing.Size(55,40)
$Form.Controls.Add($Button)
Już na sam koniec, dodajmy najprostszą akcję do przycisku w postaci wyskakującego okienka, które będzie wyświetlało tekst wprowadzony do pola tekstowego. Niestety w edytorze ISE nie działa podpowiadanie składni dla zdarzeń obiektów, więc nie zawsze można ich w oczywisty sposób użyć.
Ja skorzystam ze zdarzenia Add_Click, które to po kliknięciu na przycisk wywoła akcję wyświetlenia okienka (MessageBox)
Tutaj mała uwaga: w zależności ile parametrów użyjemy możemy uzyskać inne rezultaty. Jeden parametr, wyświetli po prostu tekst, kolejny doda do niego tytuł, kolejny ikonę, przyciski, pomoc, itp.). Szczegółowy opis w dokumentacji
$Button.Add_Click({
[System.Windows.Forms.MessageBox]::Show($TextBox.Text, "Tytuł", "OK", "Information")
})
W moim przykładzie są to kolejno: komunikat pobierany z pola tekstowego, tytuł, jeden przycisk OK, oraz ikona informacyjna.
W ten oto sposób mamy utworzoną najprostszą formatkę z obiektami oraz podstawową akcją. W kolejnej części pokażę inne obiekty i bardziej zaawansowane akcje, które można wykorzystać we własnych programach. Jeśli chcecie poruszyć jakieś tematy z dziedziny np. PowerShella, zostawcie komentarz.
Na koniec link do pliku zawierającego cały kod z tej części
EDIT —> 2-ga część wpisu dot. tworzenia skryptów z interfejsem okienkowym – Link 🙂