目标是获取Exchange 2010站点的最小数据库,因此我正尝试从c#运行以下powershell命令:
Get-MailboxDatabase -server Exchange2010 -Status | select-object Name,DatabaseSize
我的翻译如下:
我正在困扰的问题是-如何管道化Select子句命令。
这是我的尝试,
WSManConnectionInfo wsConnectionInfo = new WSManConnectionInfo(new Uri("https://" + ExchangeSite + "/powershell?serializationLevel=Full"),
"http://schemas.microsoft.com/powershell/Microsoft.Exchange", getCredential());
wsConnectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
wsConnectionInfo.SkipCACheck = true;
wsConnectionInfo.SkipCNCheck = true;
rsRemoteRunspace = RunspaceFactory.CreateRunspace(wsConnectionInfo);
rsRemoteRunspace.Open();
Pipeline pipeLine = rsRemoteRunspace.CreatePipeline();
Collection<PSObject> DatabaSize = null;
Command myCommand = new Command("Get-MailboxDatabase");
myCommand.Parameters.Add("Server", "Exchange2010");
myCommand.Parameters.Add("Status", null);
Command myCommand2 = new Command("Select-Object");
myCommand.Parameters.Add("Name");
myCommand.Parameters.Add("DatabaseSize");
pipeLineMB.Commands.Add(myCommand);
pipeLineMB.Commands.Add(myCommand2);
DatabaSize = pipeLine.Invoke();
但是我正在接收到,
"A parameter cannot be found that matches parameter name 'Name'."
请记住,我无法使用 SnapIn,因为代码必须在执行 Exchange 服务器的 cmdlet 的客户端机器上运行。
欢迎任何建议。
编辑
我应用了 yamen 建议的修复方法,命令能够被调用,但当我尝试获取值时,我得到了这样的错误:"对象引用未设置到对象的实例。"
请注意,我可以获取 Servername 和 Name 的值,但在 DatabaseSize 中失败,所以我猜测 'Status' 标志没有被正确设置,因为这个标志是启用该值的标志。