TechNet Experternas arena

Skapa grafiska program med hjälp av PowerShell


Om skribenten

Fredrik Wall

Fredrik Wall, arbetar som Senior Infrastructure Engineer på Steria.

Skapa grafiska program med hjälp av PowerShell

En av de största fördelarna som jag ser med PowerShell för administration är att man på fem minuter enkelt kan göra om icke grafiska skript till grafiska program.

Detta underlättar bland annat om man gör verktyg för att till exempel Helpdesk ska kunna administrera saker eller få fram information om datorer i ett nätverk.

Ett exempel är om man vill ha ett verktyg för att kunna ta reda på en dators MAC-adress.
Då skulle ett enkelt icke grafiskt skript kunna se ut som detta:

$strComputer = "."


$colItems = get-wmiobject -class "Win32_NetworkAdapterConfiguration" -computername $strComputer | Where{$_.IpEnabled -Match "True"}

foreach ($objItem in $colItems) {

    $myDesc = $objItem.Description

    $myMACAddress = $objItem.MACaddress

    $myDesc + "  " + $myMACAddress

}

 

Och resultatet blir följande i ett kommandofönster:

Intel(R) WiFi Link 5100 AGN  00:26:C6:C0:59:4C
VMware Virtual Ethernet Adapter for VMnet1  00:50:56:C0:00:01
VMware Virtual Ethernet Adapter for VMnet8  00:50:56:C0:00:08

I detta exempel måste användaren gå in i skriptet och ändra datornamn, spara om skriptet och köra det.

Om vi istället använder oss av Sapiens Primal Forms, som även finns i en gratisversion (Community Edition), så kan vi skapa ett grafiskt gränssnitt på bara ett par minuter i ett program som liknar Visual Studio.

 



 

Det första som vi måste göra innan vi börjar bygga gränssnittet är att fundera på vad vi behöver.

I detta fall tycker jag att vi behöver:

·         en Textbox för inmatningen av datornamnet

·         en Richtextbox för output

·         en knapp för att köra sökningen av MAC-adressen

·         en knapp för att rensa inmatningen och outputen

·         en knapp för att avsluta programmet/skriptet

·         en Picturebox för företagslogga

·         en ikon för progrmmet/scriptet

·         två GroupBoxar för att snyggt rama in textboxen och Richtextboxen.

Detta kan se mycket ut men tack vare PrimalForms så är det bara att dra och släppa det vi vill ha.

 

Varje objekt vi lägger till har ett default-namn, till exempel textbox1 eller button1.
Ett tips är att döpa om namnen på de objekt som man vet med sig att man kommer att koppla saker till. Jag har döpt mina knappar till btnQuit, btnClear och btnGet.  Detta innebär att det är mycket enklare vid nästa steg i byggandet av programmet.

Nu har vi en bra början till ett grafiskt program.

Det är dags att exportera detta till PowerShell-kod så att vi kan börja lägga in vår egna PowerShell-kod.

Klicka på knappen Export to PowerShell och sedan Export to Clipboard.

 

 

Detta gör att vi kan öppna upp vår favoriteditor och klistra in koden, och redan när vi gjort detta kan vi köra skriptet och få upp vårt grafiska gränssnitt.

 

 

Dock så fungerar ingenting och för att avsluta programmet måste vi trycka på krysset i högra hörnet.

För att koppla lite händelser till våra knappar så letar vi upp avsnittet med
”Generated Event Script Blocks”

#----------------------------------------------

#Generated Event Script Blocks

#----------------------------------------------

#Provide Custom Code for events specified in PrimalForms.

$btnQuit_OnClick=

{

#TODO: Place custom script here

}

$btnClear_OnClick=

{

#TODO: Place custom script here

}

$btnGet_OnClick=

{

#TODO: Place custom script here

}

 

För att avsluta/stänga ner vårt program så använder vi $form1.close().
$form1 är kopplat till vår form som heter form1 och close() stänger helt enkelt ner formen.

$btnQuit_OnClick=

{

       $form1.close()

}

 

Knappen clear ska rensa dels computer-textrutan och dels informations-textrutan.
Alla våra objekt har olika properties för olika saker och den för text är .text.
För att rensa ett textfält så skriver vi antingen .text = ”” eller .text = $null

$btnClear_OnClick=

{

       $txtComputer.text = $null

       $richTBInfo.text = $null

}

 

Nu har vi bara själva informationshämtningen kvar.
Som ni ser använder jag samma snutt som jag använde när vi fick ut informationen i ett kommandofönster. Skillnaden är att jag använder $txtComputer.text, som är inmatningsrutan för computer, för datornamnet istället för ett fast värde.

Sedan använder jag $richTBInfo.text som är informationsfältet för output.
+= gör att den lägger till fler rader om det behövs och  gör att nästa output kommer på raden efter.

$btnGet_OnClick=

{

       $strComputer = $txtComputer.text

       $colItems = get-wmiobject -class "Win32_NetworkAdapterConfiguration" -computername $strComputer | Where{$_.IpEnabled -Match "True"}

       foreach ($objItem in $colItems) {

              $myDesc = $objItem.Description

              $myMACAddress = $objItem.MACaddress

              $richTBInfo.text += $myDesc + "  " + $myMACAddress + "`n"

       }

 

Man kan givetvis lösa detta på många olika sätt och man kan ha felhantering och koll på om datorn är igång.

Slutprodukten av exemplet i denna artikel blir följande:

 

 

För att kunna köra detta krävs bara att användaren har PowerShell och att ikoner och bilder är tillgängliga. Det innebär att man kan ha detta liggande på ett share och uppdatera när man vill. På så sätt slipper man att den enskilda användaren behöver uppdatera något lokalt på sin dator.

Vill du ta del av detta skript eller är du intresserad av vad mer man kan göra grafiskt med PowerShell så hör gärna av dig på fredrik.wall@steria.se.

Primal forms Community Edition
http://www.primaltools.com/downloads/communitytools/

Många ikoner
http://www.iconarchive.com

Fredrik Wall, Steria
Senior Infrastructure Engineer



De åsikter och idéer som uttrycks i texten är skribentens egna, och delas inte nödvändigtvis av Microsoft AB eller dess representanter.