【问题标题】:Powershell with PHP on IIS在 IIS 上使用 PHP 的 Powershell
【发布时间】:2015-01-16 16:24:12
【问题描述】:

我有一个文件 index.php,它有一个按钮,请求另一个名为 script.php 的 php 文件。

此网页托管在我的本地 IIS 上,运行 Windows server 2012 R2 DTC。

文件位置是:c:\inetpub\wwwroot

我已经安装了 PHP。它运行良好。

如果我在 powershell 控制台中运行此命令,但从网页调用时没有响应,我能够获得输出 我为 32 位和 64 位 powershell 设置了不受限制的执行策略,但仍然没有帮助。

index.php

<form id="contact-form" method="post" action="script.php">
<input type="submit" class="button orange" name="submit" value="Check Services">
<form>

脚本 php

<?php 
$output=shell_exec('powershell.exe "Get-Service"');
echo $output;
?>

当我在浏览器中运行文件索引 php 时,我收到以下错误消息。

Get-Service:无法在计算机“.”上打开服务控制管理器。 此操作可能需要其他权限。在 line:1 char:1 + Get-Service + ~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [获取服务],InvalidOperation nException + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Power Shell.Commands.GetServiceCommand

对于文件和错误信息,参考链接 http://cloudbrox.com/o9tj/

【问题讨论】:

  • 看看我的编辑,这样你就可以看到格式是什么样的
  • 非常感谢马特。这是一个很大的帮助。

标签: php powershell iis


【解决方案1】:

运行这段代码会得到什么:

<?php 
$output=shell_exec('powershell "[Security.Principal.WindowsIdentity]::GetCurrent()"');
echo $output;
?>

这是我得到的输出示例,请特别注意 Name 字段:

AuthenticationType : NTLM
ImpersonationLevel : None
IsAuthenticated    : True
IsGuest            : False
IsSystem           : False
IsAnonymous        : False
Name               : SHADOWFAX\Goyuix

PHP 使用的帐户可能没有正确的权限来获取在本地计算机上运行的服务列表。这将帮助您识别该帐户,然后您可以成功评估您的选项,以更改 PHP 正在使用的帐户和/或为该帐户授予适当的权限。

【讨论】:

  • AuthenticationType : Negotiate ImpersonationLevel : None IsAuthenticated : True IsGuest : False IsSystem : False IsAnonymous : False 名称 : NT AUTHORITY\IUSR 所有者 : S-1-5-17 用户 : S-1-5-17组:{S-1-1-0、S-1-5-32-545、S-1-2-1、S-1-5-11...} 令牌:1048
  • 谢谢 Goyuix,上面是输出。主机未加入任何域。这有什么区别吗??
  • 我在回答中暗示了这一点,但最好的方法是让 IIS 作为不同的用户帐户执行此请求。 NT AUTHORITY\IUSR Owner 帐户是默认帐户,几乎没有使用权限帐户。考虑为您的应用程序池和任何 PHP 选项配置新身份,以确保它在所需凭据下执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
相关资源
最近更新 更多