目标是获取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'标志没有正确设置,因为这个标志是启用此值的标志。
答案 0 :(得分:4)
你的意思是:
Command myCommand2 = new Command("Select-Object");
myCommand2.Parameters.Add("DatabaseSize");
而不是:
Command myCommand2 = new Command("Select-Object");
myCommand.Parameters.Add("DatabaseSize");
在第二行注意myCommand2
?
无论如何,你可能会发现你实际参与的参数是Property
即:
myCommand2.Parameters.Add("Property", "DatabaseSize");
不止一个:
var props = new string[] { "DatabaseSize", "ServerName", "Name" };
myCommand2.Parameters.Add("Property", props);
答案 1 :(得分:2)
我刚试过这个,有一个类似的场景
dir | select Name
它不起作用。给我同样的错误,说'Name'不是一个有效的参数。然后我尝试了以下,它的工作原理
dir | select -first 3
转换为
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
Command dir = new Command("dir");
pipeline.Commands.Add(dir);
Command select = new Command("select");
select.Parameters.Add("first", 3);
pipeline.Commands.Add(select);
我猜你需要找到DatabaseSize
为值的参数名称。