2016-06-09 11 views
2

Ich versuche, PowerShell über eine C# -Konsolen-App remote zu verwenden, um der gesperrten Liste Domänen und Absender hinzuzufügen.Verwenden von Set-SenderFilterConfig zum Hinzufügen statt Ersetzen

Ich versuche, die Syntax von https://technet.microsoft.com/en-us/library/aa996920(v=exchg.160).aspx zu verwenden, um nur die Sammlung zu ergänzen, anstatt sie zu ersetzen (was ich schon gemacht habe, Spaß mal), aber ich kann nicht scheinen, es richtig zu machen.

Der Wert der parameter ist korrekt gemäß der Syntax @ coming out {hinzufügen = „[email protected]“}, aber ich bin immer die Fehlermeldung:

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

Es ist ziemlich offensichtlich, dass das ist, wie es ist, ist keine gültige SMTP-Adresse, aber Gibt es ein Flag, das ich vermisse, das das 'Hinzufügen' zwingt zu arbeiten?

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

Antwort

1

@{Add="[email protected]"} gilt Powershell-Syntax für eine Hashtable erstellen, aber Sie sind die Parameter in C# zu konstruieren. Als Ergebnis wird dem Befehl die Zeichenfolge@{Add="[email protected]"} ohne weitere Auswertung übergeben, die dann nicht in das konvertiert werden kann, was das Cmdlet akzeptiert. Stattdessen versuchen

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

Für mehrere Absender, ein Array übergeben:

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

(Obwohl, Powershell die Flexibilität in diesem gegebenen etwas, das IEnumerable implementiert tun sollten.)

+0

Es funktioniert! Vielen Dank. Ich wünschte wirklich, es gäbe mehr Dokumentation dazu. Würde das Hinzufügen von multiple nur 'new Hashtable {{" Add ", item.Subject}, {" Add ", item2.Subject}}' oder '{" Add ", item.Subject, item2.Subject}'? – Blinx

Verwandte Themen