【发布时间】:2014-08-18 10:33:19
【问题描述】:
我正在尝试创建一个运行 powershell 脚本的 PHP 应用程序。
我有一个名为“change.ps1”的文件,它是一个 powershell 脚本,这是该文件的内容:
Param([string]$username, [string]$password)
Import-Module ActiveDirectory
$newpwd = ConvertTo-SecureString -String "$password" -AsPlainText –Force
Set-ADAccountPassword $username -NewPassword $newpwd –Reset
现在我有一个 PHP 页面,它使用 shell_exec() 函数来运行这个脚本并向它传递两个参数,您可以在上面看到在 ps1 文件中使用了这两个参数($username,$password):
$psscriptpath = "c:\inetpub\htdocsscripts\change.ps1";
shell_exec("powershell.exe -executionpolicy remotesigned -File" . $psscriptpath . " -username \"" . $username . "\" -password \"" . $password . "\"");
目前这不起作用(页面永远不会完成加载,也就是超时)。所以问题是,我这样做正确吗?我哪里出错了。这背后的原理比较简单,使用PHP将变量作为参数传递到powershell脚本中。
感谢您的浏览,如果您有任何问题,请告诉我。
更新: 我尝试直接通过 cmd 运行脚本,看看问题是否出在脚本本身。这是我显示的错误: http://puu.sh/aXuH3/b8db154625.png
第二次更新: 我已经修复了 CMD 上的错误,这是一个编码问题。但是,当我尝试运行 php 页面时,我仍然遇到超时问题: http://puu.sh/aXEdY/22cc87310c.png
【问题讨论】:
-
这里没有足够的信息可以提供帮助,不过我会这样说:escape the arguments 和 the command 正确
-
好的,请问您需要什么信息,我很乐意告诉您。
-
相对于 PHP 代码,
change.ps1存储在什么路径中?您使用的是相对路径scripts/change.ps1,这是否正确。您是否尝试用 \\ 替换/路径分隔符?脚本是否由具有执行 powershell 代码所需权限的用户运行?该用户可以运行 powershell.exe 吗?你有错误吗?如果是这样,您看到了什么消息?最后一件事:尝试使用exec函数,捕获完整输出和状态码以获取更多信息 -
@EliasVanOotegem 是的,路径是正确的。我实际上可以运行 powershell 并手动运行命令,所以我认为权限不是问题?
-
另外,我想补充一点,我尝试通过 CMD 直接运行它以尝试查看脚本本身是否正确。我遇到了这个通过 cmd.exe 返回的错误:puu.sh/aXuH3/b8db154625.png
标签: php shell powershell active-directory