Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当由PHP执行时,PowerShell脚本不工作_Php_Powershell_Shell Exec - Fatal编程技术网

当由PHP执行时,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

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

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中执行时却能完全工作,这有什么特别的原因吗?

最有可能出现问题。CMD在用户会话中运行,而phpor作为服务运行。Windows 7中的服务在称为会话0的独立会话中运行。此会话中的进程无法与其他进程通信


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

听起来这就是问题所在。我想知道是否有办法解决这个问题,比如先启动一个cmd窗口,然后通过该窗口批处理执行脚本。