我创建了一个PowerShell脚本,旨在使用shell_exec()由PHP执行。

PowerShell脚本为:

[System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
[System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
$process=Get-Process "cmd" | where {$_.mainWindowTitle -like "*FTB*"}
[Microsoft.VisualBasic.Interaction]::AppActivate($process.ID)
[System.Windows.Forms.SendKeys]::SendWait("whitelist reload{ENTER}")

PHP执行行是:

$out = shell_exec("powershell C:\whitelist_reload.ps1");
echo ($out);

脚本执行,并且通过Echo得到返回信息。 它表示在PS脚本的第3行中分配给Get-Process的值的$process变量为空。 问题在于,如果我通过PowerShell可执行文件手动执行脚本,则脚本可以完美执行,并且完全可以实现我想要的功能。


第3行在被PHP执行时什么也不返回,而在PowerShell中执行时却完全起作用,是否有特定的原因?

===============>>#1 票数:0 已采纳

问题很可能是Session 0隔离 CMD在用户会话中运行,而php(或Web服务器)作为服务运行。 Windows 7中的服务在称为Session 0的隔离会话中运行。 此会话中的进程无法与其他进程通信。

因此,您的Get-process命令无法列出您的CMD -process,因为它无权访问它。 您可以通过运行$process=Get-Process "cmd"并回显结果来验证隔离。 我从未尝试过,但是我敢肯定您不会找到任何以交互方式运行的进程。

  ask by Zion Fox translate from so

未解决问题?本站智能推荐: