通过PHP使用Exchange Snap-In执行powershell脚本

时间:2012-04-13 15:02:27

标签: php apache powershell windows-server-2008 exchange-server

我正在尝试使用PHP执行的powershell脚本查询Exchange服务器,但它似乎不起作用。我试图运行的命令是:

powershell "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010";"Get-CASMailbox -Identity user@example.com | fl ActiveSyncEnabled"

如果我直接在命令提示符中键入它,它会正确执行并返回:

  

ActiveSyncEnabled:True

当我在PHP中尝试时:

$output=shell_exec('powershell "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010";"Get-CASMailbox -Identity user@example.org | fl ActiveSyncEnabled"');

我一无所获。 $ output已设置但为空白。如果我在末尾添加“> output.txt”,我会得到一个空白文本文件。我能够通过PHP成功运行其他更简单的powershell命令,但不是这个。 Apache服务作为与通过命令提示符成功执行脚本时相同的用户运行。

有什么想法吗?

我正在跑步:

  • Windows Server 2008 R2 SP1 64位
  • Apache 2.2.22 32位
  • PHP 5.2.17 VC6 32位
  • Exchange管理控制台2010

1 个答案:

答案 0 :(得分:1)

您可以尝试在命令末尾添加2>&1,例如:

$output=shell_exec('powershell "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010";"Get-CASMailbox -Identity user@example.org | fl ActiveSyncEnabled" 2>&1');

有时,在powershell输出开头的换行符似乎会阻止shell_exec打印其他内容。