crphp/wmi

用于远程管理Windows机器的wmi库

v1.1.2 2016-11-26 22:16 UTC

This package is auto-updated.

Last update: 2024-09-09 18:56:59 UTC


README

这是一个使用WQL(WMI查询语言)来操作Windows机器上的WMI工具的库。换句话说,这个库允许远程管理Windows机器,无需在客户端机器上安装代理和插件。

如果您的目的是仅查询远程机器的资源,强烈建议您考虑使用crphp/wmic,因为其性能更好。

crphp/wmicrphp/wmic具有相同的查询功能,但只有crphp/wmi具有管理远程资源的能力,例如停止服务、终止进程等。

这个库遵循PSR-2标准,因此它符合PSR-1

在此文档中,“必须”,“不应该”,“需要”,“应该”,“不应该”,“可能”,“不可能”,“推荐”,“可以”和“可选”等关键词应按照RFC 2119中所述的解释。自由翻译RFC 2119 pt-br

  1. 参考文献
  2. 功能
  3. 需求(推荐)
  4. 配置服务器
  5. 准备客户端机器
  6. 将crphp/wmi包下载到服务器
  7. 使用示例
  8. 许可证(MIT)

1 - 参考文献

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)

有关更多信息,请参阅随本库提供的许可文件。