I’ll just add that what I have done - and I find that works better than tag change scripts - is create timer scripts and a couple memory tags to track the last time the script ran and any time configuration tags you may want. Then create an expression tag that automatically updates to the next datetime to run the script based on the last run datetime and the time configuration tags. The timer script is set to run every 15 seconds or so and the first line in the script is to check if the current datetime exceeds the value of the next run time expression tag. If it’s not greater, the script just ends. If it is greater, it will update the last run time memory tag to the current datetime and run the rest of your script.
Benefit of this is that if for some reason the server is off or there is any other glitch timing wise, it will still run the script when the server is back up and you can add the configuration tags to an HMI for a user to keep up to date. If you only want a script to run at the desired time and not run after this time - even if there is a glitch that prevents it from running - then I would stick with the tag change script.
Hope this helps,