问题
I have an application that I use to run Exchange Powershell commands inside C# code like below. This is an example of the relevant lines I use to run the powershell command.
RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
PSSnapInException snapInException = null;
//load Exchange shell
rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException);
Runspace runSpace = RunspaceFactory.CreateRunspace(rsConfig);
//open runspace
runSpace.Open();
//setup pipeline
Pipeline pipeLine = runSpace.CreatePipeline();
String sScript = "get-mailbox -identity 'rj'";
//add script to pipeline
pipeLine.Commands.AddScript(sScript);
//run the script
pipeLine.Invoke();
pipeLine.Dispose();
This code works perfect in all cases until now. the script I am trying to run instead of the one above is to set the RetentionPolicy for a mailbox. The script I am trying to run looks like this:
Set-Mailbox -Identity 'rj' -RetentionPolicy 'Main Campus Retention Policy'
When I run this in powershell itself it works perfectly but when I try to run it using the code below I get the error, "Cannot invoke this function because the current host does not implement it."
From this error, it almost seems like the command that runs in C# cannot run the RetentionPolicy command but that doesn't make much sense. I have Googled this and tried everything suggested but no luck.
If anyone knows why this is happening, it would be very helpful.
回答1:
If that command would normally prompt for confirmation then you will need to either:
- Set
-Confirm:$false
as a parameter (and possibly-Force
as well) - Set
$ConfirmPreference = "None"
before calling Set-Mailbox (and possibly-Force
too) - Create a Host and implement the Confirm functionality ;-)
来源:https://stackoverflow.com/questions/4219095/running-a-powershell-command-in-c-sharp-errors-with-cannot-invoke-this-functio