首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IIS上使用PHP运行Powershell

在IIS上使用PHP运行Powershell
EN

Stack Overflow用户
提问于 2015-07-27 14:36:42
回答 2查看 1.7K关注 0票数 1

PHP代码-:

代码语言:javascript
复制
<?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代码-:

代码语言:javascript
复制
$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()

我在笔记本电脑上安装了Powershell,Windows 8上安装了Windows 2012。

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

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

但是,当我运行具有shell_exec命令的php页面时,邮件不会被触发到outlook并返回消息成功的页面,就像PHP中所写的那样。所有工作都是在Windows 2012上完成的

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

我将set-ExecutionPolicy设置为无限制的。

EN

回答 2

Stack Overflow用户

发布于 2015-07-27 15:00:01

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

如果您正在构建在服务器端上下文中运行的解决方案,则应尝试使用已为无人值守执行而安全的组件。或者,您应该尝试找到允许至少部分代码运行客户端的替代方案。如果您使用来自服务器端解决方案的Office应用程序,则该应用程序将缺乏许多成功运行所需的功能。此外,您将承担风险与您的整体解决方案的稳定性。请参阅MSDN中的办公服务器端自动化的几点思考文章中有关这一点的更多信息。

作为解决办法,您可以使用支持此类scenarious的低级别API扩展MAPI,或者仅使用围绕该API的任何其他第三方包装器(例如,救赎)。

票数 1
EN

Stack Overflow用户

发布于 2015-07-27 14:39:03

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

代码语言:javascript
复制
shell_exec("powershell -executionpolicy unrestricted -command $script <nul");

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31656044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档