C# 和 Powershell 多个命令



我在下面的代码中有两行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# 代码以调用和执行活动同步命令和释放。

注意:邮箱创建和活动同步的域控制器应相同。

根据 Enable-Mailbox 命令上的文档,它不会输出任何内容。 忘记管道。 将其更改为";"以分隔两个语句。

相关内容

  • 没有找到相关文章

最新更新