Frank Loffeld

Technisch Specialist

De medewerker centraal 

Applicatieontwikkeling met PowerShell, WPF en XAML

Is het volgende scenario misschien herkenbaar? Je bent lekker bezig alle bedrijfsprocessen te automatiseren en hebt een geweldig PowerShell-script geschreven. Die maakt op basis van naam, functie en datum van indiensttreding automatisch een gebruikersaccount en mailbox aan en koppelt op basis van de afdeling automatisch de juiste active directory-rechten aan groepen, waarna het account pas actief wordt op de dag van indiensttreding. Superhandig voor HR! Ze hoeven alleen inline de code van het PowerShell-script aan te passen. In de code hoeven ze alleen maar de naam, functie en datum van indiensttreding aan te passen. Supersimpel toch?!?

Je laat je oplossing zien aan HR en krijgt als opmerking: “Dit kan ik toch niet! Ik ben geen programmeur! Ik snap hier niets van. Goed idee, maar heb je hier geen programmaatje voor?” Daar sta je dan met je geweldige PowerShell-script…

Hier komt WPF en XAML om de hoek kijken. Met behulp van deze technologieën kun je van een PowerShell-script een applicatie maken. Et voilà, u vraagt, wij draaien:

Maar wat is nu WPF en XAML?
Windows Presentation Foundation (WPF) is een UI-raamwerk voor het bouwen van Windows-bureaubladtoepassingen. Het gebruikt de eXtensible Application Markup Language (XAML) om op een declaratieve manier weergaven te definiëren. XAML is de XML-variant van Microsoft voor het beschrijven van een GUI. Het heeft ingebouwde ondersteuning voor bronnen, grafische afbeeldingen, gegevensbinding en nog veel meer. Het is een zeer gebruikersvriendelijk UI-framework.

Leuke intro, maar hoe werkt dit?
Geloof het of niet, PowerShell beperkt je niet tot de op tekst gebaseerde interface die bijna synoniem is geworden met een PowerShell-omgeving. Microsoft maakt het mogelijk om een GUI-interface te maken voor je PowerShell-scripts. Op die manier kun je, als je een script hebt dat je aan een eindgebruiker moet geven (of als je zelf liever naar een grafische interface kijkt), loskomen van de standaard blauwe tekstinterface.

Wat is er nodig om een PowerShell GUI te maken?
Toen ik voor het eerst ontdekte dat het mogelijk was om een PowerShell GUI te bouwen, flitsten mijn gedachten meteen terug naar mijn oude Commodore 64-computer, die ik in de jaren negentig gebruikte om programma’s te schrijven. Die computer startte, zoals zoveel andere van die tijd, op naar een op tekst gebaseerde BASIC-programmeeromgeving. Deze omgeving was gebaseerd op de opdrachtregel. Maar als je naar de grafische modus wilde overschakelen, kon je dat doen door een aantal PEEKs en POKEs in te voeren.

Ik verwachtte dat PowerShell een opdracht met de naam Set-GraphicMode zou aanbieden of iets dergelijks, dat zou kunnen worden gebruikt om over te schakelen naar de GUI-modus. Helaas bestaat zo’n commando niet. Hoewel het maken van een GUI voor PowerShell-scripts niet super moeilijk is, kan het zijn dat je een beetje buiten je comfortzone moet gaan, omdat je enkele externe hulpmiddelen zult moeten gebruiken.

Concreet zul je bijvoorbeeld Visual Studio moeten gebruiken. Je hebt ook de Microsoft .NET Framework-versie 4.x nodig en je hebt natuurlijk PowerShell nodig. Voor de nerds onder ons: PowerShell, WPF en XAML-code kan natuurlijk ook gewoon in PowerShell ISE of een andere editor worden geschreven.

Hoe ziet het bouwproces van een PowerShell GUI eruit?
PowerShell wordt geleverd met assembly’s, waarmee native .NET-classes kunnen worden begrepen. Echter, WPF is daar niet één van. Om met WPF in PowerShell te werken, moet je eerst de assembly toevoegen aan de huidige sessie. Dit kan met behulp van de opdracht Add-Type.

Nadat de assembly is geladen, kun je beginnen met het maken van een basisvenster. Om het meest eenvoudige venster in WPF te maken, maak ik een XML-string. Deze kun je naar een XML-object casten met [xml]:

Nadat de XAML-reeks is gemaakt, moet er een object worden gemaakt die de klasse XamlReader begrijpt. Om dat te doen, moet het doorgegeven worden aan de klasse XmlNodeReader als een argument. Hiermee creëer je een XmlNodeReader-object.

Dit XmlNodeReader-object geef je door aan de statische methode Load () in de klasse XamlReader om een venster te maken. Vervolgens gebruik je de ShowDialog ()-methode om het venster op het scherm weer te geven.

De basis is nu gelegd. Hierna kun je elementen aan dit venster toevoegen. Hieronder volgt een voorbeeld van een venster met een tekstblok:

Nu je het standaard frame hebt gemaakt, kun je helemaal losgaan met het toevoegen van tekstblokken, knoppen, radiobuttons, stijl, tabbladen, etc. Eigenlijk alles wat je ook zou kunnen toevoegen aan een webpagina. De laatste stap kan zijn om de losstaande PowerShell-commando’s te koppelen aan functies/knoppen of andere elementen in de XAML-code:

Ik heb een drietal demo-applicaties gemaakt, waarin dit alles samenkomt:

Laat je in het volgende filmpje verrassen met wat er allemaal mogelijk is met PowerShell, WPF en XAML.

https://youtu.be/g8RwmarRQ8I

Hopelijk heb ik jullie enthousiast kunnen maken en gaan jullie hiermee aan de slag!

Voor vragen weet je mij te vinden!

PowerShell, makkelijk met Frank

Cookies op Fondo
Wij en derden gebruiken cookies op onze website. We gebruiken cookies voor statistische, voorkeur en marketing doeleinden. Google Analytics cookies zijn geanonimiseerd. Je kan je voorkeuren wijzigen door op ‘Verander opties’ te klikken. Door op ‘Accepteren’ te klikken accepteer je het gebruik van alle cookies zoals beschreven in onze privacy-statement.
Noodzakelijk
Noodzakelijke cookies helpen een website bruikbaarder te maken, door basisfuncties als paginanavigatie en toegang tot beveiligde gedeelten van de website mogelijk te maken. Zonder deze cookies kan de website niet naar behoren werken.
Voorkeur
Voorkeurscookies zorgen ervoor dat een website informatie kan onthouden die van invloed is op het gedrag en de vormgeving van de website, zoals de taal van uw voorkeur of de regio waar u woont.
Statische
Statistische cookies helpen eigenaren van websites begrijpen hoe bezoekers hun website gebruiken, door anoniem gegevens te verzamelen en te rapporteren.
Marketing
Marketingcookies worden gebruikt om bezoekers te volgen wanneer ze verschillende websites bezoeken. Hun doel is advertenties weergeven die zijn toegesneden op en relevant zijn voor de individuele gebruiker. Deze advertenties worden zo waardevoller voor uitgevers en externe adverteerders.
Verander opties