2012-04-13 56 views
2

我试图查询使用由PHP执行的powershell脚本的Exchange服务器,它似乎并没有工作。我试图运行的命令是:通过PHP执行PowerShell脚本与Exchange管理单元通过PHP

powershell "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010";"Get-CASMailbox -Identity [email protected] | fl ActiveSyncEnabled" 

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

ActiveSyncEnabled : True

当我尝试在PHP:

$output=shell_exec('powershell "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010";"Get-CASMailbox -Identity [email protected] | fl ActiveSyncEnabled"'); 

我什么也没得到。 $输出已设置但空白。如果我添加“> output.txt”到最后,我会得到一个空白的文本文件。我能够通过PHP成功运行其他更简单的PowerShell命令,但不是这个。 Apache服务以与通过命令提示符成功执行脚本时相同的用户身份运行。

任何想法?

我运行:

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

出于测试目的,我将Apache服务设置为自己运行。在PHP中,exec('whoami')返回我的域\用户名,这是我在命令提示符下成功执行命令时使用的相同用户名。这不应该解决任何权限问题,或者我错过了什么? – amay83 2012-04-13 15:16:10

回答

1

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

$output=shell_exec('powershell "Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010";"Get-CASMailbox -Identity [email protected] | fl ActiveSyncEnabled" 2>&1'); 

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

+0

感谢您的协助!它仍然不起作用,但至少现在出现错误:Add-PSSnapin:没有为Windows PowerShell版本2注册管理单元。在行:1 char:13 + Add-PSSnapin <<< amay83 2012-04-13 15:24:46

+0

什么错误? – Gary 2012-04-13 15:25:30

+0

我编辑我以前的评论与我现在得到的错误。我也尝试直接在命令提示符下输入Shedal的字符串,并且仍然正确执行,返回'AciveSyncEnabled:True' – amay83 2012-04-13 15:29:32