gpt4 book ai didi

php - exec ('script.ps1' ) 返回错误,cmd> script.ps1 运行成功

转载 作者:行者123 更新时间:2023-11-29 13:51:47 24 4
gpt4 key购买 nike

我有一个小的 PowerShell 脚本来获取远程磁盘空间并将其保存到 Postgre 数据库的表中。

如果我在 windows cmd 上执行命令,它会成功运行。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File C:\xampp\....\skripts\getDiskSpace.ps1 -Command -arg 192.168.178.178

但是如果我使用 PHP exec() 函数,我会得到一个 odbc 错误

exec("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -File C:\\xampp\\....\\skripts\\getDiskSpace.ps1 -Command -arg 192.168.178.178", $output);

如果我使用 PHP escapeshellarg() 函数,exec() 的 $output 为 NULL


$output的内容是:

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

我不知道为什么,我指定了 ODBC 驱动程序

$conn = New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString = "Driver={PostgreSQL Unicode(x64)};Server=$dbServer;Port=5432;Database=$dbName;Uid=$dbUser;Pwd=$dbPass;"

已安装 PostgreSQL x64 ODBC 驱动程序!

我在 Windows 2008 SP2 Enterprise Server 上工作......(想找回 linux 网络服务器 :D...)

有人遇到这样的问题吗?或者知道解决方案?

最佳答案

这是一个允许 PHP 获取真实 Powershell 并与之动态交互的项目。在这里获取:https://github.com/merlinthemagic/MTS

下载后您只需使用以下代码:

$shellObj    = \MTS\Factories::getDevices()->getLocalHost()->getShell('powershell');

$strCmd1 = 'get-WmiObject win32_logicaldisk';
$return1 = $shellObj->exeCmd($strCmd1);

返回将为您提供命令返回或来自 powershell 的错误,就像您坐在控制台前一样。然后用PHP解析并插入。

此外,您可以对 $shellObj 发出您喜欢的任何命令,该环境在 PHP 脚本的整个生命周期内得到维护。因此,不要将命令捆绑在脚本文件中,只需使用 exeCmd() 方法一个一个地发出它们,这样您还可以处理返回和任何异常。

关于php - exec ('script.ps1' ) 返回错误,cmd> script.ps1 运行成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39700073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com