在IIS上使用PHP运行Powershell


Running Powershell With PHP On IIS

PHP CODE -:

<?php
    $user = "email@outlook.com";
    $script = "C:''inetpub''wwwroot''shell_script''sc.ps1";
    $query = shell_exec("powershell -command $script <nul");
     if($query)
{
   echo "Successful" ;
}
else
   echo "Failed";
}
?>

POWERSHELL CODE -:

$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "email2@outlook.com"
$Mail.Subject = "New Leave Request"
$Mail.Body ="
Dear,
This email contains the body of Email"
$Mail.Send()

我在笔记本电脑上安装了Windows Server 2012和Windows 8。

我有一个网站托管在Windows Server 2012 IIS

当我运行powershell脚本sc.ps1的命令行在服务器上命令。/sc。ps1邮件发送到Outlook。

但是当我运行php页面时,我有shell_exec命令,邮件不会触发到outlook,并返回页面,消息成功写入php代码。所有的工作都在Windows Server 2012上完成

在命令行上运行powershell脚本会发送邮件,但通过powershell运行脚本时不会触发邮件,只有在shell-exec查询运行时才返回成功。

我已经设置set-ExecutionPolicy为无限制

微软目前不建议,也不支持,从任何无人值守的、非交互式的客户端应用程序或组件(包括ASP、ASP、ASP、ASP和ASP. xml)自动化Microsoft Office应用程序。. NET、DCOM和NT服务),因为在此环境中运行Office时,Office可能会表现出不稳定的行为和/或死锁。

如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用那些对于无人值守执行是安全的组件。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果从服务器端解决方案使用Office应用程序,则该应用程序将缺乏成功运行所需的许多功能。此外,您将在整个解决方案的稳定性方面承担风险。请参阅MSDN中Office服务器端自动化的注意事项。

作为一种解决方案,您可以使用支持这种场景的低级API -扩展的MAPI,或者只是围绕该API的任何其他第三方包装器(例如,Redemption)。

您可能必须在您的shell_exec中传递执行策略:

shell_exec("powershell -executionpolicy unrestricted -command $script <nul");

如果这不起作用,您应该检查应用程序池的标识。