我正在尝试通过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();
答案 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
的任何事情都应该这样做。)