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

标签 c# powershell exchange-server

我正在尝试通过 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 地址,但是 是否有一些我缺少的标志强制“添加”工作?

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 在这方面的灵 active ,任何实现 IEnumerable 的东西都应该这样做。)

关于c# - 使用 Set-SenderFilterConfig 添加而不是替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37727540/

相关文章:

c# - EF 生成的类和模型之间的关系?

email - 我可以使用PowerShell将电子邮件附件从Office 365保存到文件共享吗?

rest - 运行简单的未经授权的 Rest 查询时发生意外错误

powershell - PowerShell,Exchange 2010通讯簿

java - 通过 microsoft exchange Server api (java) 发送电子邮件

c# - 通过 Winform 应用程序创建环境变量,非常慢

c# - 这个错误是什么意思?远程主机关闭了连接。错误代码为 0x80070057

c# - Linq 加入空引用

c# - 字符串缺少终止符 : "

c# - EWS : 'Set action is invalid for property' when editing RequiredAttendees