In dit tweede deel over scripting ga ik verder in op tips die je helpen om goed werkende en veilige scripts te maken. De twee onderwerpen in deze blog gaan over rechten en troubleshooting.
Er zijn twee instellingen die de rechten bepalen. Ten eerste kun je aangeven wie het script mag draaien, en ten tweede kun je bepalen wat het script mag doen.
Een gebruiker (System->User) moet minimaal de rechten hebben die het script zelf ook heeft om het script te kunnen uitvoeren. De rechten die het script heeft bepalen wat het script mag doen.
In het bovenstaande screenshot zie je een gebruiker, Henk, lid van de Operators-groep, die een script aanmaakt. Het script erft de rechten van de gebruiker. Henk mag het script vervolgens wel minder rechten geven, maar niet meer.
Henk kan het vakje ‘Don’t Require Permissions’ wel aanvinken. Dit bepaalt echter alleen wie het script mag draaien, niet wat het script mag doen. Let op: het script kan dan mogelijk handelingen uitvoeren die de gebruiker zelf niet mag. Een potentieel beveiligingslek!
Troubleshooten
Het kan voorkomen dat een script foutmeldingen geeft of niet goed werkt. Foutmeldingen zijn het eenvoudigst te herkennen; deze worden in de log weergegeven.
Het kan ook zijn dat het script niet doet wat je verwacht. Dat is lastiger, want de vraag is dan: waar gaat het mis?
Er zijn drie belangrijke zaken waar je op moet letten: de scope, het type van een variabele en waar een variabele beschikbaar is.
Allereerst is er de scope. Hiervoor zijn twee opties: Local en Global. Voor variabelen betekent Local dat de variabele alleen binnen dit script beschikbaar is. Global betekent dat de variabele ook in andere scripts gebruikt kan worden. Let op: deze kan dan worden overschreven. Gebruikelijk is om Local te gebruiken.
Daarnaast bestaat er binnen één script ook een interne scope. Variabelen zijn alleen geldig binnen de haakjes { en }. Als je binnen deze haakjes een variabele declareert, dan is deze buiten de haakjes niet bekend.
Bijvoorbeeld:
{
:local a 3;
{
:local b 4;
:log info ($a+$b);
}
:log info ($a+$b);
}
De eerste :log info geeft het getal 7 in de log; de tweede geeft 3. Het probleem is dat de variabele $b niet bekend is buiten de haakjes waar deze is gedeclareerd. De variabele $a erft wel mee naar onderliggende niveaus.
Een derde veelvoorkomend probleem is het type van een variabele in een vergelijking of zoekopdracht. Je kunt twee getallen met elkaar vergelijken en testen of de één kleiner is dan de ander, maar dat werkt niet als één van de variabelen een getal is en de andere een string (tekst).
Daarom is het handig om eerst te testen welk type een variabele heeft. Dit doe je met het commando:
:typeof
Heeft de variabele niet het gewenste type, dan kun je deze omzetten. Stel dat je er een string van wilt maken; dan gebruik je het commando:
:tostr
MikroTik heeft een hele pagina die gaat over scripting. Je vindt hem hier. De volgende keer geef ik concrete voorbeelden van een script met handige commando’s en de juiste syntax.

