简体   繁体   中英

How to check if Out of office is enabled, and if disabled, enable it

I'm trying to build an integration with our account termination process. On termination, set out of office it has not been set yet.

What to I put in the public main() to run - if IsOutOfOfficeSet is not set, then do nothing and it set then run SetOutofOffice.
Otherwise, if anyone has better codes to check if out of office is set, if set then ignore, otherwise set it?

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 > 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);


    }    
}

Do you just want to write?

public void main()
{
    if(!IsOutOfOfficeSet(user)){
        Setoutofoffice(user);
    }
}

Where user is a valid UserDirectoryEntry object

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM