如何检查外出是否启用,如果禁用,则启用它
How to check if Out of office is enabled, and if disabled, enable it
我正在尝试与我们的帐户终止流程建立集成。终止时,设置外出还没有设置。
我将 public 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);
}
}
你只是想写吗?
public void main()
{
if(!IsOutOfOfficeSet(user)){
Setoutofoffice(user);
}
}
其中用户是有效的 UserDirectoryEntry
对象
我正在尝试与我们的帐户终止流程建立集成。终止时,设置外出还没有设置。
我将 public 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);
}
}
你只是想写吗?
public void main()
{
if(!IsOutOfOfficeSet(user)){
Setoutofoffice(user);
}
}
其中用户是有效的 UserDirectoryEntry
对象