De Helion IT Servicedesk tool
- Hits: 962
- 0 reacties
- Abonneer op updates
- Afdrukken
Het is alweer een tijdje stil geweest van mijn kant, dus heb ik besloten maar weer eens ergens een stukje over te schrijven. Het vervolg op laat nog eventjes op zich wachten aangezien ik de laatste tijd wat andere prioriteiten gehad heb. Om jullie toch iets te lezen te geven heb ik iets geschreven over een tooltje dat ik de laatste tijd aan het ontwikkelen geweest ben.
Mijn huidige opdrachtgever heeft de wens om de beheeromgeving te versimpelen. Momenteel wordt er gebruik gemaakt van Altiris en SCCM, waarvan de laatste mag blijven. Gelukkig kan SCCM aardig veel van dezelfde trucjes als Altris en een aantal andere functies kan door middel van Group Policy beheerd worden. Toch merken we dat een aantal simpele handelingen via SCCM net wat te veel moeite kosten of toch niet werken zoals gehoopt. Tijd om wat in elkaar te prutsen; de Helion IT Servicedesktool!
Voordat we verder gaan, moet ik wel iets bekennen: ik ben geen programmeur. Programmeren heeft me nooit echt veel gedaan dus dat boek heb ik nooit opengeslagen. Gelukkig ken ik precies genoeg HTML en VBscript om toch een tool in elkaar te kunnen zetten. Het is vast niet de meest efficiënte, veilige of mooie manier om iets te maken, maar hè, het werkt!

Zoals je op dit screenshot zit er ondertussen al aardig wat functionaliteit in de tool. Eigenlijk zijn de functies redelijk chronologisch opgebouwd. Ik begon ooit met "Offer remote assistance to computer", aangezien deze simpele actie via SCCM net wat te omslachtig is. Daarna hebben we er steeds weer iets nieuws bij bedacht.
De tool is zoals ik eerder zei op HTML en VB Script gebaseerd. Normaalgesproken werken die twee niet heel erg goed samen, maar wanneer je je HTML-bestand als .HTA opslaat wordt het ineens een "Hyper Text Application" en zijn er heel wat meer dingen mogelijk. Omdat de "website" lokaal uitgevoerd wordt en alle beveiligingsopties die normaal bedoeld zijn om je tegen het grote boze internet te beschermen worden uitgeschakeld, hebben we wat meer ruimte om leuke dingen te doen.
Gebruik en ontwikkeling
De Helion IT Servicedesktool is voorlopig gewoon gratis te downloaden en je kunt als je dat wil zelf functies aanpassen of bijbouwen. Het bestand is gewoon te openen met je favoriete tekst editor, zoals bijvoorbeeld Notepad++.
De tool is getest onder Windows 7 64-bit in een Active Directory 2008 domein. Voor de meeste functies zijn wel voldoende rechten in AD en op de computer van de gebruiker nodig.
De werking
Voordat ik alle functies van de tool ga bespreken wil ik eerst uitleggen hoe de meeste functies werken. Hier onder zie je de de code van "Offer remote assistance":
Set WshShell = CreateObject("WScript.Shell")
If FORM1.text.value = "Computername" Then
msgbox "Please input computername"
Else WshShell.Run "c:\windows\system32\msra.exe " & "/offerra " & FORM1.text.value
End If
Ik zal je niet vervelen met de opmaak van het programma; dat is gewoon HTML en daar kom je vast wel uit. De code zullen we deel voor deel bespreken.
Aan de basis van elke functie staat een HTML form. Elk nieuw form moet een unieke naam hebben, in het voorbeeld "FORM1". Door een form te maken kunnen we binnen het form data ingeven (computernaam) en een actie uitvoeren (connect knop) waardoor een script uitgevoerd wordt, dat de invoer uit het form kan gebruiken.
In het tweede deel wordt een "INPUT"-waarde gegeven, waardoor we een tekstbox krijgen. Het is belangrijk dat de tekstbox een naam krijgt zodat we de input later kunnen identificeren, de naam wordt gegeven dmv. "NAME="text". Ook zie je in het stukje code de waarde "value=". Hiermee bepalen we wat er vooraf al in de tekstbox staat, en wat het gedrag is bij bepaalde acties. In dit geval wordt er voor gezorgd dat er standaard "computername" in het veld staat en dat wanneer we er in klikken het veld leeg is, zodat we de computernaam in kunnen geven. Ook zit hier een stukje in om te zorgen dat wanneer we de computernaam ingegeven hebben, en we op de enter knop drukken, het volgende element (Connect) aangesproken wordt. Dit wordt gedaan door:
Wat hier eigenlijk staat is "als er een knop ingedrukt wordt, en deze knop is knop '13' (enter), zoek dan het element 'msra' en klik hier op".
Uiteindelijk hebben we inclusief de opmaak deze code als volgende deel:
Nu we een invulveld hebben, moet er natuurlijk een knop naast komen om de connectie te maken. Deze ziet er zo uit:

Net zoals het vorige stukje code is dit weer een "input" veld, alleen deze keer van het type "button", in plaats van text. De "name" is zoals je ziet "msra", deze naam wordt door het vorige stukje code aangesproken wanneer we op de enter knop drukken.
Als laatste wordt er een vbscript uitgevoerd. De input type "button" kan onder zich namelijk een script of andere actie (vbscript, javascript, meer html, nieuw scherm etc.) aanspreken.
Set WshShell = CreateObject("WScript.Shell")
If FORM1.text.value = "Computername" Then
msgbox "Please input computername"
Else WshShell.Run "c:\windows\system32\msra.exe " & "/offerra " & FORM1.text.value
End If
Dit deel begint met "SCRIPT FOR="msra"" en het event "onClick". Wanneer er dus op het element "msra" geklikt wordt dan wordt het script uitgevoerd. In "LANGUAGE" stellen we de scripttaal in, in ons geval VBScript.
Hier na begint meteen het VBscript. Na het klikken op "Connect" (msra) wordt dit script meteen uitgevoerd. In dit geval kijkt het script eerst of het veld niet blanco is of de standaard waarde "computername" heeft en geeft in dat geval een foutmelding "Please input computername". Is dit niet het geval, dan wordt msra.exe uitgevoerd met de "/offerra" (offer remote assistance) switch, en daarna de input uit de textbox. Deze spreken we aan als "FORM1.text.value". In normale mensentaal begrijpen we dit als "De waarde uit het element "text" van "FORM1"".
Nog wat code om te zorgen dat alles netjes afgesloten wordt:

En dat is het! We kunnen de computernaam van de "gebruiker in nood" invullen, drukken op "Connect" en de gebruiker krijgt de vraag of hij of zij de hulp wil accepteren of niet.
Overige functies
"Open remote control to computer"
Na de "Offer remote assistance" functie was "Open remote control" een logische opvolger. Deze functie werkt op de achtergrond precies hetzelfde als zijn voorganger, alleen wordt in plaats van "MSRA /offerremote" de functie "mstsc /v" aangesproken. Dit is gewoon remote desktop en kan gebruikt worden voor servers of werkstations waar niemand op ingelogd is.
"Open homedir / user profile for user"
De volgende twee functies waren een wat grotere uitdaging. We wilden graag op een makkelijke manier de homedirectory en profiledirectory van een gebruiker aanspreken. Nou klinkt dat niet zo lastig, maar we moesten een klein obstakel overwinnen: meerdere fileservers.
In eerste instantie opende het script gewoon de root van de homedirectories op de fileserver (bijvoorbeeld \\server\home$\) en daar achter de gebruikersnaam. Nou is dat voor een klein bedrijfje met weinig gebruikers en een enkele fileservers voldoende, maar bij mijn huidige klant hadden we het over een kleine 900 gebruikers en tien fileservers. Na wat zoeken, knippen en plakken had ik uiteindelijk een mooi script; het script kijkt van welk domein je lid bent, zoekt in dat domein de gebruiker op en leest de waarde "profilePath" of "homeDirectory" op. Vervolgens wordt die waarde geopend in een explorer scherm, zodat we het profiel of de homedirectory van de gebruiker zien.
"Shutdown / Reboot remote computer"

Deze twee functies waren erg makkelijk en zijn qua code hetzelfde als de eerste functies. Computernaam ingeven en op "Reboot" of "Shutdown" drukken. Nu ik dit schrijf besef ik dat dit best een enkele functie met twee verschillende knoppen had kunnen zijn, dus dat pas ik misschien later nog aan.
Wanneer je een computer afsluit of opnieuw opstart krijgt de gebruiker eerst een minuut lang een melding in beeld "Reboot initiated by your servicedesk".
"Change password / Unlock user"
Wat doet een servicedesk voornamelijk? Juist. Accounts unlocken en wachtwoorden resetten. Genoeg reden om deze functies op te nemen in de tool.
De functie "Change password for user" is (naar mijn weten) de enige functie met wat bugs. Wanneer het ingegeven nieuwe wachtwoord niet voldoet aan de complexiteitseisen, zie je een vbscript error, hier van is het me nog niet gelukt om de foutmelding te ondervangen met een nette messagebox.
De tweede bug is een beetje lastig. Het script voert de functie "objUser.put "pwdLastSet", 0" uit. Dit zou er voor moeten zorgen dat de gebruiker bij het inloggen de vraag krijgt om het wachtwoord te wijzigen (zoals dat bij nieuwe accounts meestal is), zodat de gebruiker niet 90 dagen met "Welkom01" moet inloggen. Helaas wordt deze waarde in onze productieomgeving niet altijd goed gebruikt.
Verder zijn deze twee functies hetzelfde als de "Open user profile"-functie, alleen in plaats van een waarde in de gebruikersaccount ergens voor te gebruiken, passen we deze waarde aan.
"Show logged on user"

Met deze functie kun je zien wie er op een bepaalde computer ingelogd is. De informatie wordt uit de computer zelf gehaald en is dus niet afhankelijk van active directory of een agent op de client.
Terwijl ik deze functie aan het maken was bedacht ik me ook dat het wel handig zou zijn als dit ook andersom zou kunnen werken. Vul een gebruikersnaam in en krijg als reactie de computernaam waarop deze gebruiker ingelogd is. Helaas heb ik hier nog geen goede manier voor gevonden. Ik heb een script liggen dat AD uitleest en zoekt naar de specifieke gebruiker, maar dit script gaat elke computeraccount af en vraagt of de gebruiker toevallig daar ingelogd is: wat mij betreft een manier die net wat te veel impact heeft op de omgeving, dus hopelijk bedenk ik in de toekomst nog een betere manier.
"Show AD info for user"
Deze functie werkt weer hetzelfde als de "Open user profile" functie, alleen in plaats van een actie te starten, wordt de data gewoon weergegeven. Het script haalt de "distinguishedName", "canonicalName" en "memberOF" waardes op en zoekt later in het script ook nog naar de "AccountExpirationDate". Wat we overhouden is een mooi overzicht van de groepen waar een gebruiker lid van is, welke OU de gebruiker in staat en wanneer de gebruikersaccount verloopt.
Natuurlijk is het makkelijk om nog wat meer informatie uit AD te halen, wat je maar wil. De enige uitdaging die je tegen kunt komen is het feit dat sommige informatie binair, hexadecimaal of op een andere aparte methode in AD opgeslagen is, en je deze informatie dus eerst moet "vertalen"
De servicedesktool in de toekomst
Ik ga in mijn vrije tijd verder met het ontwikkelen van meer functies en het oplossen van een aantal bugs. Mocht ik merken dat mensen deze tool echt gaan gebruiken, dan zal ik overwegen om toch eens dat boek over programmeren open te slaan.
Mocht je vragen, opmerkingen of ideeën hebben, dan hoor ik het graag! Je kunt me een mailtje sturen of op dit blog reageren.
Download de tool Hier (Rechtermuisknop, opslaan als .hta)




Laat uw reactie achter