Script has been updated and moved: https://gallery.technet.microsoft.com/exchange/Update-public-holiday-bed9ca60
As you may or may not know, Outlook has a facility to import known public holidays. However, currently while these holidays will be imported into the Outlook calendar, the status of these holidays is set to Free. An often received request is for advice on how to change this status to Busy, or OOF. If you search the internet, there are quite a few examples of scripts that can do this within Outlook - but how to do this on an orgnaisation level?
PowerShell and EWS can be used to process mailboxes directly on Exchange. The holidays that are imported are all identified by being category "Holiday", so all we need to do is go through the calendar folder of a mailbox and change the status of all appointments categorized as Holiday. I've attached a PowerShell script that does exactly this. It can be used to change the status as desired, and the parameters are described below.