AutoIt gebruiken om vensters en knoppen te sturen
RunAsWait is de AutoIt-functie die je gebruikt als je een taak wilt starten met andere rechten en wilt wachten tot die taak klaar is.dat is handig als iets alleen werkt als beheerder, of juist als een andere gebruiker nodig is. Code Bever laat je hier zien waar dit voor dient en hoe je het netjes gebruikt.
Wanneer heb je dit nodig?
Soms wil je een taak starten die meer rechten nodig heeft dan je script op dat moment heeft. Denk aan iets dat anders meteen fout gaat omdat het geen toegang heeft tot een map, registerinstelling of systeemtaak.
RunAsWait is dan handig. De functie start het programma of script onder een andere gebruiker of met andere inloggegevens en wacht tot het proces klaar is. Je script gaat dus pas verder als die stap klaar is.
Dat is fijn als je eerst iets wilt uitvoeren en daarna meteen verder wilt gaan met de volgende stap. Je hoeft dan niet zelf steeds te blijven controleren of het al klaar is.
Wat doet RunAsWait precies?
De bron draait om één duidelijke techniek: tijdelijk andere rechten gebruiken.
Met RunAsWait kun je iets starten als een andere gebruiker. Je geeft inloggegevens mee, en AutoIt wacht daarna tot het gestartte programma stopt. Het is dus niet alleen “starten”, maar ook “wachten”.
Dat verschil is belangrijk.Met een gewone start ga je direct door in je script. Met RunAsWait houd je even pauze tot de taak klaar is. Dat maakt de volgorde van je script netter en voorspelbaarder.
De basis in simpele woorden
- RunAs: start iets met andere rechten, maar wacht niet standaard.
- RunAsWait: start iets met andere rechten en wacht tot het klaar is.
- Rechten: wat je wel en niet mag doen op een pc.
Zo werkt het stap voor stap
Je geeft eerst aan onder welke accountnaam het programma moet lopen. Daarna geef je wachtwoord, domein en het pad naar het bestand mee. AutoIt start het programma dan onder die gebruiker.
De volgorde is dus:
- Kies de gebruiker.
- Geef het wachtwoord mee.
- Geef de domeinnaam of lege waarde mee.
- zet het pad naar het programma of script neer.
- Wacht tot het proces klaar is.
Dat klinkt groot,maar het idee is simpel. Je vraagt even om andere rechten, voert één taak uit, en gaat daarna weer verder.
Voorbeeldcode
Hier is een simpel voorbeeld. Het laat zien hoe je een programma start met RunAsWait en wacht tot het klaar is.
; Start een programma met andere rechten en wacht tot het klaar is
Local $iPID = RunAsWait("beheerder", @ComputerName, "Wachtwoord123", 0, "C:ToolsMijnTaak.exe", "", @SW_SHOW)
If @error Then
MsgBox(16, "Fout", "RunAsWait is mislukt.")
Else
MsgBox(64, "Klaar", "De taak is klaar.")
EndIf
In dit voorbeeld zie je een paar vaste delen:
- beheerder is de gebruikersnaam.
- @computername staat hier voor de domein- of pc-naam.
- Wachtwoord123 is het wachtwoord.
- 0 is een extra optie die in de bron bij de functie hoort.
- C:toolsMijnTaak.exe is het bestand dat je wilt starten.
- @SW_SHOW zorgt voor de vensterstand.
Neem dit niet blind over. de echte waarden moet je invullen voor jouw situatie.
Wat betekenen de stukken?
Hier is een klein overzicht van de belangrijkste parameters uit de bron:
| Onderdeel | Wat het doet |
|---|---|
user | De naam van de gebruiker onder wie je wilt starten |
domain | De domeinnaam of computernaam |
password | Het wachtwoord van die gebruiker |
flag | Extra startoptie |
program | Het bestand dat je wilt starten |
workingdir | de werkmap |
showflag | Hoe het venster moet worden getoond |
De bron laat ook zien dat
RunAsWait
een waarde teruggeeft. Als het lukt, krijg je een proces-ID terug. Als het misgaat, kun je met
@error
zien dat er een fout is.
Wanneer is dit handig?
Deze functie is nuttig als je een taak hebt die maar onder een andere gebruiker goed werkt. Dat kan bijvoorbeeld zijn als een bestand alleen bereikbaar is voor een beheerder, of als je een stap wilt doen die anders door een rechtenfout stopt.
Ook handig is het als je script netjes moet wachten. Stel dat je eerst iets wilt installeren of aanpassen en pas daarna een tweede stap wilt doen. Dan is wachten tot de eerste taak klaar is vaak precies wat je nodig hebt.
Kort gezegd: gebruik RunAsWait als je andere rechten nodig hebt én de uitkomst meteen verder gebruikt.
Veiligheidswaarschuwing
Geef een wachtwoord niet zomaar vrij in een script. Dat is gevoelig. Zet het niet op een plek waar anderen het makkelijk kunnen lezen.
gebruik dit alleen als het echt nodig is. Meer rechten geven betekent ook meer risico. Een fout in je script kan dan meer schade maken dan je wilt. Denk dus goed na of deze stap nodig is, en test eerst op een veilige pc.
Veelgemaakte fout
Een veelgemaakte fout is dat mensen vergeten dat RunAsWait wacht tot het proces klaar is. Dan lijkt het alsof het script “stil hangt”, terwijl het eigenlijk gewoon bezig is.
Een andere fout is een verkeerde gebruiker, domein of werkmap. Dan start het proces niet goed, of stopt het meteen met een fout. Ook een fout wachtwoord geeft natuurlijk gezeur.
Let dus op deze punten:
- juiste gebruikersnaam
- juist wachtwoord
- juiste domein- of pc-naam
- juist pad naar het programma
- een werkmap die echt bestaat
Kleine test
Wil je snel kijken of je basis goed staat? begin dan met een simpel programma dat je echt kunt starten. Gebruik geen ingewikkelde taak als eerste test.
Een kleine variant kan er zo uitzien:
Local $iPID = RunAsWait("beheerder", @ComputerName, "Wachtwoord123", 0, "C:windowsSystem32notepad.exe", "", @SW_SHOW)
If @error Then
ConsoleWrite("Fout bij starten" & @CRLF)
Else
consolewrite("Taak is klaar" & @CRLF)
EndIf
Deze test is handig omdat je snel ziet of het starten met andere rechten lukt. Als dit werkt, kun je daarna je echte taak proberen.
Bevers gedachte
RunAsWait is geen grote truc, maar wel een slimme. Je geeft even andere rechten mee, laat de taak lopen en wacht rustig af. Dat is vaak precies wat je nodig hebt als een actie anders op een rechtenfout stukloopt.
Hou het veilig, gebruik het alleen als het nodig is, en test eerst klein. dan blijft je script rustig werken. 🦫
