I do this in an IE based GUI application to call events in the scripts.
Each of the functions in my script registers itself, then IE fires an event which is the function - if the function is registered it is called using execute.
So, it is possible and does work. I suspect that the combination of NoVarsInStrings an doubling up the "$" is the problem.
Try this:
code:
$rc=SetOption('NoVarsInStrings','ON')
$Sections=Split(ReadProfileString($KiXLogonIni,'',''),Chr(10))
For Each $Section In $Sections
If $Section
$Discard=Execute('$rc=' + $section + '() ; Exit @ERROR')
EndIf
Next
Including the "; Exit @ERROR" preserves any @ERROR value returned by your function so that it can be tested in your main script.
I've discarded the return value from the Execute(), as I assume you are more interested in the return value of the function.