当由PHP执行时,PowerShell脚本不工作
我创建了一个PowerShell脚本,旨在由PHP使用shell_exec执行 PowerShell脚本是:当由PHP执行时,PowerShell脚本不工作,php,powershell,shell-exec,Php,Powershell,Shell Exec,我创建了一个PowerShell脚本,旨在由PHP使用shell_exec执行 PowerShell脚本是: [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic") [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms") $process=Get-Process "cmd" | where {$_.mainW
[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中执行时却能完全工作,这有什么特别的原因吗?最有可能出现问题。CMD在用户会话中运行,而phpor作为服务运行。Windows 7中的服务在称为会话0的独立会话中运行。此会话中的进程无法与其他进程通信
因此,Get process命令无法列出CMD进程,因为它没有访问权限。您可以通过运行$process=Get process cmd并回显结果来验证隔离。我从未尝试过,但我很确定您不会找到任何以交互方式运行的进程。听起来这就是问题所在。我想知道是否有办法解决这个问题,比如先启动一个cmd窗口,然后通过该窗口批处理执行脚本。