GPR*_*GPR 3 c# powershell activesync
我在下面的代码中有两行 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();
Run Code Online (Sandbox Code Playgroud)
当我尝试在添加脚本中单独运行命令 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);
Run Code Online (Sandbox Code Playgroud)
以这种方式编写(不使用 AddScript),可以避免脚本注入的一个可能问题。如果任何参数可能来自恶意用户,则可以构造一个参数来关闭前面的引号之一,然后添加恶意脚本,您将使用管理员权限运行该脚本。使用 AddCommand/AddParameter 可以避免这种情况。
即使您完全控制了参数,如果某些参数包含像“;”这样的字符,您仍然可能会遇到问题。并且您没有正确引用参数。
| 归档时间: |
|
| 查看次数: |
8177 次 |
| 最近记录: |