使用Set-SenderFilterConfig添加而不是替换

时间:2016-06-09 13:35:19

标签: c# powershell exchange-server

我正在尝试通过c#console应用程序远程使用PowerShell将域和发件人添加到阻止列表中。

我正在尝试使用https://technet.microsoft.com/en-us/library/aa996920(v=exchg.160).aspx中的语法来添加而不是替换集合(我已经完成了,有趣的时间),但我似乎无法正确使用它。

根据语法@ {Add =“spam@gmail.co.uk”},parameter的值正确,但我收到错误:

Cannot convert value "@{Add="spam@gmail.co.uk"}" to type "Microsoft.Exchange.Data.MultiValuedProperty`1[Microsoft.Exchange.Data.SmtpAddress]". 
Error: "Failed to convert @{Add="spam@gmail.co.uk"} from System.String to Microsoft.Exchange.Data.SmtpAddress. 
Error: Error while converting string '@{Add="spam@gmail.co.uk"}' to result type Microsoft.Exchange.Data.SmtpAddress: "@{Add="spam@gmail.co.uk"}" is not a valid SMTP address"

很明显,这不是一个有效的SMTP地址,而是 是否有一些我失踪的旗帜迫使“添加”工作?

if (acceptedDomains.Contains(item.Subject.Split('@').Last()))
{
    var parameter = new CommandParameter("BlockedSenders", @"@{Add=""" + item.Subject + @"""}");
    command.Parameters.Add(parameter);
}
else
{
    var parameter = new CommandParameter("BlockedDomainsAndSubdomains", @"@{Add=""" + item.Subject.Split('@').Last() + @"""}");
    command.Parameters.Add(parameter);
}
pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(command);
results = pipeline.Invoke();

1 个答案:

答案 0 :(得分:1)

@{Add="spam@gmail.co.uk"}是用于创建Hashtable的有效PowerShell语法,但您正在使用C#构造参数。因此,该命令将在没有进一步评估的情况下传递字符串 @{Add="spam@gmail.co.uk"},然后无法转换为cmdlet接受的内容。相反,尝试

var parameter = new CommandParameter(
    "BlockedSenders", 
    new Hashtable { { "Add", item.Subject } }
);

对于多个发件人,传递一个数组:

var parameter = new CommandParameter(
    "BlockedSenders", 
    new Hashtable { { "Add", new[] { item1.Subject, item2.Subject } } }
);

(虽然,鉴于PowerShell的灵活性,实现IEnumerable的任何事情都应该这样做。)