Derek Harkin did some good work with his management pack that allows agents to be placed in maintenance mode from the agent itself simply by executing a script - no requirement for powershell, .net, etc and the user who executes the script does not need any rights to OpsMgr! The script would generate an event which the management pick reads and responds to by executing a powershell script on the management server that actually does the work of putting the agent in maintenance mode.
I modified Derek's management pack to allow server owners to specify a config file on the agent and simply make additions/changes to the config file to configure when the agent should enter maintenance mode and how long maintenance mode should last. This config file can either specify a recurring weekly schedule or a one time entry. Take a look at the readme.txt for more information.