[英]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.