我有一个应用程序(除此之外)需要调用New-MailContact cmdlet并在Active Directory中创建联系人。我已经跟踪了一些技术文章,但我仍然没有工作。
我已验证我使用的服务帐户是否具有基于this TechNet page的正确身份验证。我能够从powershell中找到并调用cmdlet,并且我没有收到任何错误。
然而,在运行后我检查了我的OU并且没有创建我的联系人。我发现this KB文章我认为可能会怀疑,但由于cmdlet在调用后没有返回任何错误,我不能确定这会解决我的问题。
以下是我正在做的事情的片段:
public bool CreateMailContactObject(ADExchangeContact adExchangeContacts)
{
Collection<PSObject> results;
Pipeline pipeLine = null;
try
{
var runspaceConfiguration = RunspaceConfiguration.Create();
PSSnapInException snapInException;
var snapInInfo = runspaceConfiguration.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);
using (var runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))
{
var newMailBoxContact = new Command("New-MailContact");
newMailBoxContact.Parameters.Add("Name", adExchangeContacts.DisplayName);
newMailBoxContact.Parameters.Add("ExternalEmailAddress", adExchangeContacts.ExternalEmailAddress);
newMailBoxContact.Parameters.Add("OrganizationalUnit", adExchangeContacts.OrganizationalUnit);
newMailBoxContact.Parameters.Add("Alias", adExchangeContacts.Alias);
runspace.Open();
pipeLine = runspace.CreatePipeline();
pipeLine.Commands.Add(newMailBoxContact);
results = pipeLine.Invoke();
_log.DebugFormat("results.Count = {0}", results.Count);
results.ForEach(x => x.Properties.ForEach(y => _log.DebugFormat("{0}: {1}", y.Name, y.Value)));
pipeLine.Stop();
runspace.Close();
}
return true;
}
catch (Exception ex)
{
// Add log statement
_log.ErrorFormat("Creation of Mail Contact in AD Failed. Error: {0}", ex);
return false;
}
}
我没有得到任何异常,我的结果列表在Pipeline调用中是空的。有什么我想念的吗?如果在AD中创建联系人时由于权限而导致cmdlet失败,我不希望从pipeLine.Invoke()
中收到结果集中的某种错误吗?
我是运行Powershell的新手,所以如果还有其他问题(知识库文章之外),请随时告诉我。
答案 0 :(得分:1)
if (pipeline.Error != null && pipeline.Error.Count > 0)
{
StringBuilder pipelineError = new StringBuilder();
pipelineError.AppendFormat("Error calling Add-MailboxPermission.");
foreach (object item in thisPipeline.Error.ReadToEnd())
{
pipelineError.AppendFormat("{0}\n", item.ToString());
}
ErrorText = ErrorText + "Error: " + pipelineError.ToString() + Environment.NewLine;
}
请将此代码放在 pipeline.Invoke()之后,并检查其中是否有错误
<强>更新强> 我认为这是错误的,给予用户正确的许可,一些解决方案:
http://boardreader.com/thread/Microsoft_Exchange_2010_wont_allow_new_M_1w69j__37ad9f8a-cdcf-4d26-9384-00ad1a3d0f91.html
http://blogs.technet.com/b/richardroddy/archive/2010/07/12/exchange-2010-and-the-exchange-trusted-subsystem.aspx