我有以下计划:
function execute_query($ip, $username, $password, $query){
$runCMD ="python run_query.py " . escapeshellarg($ip). " ". escapeshellarg($username) . " " . escapeshellarg($password)
. ' ' . escapeshellarg($query);
$output = [];
exec ($runCMD, $output);
print_r ($output);
//return (implode("\n", $output));
}
但是,数组$输出始终为空,程序正在从CMD手动执行时正确返回结果。我不知道该怎么做。我尝试了很多东西,我甚至不记得所有这些。以下是一些:
1.I disable UAC
2.I tried using shell_exec
3.I tried appending powershell in front of the command 'powershell' . $runCmd
4.I tried appending '2>&1' at the end of the command
5.I tried using proc_open, to manually open cmd.exe and execute the command
我可以做的任何其他想法,或者至少如何继续进行故障排除。使用Linux不是一种选择 好像stderr正在工作。此外,我尝试从python脚本打印'asd',它正在工作。 python脚本的输出是WMI查询,它可能包含\ n,\ r和\ t
这是python脚本:
from subprocess import check_output
import sys
def run_query(ip, username, password, query):
runCMD = "query.exe " + username + " " + password + ' "' + query + '" ' + ip + ''
results = check_output(runCMD).decode("utf-8")
results = results.split("\n")
for result in results:
if not result.startswith("__"):
print(result)
if __name__ == "__main__":
run_query(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])
更新1
query.exe是一个程序,它从WMI查询返回过滤结果,作为参数传递。不知道里面是什么,但它按预期工作。我也尝试从php脚本运行query.exe,同样的事情没有输出。
更新2
我使用的是PHP 7.1,尝试了PHP 5.6没有运气。
更新3
当我尝试在python中将字符串更改为字节数组时,我在手动运行脚本时得到此输出:
bytearray(b'The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)\r')
bytearray(b'')
,但php脚本会返回:
Array
(
[0] => bytearray(b'')
)
更新4
f ***我正在将整个项目切换到python