crphp / wmi
用于远程管理Windows机器的wmi库
Requires
- php: >=5.5.12
- crphp/core: ^1.0
This package is auto-updated.
Last update: 2024-09-09 18:56:59 UTC
README
这是一个使用WQL(WMI查询语言)来操作Windows机器上的WMI工具的库。换句话说,这个库允许远程管理Windows机器,无需在客户端机器上安装代理和插件。
如果您的目的是仅查询远程机器的资源,强烈建议您考虑使用crphp/wmic,因为其性能更好。
crphp/wmi和crphp/wmic具有相同的查询功能,但只有crphp/wmi具有管理远程资源的能力,例如停止服务、终止进程等。
在此文档中,“必须”,“不应该”,“需要”,“应该”,“不应该”,“可能”,“不可能”,“推荐”,“可以”和“可选”等关键词应按照RFC 2119中所述的解释。自由翻译RFC 2119 pt-br。
1 - 参考文献
- PSR-1
- PSR-2
- RFC 2119. 自由翻译 RFC 2119 pt-br
2 - 功能
- 查询CPU
- 查询RAM
- 查询硬盘
- 查询服务
- 列出服务
- 停止/启动服务
- 查询进程
- 列出进程
- 更改进程优先级
- 终止/结束进程
- 将Windows时间戳转换为日期/时间
- 启动进程
- 列出并终止会话
3 - 准备服务器
❗以下建议的版本是我们开发和生产环境中使用的版本,因此我们不保证如果以下元素的版本不同,此解决方案将完全运行。
3.1 - 需求(推荐)
服务器
- 需要Windows(桌面≥Windows 7或Windows Server≥2003)
- 需要Apache≥2.4.10
- 需要PHP≥5.5.12
客户端
- 需要Windows(桌面≥Windows 7或Windows Server≥2003)
- 不需要安装任何组件
4 - 配置服务器
在php.ini文件中必须添加一行
extension=php_com_dotnet.dll
您必须检查php_com_dotnet.dll是否存在于php/ext目录中
5 - 准备客户端机器
本节中的设置必须在所有远程管理目标机器上执行,即所有客户端机器上。
5.1 - 在客户端释放防火墙规则
防火墙规则路径
Painel de Controle > Ferramentas Administrativas > Firewall do Windows com Segurança Avançada
为了允许WMI连接,我们需要启用入口规则
Instrumentação de Gerenciamento do Windows (DCOM-In)
Instrumentação de Gerenciamento do Windows (WMI-In)
以及出口规则
Instrumentação de Gerenciamento do Windows (WMI-Saída)
为了避免问题,建议远程连接的用户在目标机器上拥有管理员权限。显然,如果您对此主题有所了解,您可以配置访问上下文。
6 - 将crphp/wmi包下载到服务器
对于以下步骤,我假设您已安装并了解如何使用composer。
composer require crphp/wmi
或者,如果您愿意创建一个项目
composer create-project --prefer-dist crphp/wmi nome_projeto
如果您尚未安装composer,可以从以下链接获取: https://getcomposer.org.cn/download/
7 - 使用示例
查询CPU:
use Crphp\Wmi\Sistema\Cpu; use Crphp\Wmi\Conector\Wmi; $wmi = new Wmi; $wmi->conectar('ip_ou_hostname', 'usuario', 'senha'); if($wmi->status()) { $cpu = new Cpu($wmi); echo "<pre>"; print_r($cpu->detalhes()); echo "</pre>"; } else { echo $wmi->mensagemErro(); }
其他所有类的工作方式几乎相同。
查询硬盘
use Crphp\Wmi\Conector\Wmi; use Crphp\Wmi\Sistema\DiscoRigido; $wmi = new Wmi; $wmi->conectar('ip_ou_hostname', 'usuario', 'senha'); if($wmi->status()) { // Letra de unidade opcional $obj = new DiscoRigido($wmi, "C"); echo "<pre>"; print_r($obj->detalhes()); echo "</pre>"; } else { echo $wmi->mensagemErro(); }
列出或结束进程
use Crphp\Wmi\Conector\Wmi; use Crphp\Wmi\Sistema\Processos; $wmi = new Wmi; $wmi->conectar('ip_ou_hostname', 'usuario', 'senha'); if($wmi->status()) { $obj = new Processos($wmi); echo "<pre>"; print_r($obj->detalhes()); //print_r($obj->killProcesso()); echo "</pre>"; } else { echo $wmi->mensagemErro(); }
您必须始终实例化Wmi连接器以及您要操作的元素的相关类
您还可以执行自己的自定义查询
use Crphp\Wmi\Conector\Wmi; $wmi = new Wmi; $wmi->conectar('ip_ou_hostname', 'usuario', 'senha'); if($wmi->status()) { $memoria = $wmi->executar("select AvailableBytes from Win32_PerfRawData_PerfOS_Memory"); // Será retornado um objeto em caso de sucesso ou uma string em caso de erro } else { echo $wmi->mensagemErro(); }
8 - 许可(MIT)
有关更多信息,请参阅随本库提供的许可文件。