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

Using Set-SenderFilterConfig to Add rather than Replace

我正在尝试通过 c# 控制台应用程序远程使用 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 地址,但是 是否有一些我缺少的标志迫使 'Add' 工作?

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

@{Add="spam@gmail.co.uk"} 是用于创建 Hashtable 的有效 PowerShell 语法,但您是在 C# 中构造参数。因此,命令将被传递 string @{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 的东西都应该这样做。)