繁体   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