簡體   English   中英

從 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 命令?

編輯

內部異常:指定的運算符需要 -Property 參數和 -Value 參數。 為兩個參數指定值並再次運行命令。

這可能看起來違反直覺,但在以下方面:

... |Where-Object Something -eq $SomeValue

-eq實際上是一個開關參數,它的詳細形式是:

... |Where-Object -Property:Something -Eq:$true -Value:$SomeValue

因此,要Where-Object沒有過濾器腳本塊的情況下重新創建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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM