Just so that it's somewhere that someone else can find it, since it's currently not anywhere else on Google I could find:
Exchange has a server-side out-of-office feature, which is nice, but the only scheduling you can do is by a single datespan, which is awful. Especially considering how integrated the calendar server is and that you can have appointments "show time as" "out of office", which Exchange does nothing with, other than outline the appointment in purple.
I've spent hours trying to figure out how to automate this so I can have it automatically be on Tuesday and Thursday mornings between 6 and 11. I finally figured that you can do it by scheduling something to poke Exchange's WebDAV server:
PROPPATCH /exchange/userid/NON_IPM_SUBTREE HTTP/1.1
Host: servername
Authorization: Basic base64-encoded-username:password
Content-Type: text/xml; charset="utf-8"
Content-Length: 234
<?xml version="1.0" encoding="UTF-8" ?>
<a:propertyupdate xmlns:a='DAV:' xmlns:d='http://schemas.microsoft.com/exchange/'>
<a:set>
<a:prop>
<d:oof-state>0</d:oof-state>
</a:prop>
</a:set>
</a:propertyupdate>
"oof-state" should be set to 0 for off and 1 for on. And remember that network communications need \r\n and not just \n as EOLs. (234
is the correct length for that message.) The update happens immediately, which you can see with the "Out of Office Assistant" dialog in Outlook.
I just set up a perl script to send that data and ran it from cron.
I hope that helps someone.