C# 如何在c中使用管道powershell命令#

C# 如何在c中使用管道powershell命令#,c#,.net,powershell,exchange-server,C#,.net,Powershell,Exchange Server,目标是获得Exchange 2010站点的最小数据库,因此我尝试从c#运行以下powershell命令 我正在努力解决的问题是——如何使用Select子句命令 这是我的计划 WSManConnectionInfo wsConnectionInfo = new WSManConnectionInfo(new Uri("https://" + ExchangeSite + "/powershell?serializationLevel=Full"), "http://schemas.micr

目标是获得Exchange 2010站点的最小数据库,因此我尝试从c#运行以下powershell命令

我正在努力解决的问题是——如何使用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();
请记住,我无法使用管理单元,因为代码必须在Exchange服务器上执行cmdlet的客户端计算机上运行

欢迎任何建议

编辑

我应用了yamen建议的修复程序,并且可以调用该命令,但是当我尝试获取该值时,我得到:“对象引用未设置为对象的实例。”


请注意,我可以获取Servername和Name的值,但在DatabaseSize中失败,因此我猜“Status”标志没有正确设置,因为该标志是启用此值的标志。

我刚刚尝试了此方法,以获得类似的场景

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
是该参数的值。

这里的意思是:

Command myCommand2 = new Command("Select-Object");
myCommand2.Parameters.Add("DatabaseSize");
与此相反:

Command myCommand2 = new Command("Select-Object");
myCommand.Parameters.Add("DatabaseSize");
注意第二行的myCommand2

无论如何,您可能会发现您实际使用的参数是
Property
viz:

myCommand2.Parameters.Add("Property", "DatabaseSize");
对于不止一个:

var props = new string[] { "DatabaseSize", "ServerName", "Name" };
myCommand2.Parameters.Add("Property", props);

select
是select对象的别名,我认为您不能在
命令
构造函数中使用别名(我通常不使用)。MichaelEdenfield,如果我将其更改为select Object,则会得到“找不到与参数名称“DatabaseSize”匹配的参数”。请注意,相同的命令在powershell ISE中运行良好,Get MailboxDatabase-server exchange2010-Status |根据我的回答选择对象数据库大小,该参数称为“Property”。我可以调用该命令,但现在在尝试获取该值时出错。我猜-状态标志没有被正确应用,你能确认我是否以正确的方式使用它吗。请参阅我上面的评论。尝试
myCommand.Parameters.Add(“Status”,true)
或只是
myCommand.Parameters.Add(“状态”)并返回报告。我刚刚意识到必须以以下方式输入标志:myCommand.Parameters.Add(“Status”,true);谢谢。yamen,取消标记答案只是为了引起您的注意,希望您能收到通知并对此帖子发表评论。Thanks@m0dest0我可以建议你把这个新问题作为另一个问题来回答吗?这将是一个不同的问题,你并不打算使用一个问题,你不断编辑不同的问题。如果人们解决了问题,而你又提出了另一个问题,并将代表带走,他们就不太可能回答你的问题。
myCommand2.Parameters.Add("Property", "DatabaseSize");
var props = new string[] { "DatabaseSize", "ServerName", "Name" };
myCommand2.Parameters.Add("Property", props);