c# Exchange PowerShell pipeLine Invoke为空参数值引发CmdletInvocatio
本文关键字:参数 CmdletInvocatio Exchange PowerShell pipeLine Invoke | 更新日期: 2023-09-27 18:17:09
我试图获得一个简单的PowerShell命令输出到c#中,使用在System.Management.Automation
命名空间中发现的功能。
我的机器上有Exchange控制台,并且可以从控制台成功地发出命令,但是从c#中我得到一个我不理解的错误。
下面是应该获得一些简单服务器信息的示例代码:static void Main(string[] args)
{
RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
PSSnapInException snapInException = null;
PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException);
using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig))
{
myRunSpace.Open();
using (Pipeline pipeLine = myRunSpace.CreatePipeline())
{
Command serverCommand = new Command("Get-MailboxServer");
pipeLine.Commands.Add(serverCommand);
Collection<PSObject> server = pipeLine.Invoke();
foreach (PSObject cmdlet in server)
{
string cmdletName = cmdlet.Properties["Name"].Value.ToString();
Console.WriteLine(cmdletName);
}
}
}
}
实际错误发生在pipeLine.Invoke()行:
System.Management.Automation。CmdletInvocationException未处理
值不能为空。
参数名称:parameters
源= System.Management.Automation
我已经尝试添加参数,例如服务器身份,但同样的事情发生:
using (Pipeline pipeLine = myRunSpace.CreatePipeline())
{
Command serverCommand = new Command("Get-MailboxServer");
serverCommand.Parameters.Add("Identity", mbServerName);
pipeLine.Commands.Add(serverCommand);
Collection<PSObject> server = pipeLine.Invoke();
}
将这些行添加到您的app.config文件
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
我用Get-Process
替换了这个命令,它工作得很好。这似乎是一个问题,如何交换cmdlet工作(即使Get-Mailboxserver
也有一个变种,不接受任何参数。)
这个线程讨论了这个问题,并提出了一个替代解决方案:http://social.technet.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/48da1346-f47e-4ba9-9747-428fe07b4492/