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

标签 c# .net powershell exchange-server

目标是获取 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 建议的修复并且可以调用命令,但是当我尝试获取值时,我得到:“对象引用未设置为对象的实例。”

exception

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

最佳答案

你的意思是:

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);

关于c# - 如何在 C# 中管道 powershell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10392901/

相关文章:

c# - 是否可以读取.exe文件?

C# Hook Windows 进程以检查调试进程

c# - 使用 System.Type 调用泛型方法

arrays - 为什么我不能在 Powershell 的 foreach 循环中查找数组索引?

用于在网络适配器上打开 "File and Print Sharing for Microsoft Networks"的 PowerShell 命令

powershell - 如何在PowerShell中转换字符串日期?

c# - 401 Unauthorized 在 GET 请求 (https) 上返回正确的凭据

c# - 如何隐藏 DataGridViewComboBoxColumn 的下拉箭头,如 Visual Studio Properties 窗口?

c# - 我的模拟 DbContext 使用 Moq 在单元测试中写入数据库

c# - 如何在抽象类中使用构造函数注入(inject)?