从 PowerShell 转换为 C#
Convert from PowerShell to C#
C# 中的 Exchange 存在问题。
我需要转换这个 PowerShell 命令:
Get-MailboxDatabase -Status | Where-Object {$_.IsExcludedFromProvisioning -eq $false} | select Name,DatabaseSize | sort DatabaseSize
我尝试了以下代码,但它给出了 System.Management.Automation.CmdletInvocationException
PSCommand command1 = new PSCommand();
command1.AddCommand("Get-MailboxDatabase");
command1.AddParameter("Status");
command1.AddCommand("Where-Object");
command1.AddArgument("IsExcludedFromProvisioning");
command1.AddParameter("eq", false);
command1.AddCommand("select-object").AddParameter("Property", new string[] { "Name", "DatabaseSize" });
command1.AddCommand("sort-object").AddParameter("Property", "DatabaseSize");
PowershellExchange.Commands = command1;
PowershellExchange.Runspace = RunspaceExchange;
var tmp1 = PowershellExchange.Invoke();
告诉我,可能是什么问题,或者您可以如何重写 powershell 命令?
编辑
内部异常:指定的运算符需要 -属性 参数和 -Value 参数。再次为两个参数和运行命令指定值。
这似乎违反直觉,但在以下情况下:
... |Where-Object Something -eq $SomeValue
-eq
实际上是一个开关参数,其详细形式为:
... |Where-Object -Property:Something -Eq:$true -Value:$SomeValue
因此,要重新创建没有过滤器脚本块的 Where-Object
管道元素:
command1.AddCommand("Where-Object")
.AddParameter("Property", "IsExcludedFromProvisioning")
.AddParameter("Eq", true)
.AddParameter("Value", false);
感谢@Jeroen Mostert 的帮助
最终代码看起来像
PSCommand command1 = new PSCommand();
command1.AddScript("Get-MailboxDatabase -Status | Where-Object {$_.IsExcludedFromProvisioning -eq $false} | select Name,DatabaseSize | sort DatabaseSize");
PowershellExchange.Commands = command1;
PowershellExchange.Runspace = RunspaceExchange;
var tmp1 = PowershellExchange.Invoke();
C# 中的 Exchange 存在问题。
我需要转换这个 PowerShell 命令:
Get-MailboxDatabase -Status | Where-Object {$_.IsExcludedFromProvisioning -eq $false} | select Name,DatabaseSize | sort DatabaseSize
我尝试了以下代码,但它给出了 System.Management.Automation.CmdletInvocationException
PSCommand command1 = new PSCommand();
command1.AddCommand("Get-MailboxDatabase");
command1.AddParameter("Status");
command1.AddCommand("Where-Object");
command1.AddArgument("IsExcludedFromProvisioning");
command1.AddParameter("eq", false);
command1.AddCommand("select-object").AddParameter("Property", new string[] { "Name", "DatabaseSize" });
command1.AddCommand("sort-object").AddParameter("Property", "DatabaseSize");
PowershellExchange.Commands = command1;
PowershellExchange.Runspace = RunspaceExchange;
var tmp1 = PowershellExchange.Invoke();
告诉我,可能是什么问题,或者您可以如何重写 powershell 命令?
编辑
内部异常:指定的运算符需要 -属性 参数和 -Value 参数。再次为两个参数和运行命令指定值。
这似乎违反直觉,但在以下情况下:
... |Where-Object Something -eq $SomeValue
-eq
实际上是一个开关参数,其详细形式为:
... |Where-Object -Property:Something -Eq:$true -Value:$SomeValue
因此,要重新创建没有过滤器脚本块的 Where-Object
管道元素:
command1.AddCommand("Where-Object")
.AddParameter("Property", "IsExcludedFromProvisioning")
.AddParameter("Eq", true)
.AddParameter("Value", false);
感谢@Jeroen Mostert 的帮助
最终代码看起来像
PSCommand command1 = new PSCommand();
command1.AddScript("Get-MailboxDatabase -Status | Where-Object {$_.IsExcludedFromProvisioning -eq $false} | select Name,DatabaseSize | sort DatabaseSize");
PowershellExchange.Commands = command1;
PowershellExchange.Runspace = RunspaceExchange;
var tmp1 = PowershellExchange.Invoke();