【问题标题】:Running Powershell With PHP On IIS在 IIS 上使用 PHP 运行 Powershell
【发布时间】:2015-07-27 14:36:42
【问题描述】:

PHP 代码 -:

<?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 代码 -:

$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 的笔记本电脑上安装了 Powershell。

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

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

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

在命令行上运行 powershell 脚本会发送邮件,但是当通过 powershell 运行脚本时不会触发邮件并且仅在 shell-exec 查询运行时返回成功。

我已将 set-ExecutionPolicy 设置为不受限制。

【问题讨论】:

    标签: php powershell iis outlook fastcgi


    【解决方案1】:

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

    如果您要构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用服务器端解决方案中的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将承担整体解决方案稳定性的风险。在 MSDN 中的 Considerations for server-side Automation of Office 文章中阅读更多相关信息。

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

    【讨论】:

    • 我可以在本地主机上使用脚本。它在 localhost 上完美运行,但这个 powershell 脚本在服务器上使用时不会触发电子邮件
    【解决方案2】:

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

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

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

    【讨论】:

    • 我使用了执行策略方法,但我没有提供帮助。
    • 您能否详细说明我应该如何处理应用程序池的身份
    • 您可以尝试将您的应用程序池的身份设置为您的帐户并检查它是否有效。见iis.net/learn/manage/configuring-security/…
    • 它没有用。我能做的任何其他事情。我正处于项目上线的最后阶段
    • 你的网站的应用程序池是否设置为你的用户帐户身份?
    【解决方案3】:

    不能在服务中使用任何 Office 应用(包括 Outlook)。(例如 IIS)。

    你的选择是

    1. 如果是 Exchange Server,请使用EWS 访问邮箱。

    2. 扩展 MAPI(仅限 C++ 或 Delphi)

    3. Redemption(任何语言) - 它封装了扩展 MAPI,并且可以从服务中使用其 RDO 对象系列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多