【发布时间】:2020-05-01 03:55:55
【问题描述】:
这是 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 命令?
编辑
内部异常:指定的运算符需要 -Property 参数和 -Value 参数。为这两个参数指定值,然后再次运行命令。
【问题讨论】:
-
请用您的错误更新问题:-)
-
Where-Object的参数是一个脚本块。你实际上传递了Where-Object IsExcludedFromProvisioning -eq false的道德等价物,其中-eq是一个参数而不是一个运算符——完全不同的东西。使用AddScript添加整个语句而不是零碎构建它可能会更好(此处似乎不涉及任何变量)。 -
@JeroenMostert,我试试你的建议,我将 Where-Object 块替换为
command1.AddParameter("ScriptBlock", ScriptBlock.Create("Where-Object $_.IsExcludedFromProvisioning")); command1.AddParameter("eq", false);。命令有效,但返回空集合。如果我在 Powershell 中输入我的 PowerShell 命令,它们会返回 10 行数据。 -
因为
AddParameter("eq", false)仍然是错误的。这 不是 参数,它调用-eq运算符。使用AddScript有道德问题吗?这比有效地自己进行解析要简单得多。 -
@JeroenMostert,现在我使用
command1.AddScript("Where-Object $_.IsExcludedFromProvisioning -eq $false");并且命令也返回空集合。我也尝试使用带有完整 powershell 命令的脚本,它们也返回空集合
标签: c# powershell exchange-server