2012-04-13 89 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