簡體   English   中英

C#和Powershell Multiple命令

[英]C# and powershell multiple command

我在下面的代碼中有兩行power-shell命令。 命令1啟用郵箱,命令2禁用活動同步。

PSCommand psCmd = new PSCommand();

command2 ="Enable-Mailbox -Identity \""+ ExchangeIdentity 
    +"\" -Database \""+ExchangeDBName+ "\" -DomainController \""
    +ExchangeDC+"\" -primarysmtpaddress \""+ExchangePrimarySMTPAddress +"\"";

command1 = "Set-CASMailbox -Identity \"" +ExchangePrimarySMTPAddress
    +"\" -ActiveSyncEnabled "+ActiveSync_Status;

allcommand = command2 + " |" + command1;

runspace.Open();

powershell.AddScript(allcommand);

powershell.Runspace = runspace;
ICollection<PSObject> iobj = powershell.Invoke();

當我嘗試在添加腳本中單獨運行命令1時,郵箱創建成功。 當我將其與第二個結合使用時,將單獨創建郵箱,但不會禁用活動同步(如果我將值傳遞為false)。

如何單行處理兩個命令?

如果您只是調用命令,建議不要使用AddScript。

假設您要調用這兩個命令,但不希望將結果從第一個傳遞到第二個,並且假設您使用的是PowerShell V3,我將編寫如下代碼:

powershell.AddCommand("Enable-Mailbox")
    .AddParameter("Identity", ExchangeIdentity)
    .AddParameter("Database", ExchangeDBName)
    .AddParameter("DomainController", ExchangeDC)
    .AddParameter("PrimarySmtpAddress ", ExchangePrimarySMTPAddress );
// AddStatement - like adding a ';' in a script - V3 only
powershell.AddStatement();
powershell.AddCommand("Set-CASMailbox")
    .AddParameter("Identity", ExchangePrimarySMTPAddress)
    .AddParameter("ActiveSyncEnabled", ActiveSync_Status);

以這種方式編寫(不使用AddScript),可以避免腳本注入的一個可能問題。 如果任何參數可以來自惡意用戶,則可以構造一個參數以關閉前面的引號之一,然后添加惡意腳本,然后將使用管理員權限運行該腳本。 使用AddCommand / AddParameter,可以避免這種情況。

即使您完全控制了參數,但是如果某些參數包含諸如';'之類的字符,您仍然可能會遇到問題。 並且您沒有正確引用參數。

如果將AddScript(command2)和AddScript(command1)添加到管道,然后調用它們,這是行不通的嗎?

這應該強制powershell依次依次運行兩個命令...

對於2.0版

創建c#代碼以調用Power Shell並執行第一個命令以創建郵箱,然后處理並編寫另一組c#代碼以調用並執行Active sync命令並進行處理。

注意:域控制器對於郵箱創建和活動同步應該相同。

根據Enable-Mailbox命令上的文檔,它不會輸出任何內容。 別管了。 將其更改為“;” 分開這兩個語句。

暫無
暫無

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

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