title: How to check if Out of office is enabled, and if disabled, enable it
body: <p>I'm trying to build an integration with our account termination process. On termination, set out of office it has not been set yet.</p>
  
  <p>What to I put in the public main() to run - if  IsOutOfOfficeSet is not set, then do nothing and it set then run SetOutofOffice.<br>
  Otherwise, if anyone has better codes to check if out of office is set, if set then ignore, otherwise set it?</p>
  
  <pre><code>class Script : ScriptBase
  {
  
      const bool bTest = false;   //set to true to not set OOF
      const bool bDebug = false;  //set to true for more logging
      ExchangeResource2010 exchange = ProvisioningSystem.Organisation.Resources["Exchange Servers"] as ExchangeResource2010;
  
      public void main()
      {
      }
  
      public bool IsOutOfOfficeSet(UserDirectoryEntry user)
      {
          StringBuilder sb = new StringBuilder();
  
          try
          {
              foreach (PSObject o in exchange.Exec("Get-MailboxAutoReplyConfiguration", "Identity", user.DomainName, "DomainController", user.ServerName))
              {
  
                  string autoReplyState = o.Properties["AutoReplyState"].Value.ToString();
                  DateTime startTime = Convert.ToDateTime(o.Properties["StartTime"].Value);
                  DateTime endTime = Convert.ToDateTime(o.Properties["EndTime"].Value);
  
  
                  if (bDebug)
                  {
                      sb.AppendLine(String.Format("AutoReplyState={0}", autoReplyState));
                      sb.AppendLine(String.Format("StartTime={0}", startTime));
                      sb.AppendLine(String.Format("EndTime={0}", endTime));
  
                      if (Job != null)
                          Job.LogAudit("AutoReplyConfiguration", sb.ToString());
                      else
                          Trace.WriteLine("AutoReplyConfiguration\r\n" + sb.ToString());
                  }
  
  
                  if (String.Compare(autoReplyState, "Disabled") == 0)
                      return false;
  
                  if (String.Compare(autoReplyState, "Enabled") == 0)
                      return true;
  
                  if (String.Compare(autoReplyState, "Scheduled") == 0)
                  {
  
                      //If scheduled OOO has not ended then return true
                      if (endTime &gt; DateTime.Now)
                          return true;
                  }
              }
          }
          catch (Exception ex)
          {
              throw new Exception("Error retrieving auto reply configuration for " + user.DomainName, ex);
  
          }
  
          return false;
      }
  
      public void Setoutofoffice(UserDirectoryEntry user)
      {
  
          //Out of office should be termination date plus 30 days
          DateTime fromDate = DateTime.Now;
          DateTime toDate = DateTime.Now.AddDays(30); //end out of office within 30 days from today
  
          string message = Evaluator.GetString(Job, "=//Job/Task/OOOMessage");
          LogAudit("Scheduling out of office for {0} from {1} to {2}", user, fromDate, toDate);
  
          ExchangeResource exchange = ProvisioningSystem.Organisation.Resources["Exchange Servers"] as ExchangeResource;
          if (exchange == null) throw new Exception("Exchange resource is NULL");
          ((ExchangeResource2010)exchange).ExecNoResults("Set-MailboxAutoReplyConfiguration", "Identity", user.EmailAddress, "AutoReplyState", "Scheduled", "StartTime", fromDate.ToString("MM/dd/yyyy"), "EndTime", toDate.ToString("MM/dd/yyyy"), "Confirm", false, "-InternalMessage", message, "ExternalMessage", message, "ExternalAudience", "All", "DomainController", user.ServerName);
  
  
      }    
  }
  </code></pre>