首页 > 解决方案 > 如何检查是否启用了外出,如果禁用,则启用它

问题描述

我正在尝试与我们的帐户终止流程建立集成。终止时,离任尚未确定。

我要在公共 main() 中运行什么 - 如果未设置 IsOutOfOfficeSet,则什么也不做,然后设置然后运行 ​​SetOutofOffice。
否则,如果有人有更好的代码来检查是否设置了外出,如果设置则忽略,否则设置它?

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


    }    
}

标签: c#exchange-serverexchange-server-2010

解决方案


你只是想写吗?

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

用户是有效UserDirectoryEntry对象的地方


推荐阅读