精华内容
下载资源
问答
  • windows wmi_Windows管理规范(WMI)教程
    2020-07-09 20:23:25

    windows wmi

    介绍

    Windows Management Instrumentation(WMI)是Windows的一组扩展,可提供有关计算机系统的信息和通知。 WMI允许脚本语言(如VBScript或Windows PowerShell)在本地和远程管理Microsoft Windows计算机。 WMI已预安装在Windows 2000和更高版本的操作系统中。 可以从Windows NT,Windows 95和Windows 98下载该文件。

    WMI允许您执行各种操作,包括但不限于:

    • 获取正在运行的进程的列表
    • 获取已安装程序的列表
    • 缺少启动程序
    • 获取磁盘使用率
    • 获取计算机的品牌,型号和序列号
    • 获取当前的内存和CPU使用率
    • 创建新流程时获取通知
    • 在计算机进入或退出睡眠模式时获取通知
    • 创建并终止进程
    • 关闭电脑

    您可以从位于以下位置的Microsoft文档中找到有关WMI的更多信息:

    WMI参考(Windows) 。 感谢NeoPa提供的链接。 示例VBA实施

    以下是VBA中的示例实现,该实现监视何时要将计算机置于睡眠模式并在该事件发生时退出Access。

    您将需要添加对Microsoft WMI脚本V#。#库的引用。 第一个代码块在类模块中。 第二个代码块采用某种形式。

    类模块

    Option Explicit 
    'This is to allow the variable sink to raise events
    Dim WithEvents sink As SWbemSink 
    Private Sub sink_OnObjectReady(ByVal objWbemObject As SWbemObject, ByVal objWbemAsyncContext As SWbemNamedValueSet)
        'Event Type 4 is the code for entering sleep mode
        If objWbemObject.EventType = 4 Then
            Application.Quit
        End If
    End Sub 
    Private Sub Class_Initialize()
        'Creates a new WMI object
        Dim services As SWbemServices 
        'Creates the callback object
        Set sink = New SWbemSink 
        'Gets the WMI service. The period in the string is used to reference the local computer.
        'You may use an IP address if you wish to query a remote computer.
        Set services = GetObject("winmgmts:\\.\root\cimv2") 
        'Executes an asynchronous notification query
        services.ExecNotificationQueryAsync sink, "Select * from Win32_PowerManagementEvent"
    End Sub
    形成
    Option Compare Database
    Option Explicit
    Dim sinker As Class1 
    Private Sub Form_Load()
        Set sinker = New Class1
    End Sub
    样本查询

    查询以返回有关该设备是本地驱动器的存储设备的信息。

    SELECT * 
    FROM Win32_LogicalDisk 
    WHERE DriveType = 3
    查询以返回有关CPU的信息。
    SELECT * 
    FROM Win32_Processor
    在本地/远程计算机上创建进程的代码。
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!//./root/cimv2:Win32_Process")
    objWMI.Create "C:\Windows\system32\mstsc.exe", Null, Null, intProcID
    用于根据进程ID终止进程的代码。
    Set objAppList = objWMI.ExecQuery("Select * from Win32_Process where ProcessID = '"& strID &"'",,48)
    For Each objApp In objAppList
       objApp.Terminate
    Next
    查询以ping计算机。
    SELECT * 
    FROM Win32_PingStatus 
    WHERE Address = '" & sAddress & "'"
    创建进程时的通知查询。 WITHIN 1是一个轮询间隔。
    SELECT * 
    FROM __InstanceCreationEvent 
    WITHIN 1 
    WHERE TargetInstance ISA 'Win32_Process'
    通知查询,用于查询网络连接状态何时发生变化。 例如,当网络共享上升或下降时。
    SELECT * 
    FROM __InstanceModificationEvent 
    WITHIN 1 
    WHERE Targetinstance ISA 'Win32_NetworkConnection'

    翻译自: https://bytes.com/topic/access/insights/942725-windows-management-instrumentation-wmi-tutorial

    windows wmi

    更多相关内容
  • WMI 本地和远程Windows WMI的包装器,用于对COM的低级调用和高级Go对象映射
  • windows wmiThere are many devices (servers, desktops, laptops, tablets, phones, etc) running a Windows operating system. Many of us who live in the nix based world have to work in this OS, or if we do...

    windows wmi

    There are many devices (servers, desktops, laptops, tablets, phones, etc) running a Windows operating system. Many of us who live in the nix based world have to work in this OS, or if we don't, we will, sooner or later. Besides the regular tools we can expect from a *nix system (say Apache, PHP, MySQL, C/C++ compilers, etc), Windows offers a set of unique features not present in any other OS, and WMI is one of them.

    有许多运行Windows操作系统的设备(服务器,台式机,笔记本电脑,平板电脑,电话等)。 我们生活在基于nix的世界中的许多人都必须在此OS中工作,否则,我们迟早会这样做。 除了我们可以从* nix系统期待的常规工具(例如Apache,PHP,MySQL,C / C ++编译器等)之外,Windows还提供了一组其他操作系统没有的独特功能,WMI就是其中之一。

    In this article, we will address the questions like: What is WMI? How to use WMI with PHP? We will have some minimal sample codes to go through the basic programming techniques.

    在本文中,我们将解决以下问题:什么是WMI? 如何在PHP中使用WMI? 我们将通过基本的编程技术来提供一些最少的示例代码。

    什么是WMI,为什么我们需要处理它 (What is WMI and why we need to deal with it)

    The MSDN site has its official definition of WMI in this article, out of which a few lines are extracted below:

    MSDN站点在本文中有WMI的正式定义,下面摘录了几行:

    Windows Management Instrumentation (WMI) is the Microsoft implementation of Web-Based Enterprise Management (WBEM), which is an industry initiative to develop a standard technology for accessing management information in an enterprise environment.

    Windows Management Instrumentation(WMI)是Microsoft基于Web的企业管理(WBEM)的实现,WBEM是一项行业倡议,旨在开发用于在企业环境中访问管理信息的标准技术。

    Three keywords here are: Web-Based, management information, enterprise environment. So if our managed IT environment is a large scale, Windows-based architecture and we want to retrieve management information of each individual node and present it in a web fashion, we will be required to interact with WMI. WMI is also capable of doing other things like spawning a process in a remote PC but that will be beyond the scope of this article.

    这里的三个关键字是: 基于Web的管理信息企业环境 。 因此,如果我们的托管IT环境是基于Windows的大规模体系结构,并且我们希望检索每个单个节点的管理信息并以Web形式呈现,则将需要与WMI进行交互。 WMI还可以执行其他操作,例如在远程PC中生成进程,但这超出了本文的范围。

    WMI provides the comprehensive knowledge of a machine, both hardware and software. It has the so called CIM (Common Information Model) to encapsulate the information in an object-oriented manner. It also provides several programming interfaces to retrieve said information. In a pure Windows environment, these will be PowerShell, VB Script and .NET languages. But in our case, it will be PHP.

    WMI提供了机器的全面知识,包括硬件和软件。 它具有所谓的CIM( 通用信息模型 ),以面向对象的方式封装信息。 它还提供了几个编程接口来检索所述信息。 在纯Windows环境中,它们将是PowerShell ,VB脚本和.NET语言。 但是在我们的例子中,它将是PHP。

    One of the fundamental questions when programming with WMI is: which "information" is available? In other words, which objects/classes are available? Luckily, Microsoft provides a full list of what WMI offers in terms of classes and their properties. Please visit here for a complete reference. In WMI programming, most of the time we are referring to Win32 Classes.

    使用WMI进行编程时的基本问题之一是:哪些“信息”可用? 换句话说,哪些对象/类可用? 幸运的是,Microsoft提供了有关WMI提供的类及其属性的完整列表。 请访问此处以获取完整参考。 在WMI编程中,大多数时候我们指的是Win32类

    先决条件 (Pre-requisites)

    On a host Windows machine, WMI must be installed to provide the CIM. By default, any Windows system newer than Windows XP should have WMI installed and enabled.

    在主机Windows计算机上,必须安装WMI才能提供CIM。 默认情况下,任何比Windows XP更新的Windows系统都应安装并启用WMI。

    We can verify that that is the case through the following two steps:

    我们可以通过以下两个步骤验证这种情况:

    1. Launch "Computer Management" in your Windows machine and see if the service called "Windows Management Instrumentation" is running. If not, start that service.

      在Windows Computer Management启动“ Computer Management ”,然后查看名为“ Windows Management Instrumentation ”的服务是否正在运行。 如果没有,请启动该服务。

    2. Launch "wbemtest" in your Command Prompt window. A dialog titled "Windows Management Instrumentation Test" will appear. A lot of the buttons in that dialog are currently disabled but we can click the "Connect..." button to invoke a new dialog similar to the one shown below:

      在命令提示符窗口中启动“ wbemtest ”。 将出现一个标题为“ Windows Management Instrumentation Test ”的对话框。 该对话框中的许多按钮当前都处于禁用状态,但是我们可以单击“ Connect... ”按钮来调用一个类似于以下所示的新对话框:

    alt

    Normally, we don't need to change a thing. root\cimv2 is the system built-in namespace for our WMI interface. Just click the "Connect" button in this dialog. It will bring us back to the previous window with all the buttons enabled.

    通常,我们不需要更改任何东西。 root\cimv2是WMI接口的系统内置名称空间。 只需单击此对话框中的“ Connect ”按钮。 启用所有按钮后,它将带我们回到上一个窗口。

    Being able to connect to a machine's WMI interface is just one of the pre-requisites. We also need to make sure the Windows Firewall will allow WMI calls to pass through.

    能够连接到机器的WMI接口只是前提条件之一。 我们还需要确保Windows防火墙将允许WMI呼叫通过。

    In Windows Firewall, choose "Advanced Settings" then enable both inbound and outbound access rules for WMI related entries. Please see the screenshots below.

    在Windows防火墙中,选择“ Advanced Settings ”,然后为WMI相关条目启用入站和出站访问规则。 请查看下面的屏幕截图。

    alt
    alt

    After we enable the WMI firewall rules in a remote machine, we can test the connection as illustrated in Step 2 above. To connect to a remote machine, we need to prefix the default namespace ("root\cimv2") with the IP or name of the PC we need to connect ("\\192.168.1.2\root\cimv2 for example") and provide the user name and password for that remote machine.

    在远程计算机上启用WMI防火墙规则后,我们可以按照上面的步骤2中所示测试连接。 要连接到远程计算机,我们需要在默认名称空间(“ root\cimv2 ”) root\cimv2加上我们需要连接的PC的IP或名称(例如“ \\192.168.1.2\root\cimv2 ”)并提供该远程计算机的用户名和密码。

    WMIPHP扩展(.NET) (PHP extension for WMI (.NET))

    To use WMI (or more precisely, .NET functionality) in PHP, we will need to enable php_com_dotnet.dll. Add one line to the php.ini like this:

    要在PHP中使用WMI(或更确切地说,.NET功能),我们需要启用php_com_dotnet.dll 。 像这样在php.ini添加一行:

    extension=php_com_dotnet.dll

    and restart the web server.

    并重新启动Web服务器。

    Note: php_com_dotnet.dll is a Windows only extension. This means that we will have to run the WMI-calling PHP file in a WAMP-like environment, and not in a *nix environment. And, of course, the machines that we will manage via WMI all need to be Windows based.

    注意: php_com_dotnet.dll是仅Windows的扩展名。 这意味着我们将必须在类似WAMP的环境中而不是在* nix环境中运行WMI调用PHP文件。 当然,我们将通过WMI管理的计算机都必须基于Windows。

    对WMI提供的内容的进一步了解 (A further look of what WMI provides)

    Having done all the necessary preparation, and before we start programming WMI with PHP, we really need to get back to the fundamental question we raised earlier: What "information" is available?

    在完成所有必要的准备工作之后,并且在我们开始使用PHP编程WMI之前,我们确实需要回到我们先前提出的基本问题: 哪些“信息”可用?

    We can expect the WMI to provide information regarding the BIOS, CPU, disks, memory usage, etc. But how is this information presented?

    我们可以期望WMI提供有关BIOS,CPU,磁盘,内存使用情况等的信息。但是如何显示这些信息?

    Besides digging into the official documents provided, let's bring up the wbemtest dialog again and connect to our local machine. In the WMI Tester dialog, click the Enum Classes... button and bring up the below dialog:

    除了深入研究提供的官方文档之外,让我们再次打开wbemtest对话框并连接到我们的本地计算机。 在“ WMI Tester对话框中,单击“ Enum Classes...按钮,并弹出以下对话框:

    alt

    In this dialog, don't enter anything in the text box, choose Recursive and click OK. It should bring up another dialog like this:

    在此对话框中,不要在文本框中输入任何内容,选择“ Recursive ,然后单击“ OK 。 它应该弹出另一个对话框,如下所示:

    alt

    This is a very long list (1,110 objects in my Windows 8.1 PC). Your PC may give out a different list but should be more or less the same as this one. Please take some time to scroll through it and look at the names of the classes that WMI provides. For example, in the above image, we have highlighted a class Win32_LogicalDisk. This contains all the information related to the machine's logical disks. To get a deeper insight of what this class offers, please double click on that class and another Object editor dialog will appear:

    这是一个很长的列表(在Windows 8.1 PC中为1,110个对象)。 您的PC可能会给出不同的列表,但应该与此列表大致相同。 请花一些时间浏览它,并查看WMI提供的类的名称。 例如,在上图中,我们突出显示了Win32_LogicalDisk类。 其中包含与计算机逻辑磁盘有关的所有信息。 要深入了解此类提供的内容,请双击该类,然后将出现另一个“ Object editor对话框:

    alt

    Take a closer look at the Properties panel. All the properties listed here are those we can retrieve. For example, VolumeName will be the name we assigned for a logical disk.

    仔细查看“属性”面板。 此处列出的所有属性都是我们可以检索的属性。 例如, VolumeName将是我们为逻辑磁盘分配的名称。

    WMI's Win32 Classes have a lot of entries to look through. Some of the most frequently used are:

    WMI的Win32类有很多条目可供浏览。 一些最常用的是:

    • Computer System Hardward Classes, including Cooling Device, Input Device (Keyboard, Mouse, etc), Mass Storage, Motherboard, Networking Device, Printing, Video & Monitor, etc.

      计算机系统硬体类,包括冷却设备,输入设备(键盘,鼠标等),大容量存储,主板,网络设备,打印,视频和监视器等。
    • Installed Application Classes, including Font, etc.

      已安装的应用程序类,包括字体等。
    • Operating System Classes, including Drivers, Memory, Processes, Registry, Users, etc.

      操作系统类,包括驱动程序,内存,进程,注册表,用户等。
    • Performance Counter Classes, including all performance related classes.

      性能计数器类,包括所有与性能相关的类。
    • etc, etc.

      等等等

    We now have a much clearer picture of the structure of the WMI classes and their associated properties.

    现在,我们对WMI类的结构及其相关属性有了更加清晰的了解。

    用PHP编程WMI (Programming WMI in PHP)

    The code snippet below shows some basic information about the logical disks of a remote machine on the IP 192.168.1.4:

    下面的代码段显示了有关IP 192.168.1.4上的远程计算机的逻辑磁盘的一些基本信息:

    <?php
        $pc = "192.168.1.4"; //IP of the PC to manage
    
        $WbemLocator = new COM ("WbemScripting.SWbemLocator");
        $WbemServices = $WbemLocator->ConnectServer($pc, 'root\\cimv2', 'your account', 'your password');
        $WbemServices->Security_->ImpersonationLevel = 3;
    
        $disks =    $WbemServices->ExecQuery("Select * from Win32_LogicalDisk");
    
        foreach ($disks as $d)
        {
            $str=sprintf("%s (%s) %s bytes, %4.1f%% free\n", $d->Name,$d->VolumeName,number_format($d->Size,0,'.',','), $d->FreeSpace/$d->Size*100.0);
    
            echo $str;
        }

    On my system, the above will print out something like:

    在我的系统上,以上内容将打印出类似以下内容的内容:

    C: (System) 104,864,059,392 bytes, 60.4% free
    D: (Data) 209,719,963,648 bytes, 84.3% free
    E: (Misc) 185,521,188,864 bytes, 95.3% free

    This is a very simple example but it lays down the fundamental structure and flow of a PHP WMI program.

    这是一个非常简单的示例,但它列出了PHP WMI程序的基本结构和流程。

    Firstly, a COM object instance of type WbemScripting.SWbemLocator is created.

    首先,创建一个WbemScripting.SWbemLocator类型的COM对象实例。

    Then the connection to the PC will be established via the ConnectServer method. The four parameters for this method call are self explanatory. Finally, we need to set the security impersonation to a proper level. Level 3 is the recommended level for WMI scripts. A detailed explanation of the level is documented here. Level 3 means "Impersonation", which means and we quote:

    然后,将通过ConnectServer方法建立与PC的连接。 此方法调用的四个参数不言自明。 最后,我们需要将安全模拟设置为适当的级别。 建议将级别3用于WMI脚本。 有关级别的详细说明,请参见此处 。 第3级的意思是“ Impersonation ”,这意味着我们引用:

    The server process can impersonate the client's security context on its local system. The server cannot impersonate the client on remote systems.

    服务器进程可以在其本地系统上模拟客户端的安全上下文。 服务器无法模拟远程系统上的客户端。

    In short, our script (and the service instance we created) are "impersonating" the user with the account/password provided. Perfect for what we need here.

    简而言之,我们的脚本(以及我们创建的服务实例)使用提供的帐户/密码“模拟”用户。 非常适合我们在这里需要的东西。

    Please note the code above is the way to create a remote COM connection to manage a remote PC. To manage a local PC, the syntax will be slightly different but not much:

    请注意,上面的代码是创建远程COM连接以管理远程PC的方法。 要管理本地PC,语法会稍有不同,但差别不大:

    <?php
        $pc = "."; 
        $obj = new COM ("winmgmts:\\\\".$pc."\\root\\cimv2");
    
        $disks =  $obj->ExecQuery("Select * from Win32_LogicalDisk");
        // Rest of the code is the same as previous remote connection sample

    It is somewhat simpler as we don't need to provide a credential and impersonate but this is based on the assumption that the user running this snippet has the Administrator privilege.

    这有点简单,因为我们不需要提供凭据和模拟,但这是基于以下假设:运行此代码段的用户具有管理员权限。

    To get the classes and their associated data, we have used a WQL (WMI Query Language) statement. It is very similar to SQL statements we issue to a MySQL server but in this case, we are retrieving data from WMI. Win32_LogicalDisk is one "table" in WMI that stores all information related to logical disks. To access data from other tables, please use the name listed in the Query Result dialog as shown above. This also allows us to filter the results. For example, Select * from Win32_LogicalDisk where size > 150000000000 will only return those logical devices with size over 150G (roughly).

    为了获得类及其相关数据,我们使用了WQL(WMI查询语言)语句。 它与我们发布给MySQL服务器SQL语句非常相似,但是在这种情况下,我们正在从WMI检索数据。 Win32_LogicalDisk是WMI中的一个“表”,用于存储与逻辑磁盘有关的所有信息。 要访问其他表中的数据 ,请使用“ Query Result对话框中列出的名称,如上所示。 这也使我们可以过滤结果。 例如, Select * from Win32_LogicalDisk where size > 150000000000将仅返回大小超过150G(大约)的那些逻辑设备。

    The ExecQuery statement, if successful, will return a variant typed object. One downside is that if we try to var_dump that object, PHP will simply print something like object (variant) #3.... Same thing happens when we try to var_dump the $d variable. There is actually nothing useful for further programming in the output.

    如果成功,则ExecQuery语句将返回variant类型的对象。 缺点是,如果我们尝试var_dump该对象,PHP将只打印类似object (variant) #3... 。 当我们尝试var_dump $d变量时, var_dump发生同样的事情。 实际上,对于输出中的进一步编程没有任何用处。

    In actuality, we just need to know that the object is iterable. In this case, when we use a foreach loop, every $d instance will hold an object reference to a logical disk. Then we can access the properties in that logical disk instance with the familiar -> notation. The properties list can be found in the Object editor dialog for that particular class as shown above.

    实际上,我们只需要知道对象是可迭代的即可。 在这种情况下,当我们使用foreach循环时,每个$d实例将保存一个对逻辑磁盘的对象引用。 然后,我们可以使用熟悉的->符号访问该逻辑磁盘实例中的属性。 可以在该特定类的“ Object editor对话框中找到属性列表,如上所示。

    Be sure to spell the class name (Win32_LogicalDisk) and property names (like Size, Name) correctly. Windows is not case sensitive but if we provide the wrong name, an error will be thrown and returned.

    确保正确拼写类名( Win32_LogicalDisk )和属性名(如SizeName )。 Windows不区分大小写,但是如果我们提供了错误的名称,则会引发错误并返回错误。

    As we mentioned earlier, WMI programming can be done with other languages as well – languages like C#, VB Script, etc. However, the WMI COM interface is such a dynamic interface that we can't count on any of these languages to provide a code completion hint to have easy access to all the properties. We have to rely on the dialogues shown above.

    正如我们前面提到的,WMI编程也可以使用其他语言(例如C#,VB Script等)来完成。但是,WMI COM接口是一种动态接口,我们不能依靠任何这些语言来提供代码完成提示可轻松访问所有属性。 我们必须依靠上面显示的对话。

    One solution to help the programmers is to further encapsulate each WMI class into a PHP class with necessary methods. This should be a very straightforward task and I will leave it to those interested to play around with it.

    帮助程序员的一种解决方案是使用必要的方法将每个WMI类进一步封装到PHP类中。 这应该是一个非常简单的任务,我将把它留给有兴趣的人一起玩。

    结论 (Conclusion)

    WMI is a powerful tool holding some of the most hidden secrets kept by the Windows operating system. In a large scale network with homogeneous Windows based machines, we can rely on WMI to retrieve this vital information and help the system admins better manage all the machines.

    WMI是一个功能强大的工具,其中包含Windows操作系统保留的一些最隐藏的秘密。 在具有基于Windows的同类计算机的大型网络中,我们可以依靠WMI检索此重要信息,并帮助系统管理员更好地管理所有计算机。

    In this article, we only cover the very basics of WMI and PHP WMI programming but have laid down the fundamentals for further work.

    在本文中,我们仅介绍WMI和PHP WMI编程的基础知识,但为进一步的工作奠定了基础。

    Please leave your comments below if you'd like to see a more detailed WMI tutorial!

    如果您想查看更详细的WMI教程,请在下面留下您的评论!

    翻译自: https://www.sitepoint.com/php-wmi-dig-deep-windows-php/

    windows wmi

    展开全文
  • windows WMI 脚本教程

    2009-02-24 16:46:53
    系统的wmi教程,帮助您轻松掌握wmi脚本的编写,使烦琐的系统维护和管理变得轻松、容易。
  • 主要介绍了python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法,涉及Python针对系统信息的相关操作技巧,需要的朋友可以参考下
  • WMI的工具软件

    2018-11-27 09:46:08
    官方版WMI tools,系统检测工具。WMI工具包括:WMI CIM Studio:查看和编辑类,属性,限定词和在CIM储存库的实例;选定的运行方式;生成并编译MOF文件。 WMI对象浏览器:视图对象,编辑属性值和限定词和运行方法。
  • 主要介绍了python使用wmi模块获取windows下硬盘信息的方法,涉及Python获取系统硬件信息的相关技巧,需要的朋友可以参考下
  • c++ windows wmi修改网卡ip+dns

    千次阅读 2019-09-03 15:05:58
    c++ windows wmi修改网卡ip+dns 注意事项: 项目必须以管理员权限运行 参考main.cpp使用方法 网卡的key可以从注册表获取, 路径: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\...

    项目下载地址: https://github.com/w123l123h/netConfig

    在win7/win10上都测试通过

    注意事项:

    1. 项目必须以管理员权限运行
    2. 参考main.cpp使用方法
    3. 网卡的key可以从注册表获取, 路径: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
    4. 网卡key对应的中文名可以从注册表获取, 路径: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network{4D36E972-E325-11CE-BFC1-08002BE10318}\

    注册表查看

    网卡配置

    注册表地址: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
    in

    网卡中文名

    (和windows系统"控制面板\网络和 Internet\网络和共享中心"显示的名字一致)
    注册表地址: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network{4D36E972-E325-11CE-BFC1-08002BE10318}
    在这里插入图片描述

    代码:

    main.cpp

    //main.cpp:
    
    #include <iostream>
    #include <locale>
    #include <string>
    #include <codecvt>
    #include "net_config.h"
    
    #pragma execution_character_set("utf-8")
    
    using namespace std;
    
    int main()
    {
    	std::locale::global(std::locale(""));
    
    	NetConfig config;
    	//网卡的key可以从注册表获取, 路径: 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\
    	config.set_key("{cd574b17-73e1-42df-a50c-f95d7f15c1d0}");
    
    	//设置静态ip之前要调用下enable_dhcp, 可以把以前设置的ip和网关都清空, 否则注册表会有多个ip信息
    	if (config.enable_dhcp()) {
    		cout << "enable_dhcp success" << endl;
    	}
    	else {
    		cout << "error code: " << config.get_last_error_code() << endl;
    	}
    	
    	if (config.set_ip_config("192.168.1.100", "255.255.255.0", "192.168.1.1")) {
    		cout << "set_ip_config success" << endl;
    	}
    	else {
    		cout << "error code: " << config.get_last_error_code() << endl;
    	}
    
    	if (config.set_dns("255.255.255.0", "")) {
    		cout << "set_dns success" << endl;
    	}
    	else {
    		cout << "error code: " << config.get_last_error_code() << endl;
    	}				
    	
    	cin.get();
    	return 0;
    }
    

    net_config.h

    //net_config.h
    
    #pragma once
    
    #include <string>
    #include <memory>
    #include <vector>
    #include <Wbemidl.h>
    
    class NetConfig
    {
    public:
    	NetConfig() {}
    	NetConfig(const std::string &key) 
    		:key_(key){ }
    	~NetConfig();
    
    	//设置网络设备GUID
    	void set_key(const std::string &key) {
    		clear();
    		key_ = key;
    	}
    	//启用DHCP
    	bool enable_dhcp();
    	//启动静态IP,设置IP,掩码,网关
    	bool set_ip_config(const std::string &ip, const std::string &mask, const std::string &gateway);
    	bool set_ip_config(const std::string &ip, const std::string &mask);
    	//设置网关
    	bool set_gateway(const std::string &gateway);
    	//设置DNS地址
    	bool set_dns(const std::string &default_dns, const std::string &backup_dns);
    	//设置自动DNS
    	bool set_auto_dns();
    
    	int get_last_error_code()const {
    		return last_error_code_;
    	}
    
    	void clear();
    
    private:
    	NetConfig(const NetConfig &rhs) = delete;
    	NetConfig &operator = (const NetConfig &rhs) = delete;
    
    private:
    	//初始化
    	bool init();
    	//创建COM数组
    	std::shared_ptr<SAFEARRAY> create_SAFEARRAY(const std::vector<std::string> &args);
    	bool set_dns_base(bool is_auto, const std::string &default_dns, const std::string &backup_dns);
    	bool exec_method(const wchar_t *method, IWbemClassObject *params_instance);
    
    private:
    	std::string key_;
    	bool is_init_ = false;
    	IWbemLocator* p_instance_ = NULL;
    	IWbemServices* p_service_ = NULL;
    	IEnumWbemClassObject* p_enum_ = NULL;
    	IWbemClassObject *p_obj_ = NULL;
    	IWbemClassObject *p_config = NULL;
    	VARIANT path_;
    	int last_error_code_ = 0;
    };
    

    net_config.cpp

    //net_config.cpp
    
    #include "net_config.h"
    #include <codecvt>
    #include <atlbase.h>
    #include <comutil.h>
    #ifdef _DEBUG
    #include <iostream>
    #endif
    
    #pragma comment(lib, "wbemuuid.lib")
    #pragma comment(lib, "comsuppw.lib")
    
    #pragma execution_character_set("utf-8")
    
    using namespace std;
    
    NetConfig::~NetConfig()
    {
    	clear();
    }
    
    bool NetConfig::enable_dhcp()
    {
    	if (!init())
    		return false;
    	return exec_method(L"EnableDHCP", NULL);
    }
    
    bool NetConfig::set_ip_config(const std::string & ip, const std::string & mask, const std::string & gateway)
    {
    	if (set_ip_config(ip, mask)) {
    		return set_gateway(gateway);
    	}
    	return false;
    }
    
    bool NetConfig::set_ip_config(const std::string & ip, const std::string & mask)
    {
    	bool rt = false;
    	if (!init())
    		return rt;
    
    	IWbemClassObject *params = NULL;
    	IWbemClassObject *paramsInst = NULL;
    	p_config->GetMethod(_bstr_t("EnableStatic"), 0, &params, NULL);
    	params->SpawnInstance(0, &paramsInst);
    
    	auto p1 = create_SAFEARRAY({ ip });
    	VARIANT paramVt;
    	paramVt.vt = VT_ARRAY | VT_BSTR;
    	paramVt.parray = p1.get();
    	paramsInst->Put(L"IPAddress", 0, &paramVt, NULL);
    	p1 = create_SAFEARRAY({ mask });
    	paramVt.parray = p1.get();
    	paramsInst->Put(L"SubnetMask", 0, &paramVt, NULL);
    
    	rt = exec_method(L"EnableStatic", paramsInst);
    	if (params) {
    		params->Release();
    	}
    	return rt;
    }
    
    bool NetConfig::set_dns(const std::string & default_dns, const std::string & backup_dns)
    {
    	return set_dns_base(false, default_dns, backup_dns);
    }
    
    bool NetConfig::set_auto_dns()
    {
    	return set_dns_base(true, "", "");
    }
    
    bool NetConfig::set_gateway(const std::string & gateway)
    {
    	bool rt = false;
    	if (!init())
    		return rt;
    
    	IWbemClassObject *params = NULL;
    	IWbemClassObject *paramsInst = NULL;
    	p_config->GetMethod(_bstr_t("SetGateways"), 0, &params, NULL);
    	params->SpawnInstance(0, &paramsInst);
    
    	auto p1 = create_SAFEARRAY({ gateway });
    	VARIANT paramVt;
    	paramVt.vt = VT_ARRAY | VT_BSTR;
    	paramVt.parray = p1.get();
    	paramsInst->Put(L"DefaultIPGateway", 0, &paramVt, NULL);
    	paramVt.vt = VT_UINT;
    	paramVt.uintVal = 1;
    	paramsInst->Put(L"GatewayCostMetric", 0, &paramVt, NULL);
    
    	rt = exec_method(L"SetGateways", paramsInst);
    	if (params) {
    		params->Release();
    	}
    	return rt;
    }
    
    void NetConfig::clear()
    {
    	if (p_config) {
    		p_config->Release();
    		p_config = nullptr;
    	}
    	if (p_obj_) {
    		p_obj_->Release();
    		p_obj_ = nullptr;
    	}
    	if (p_enum_) {
    		p_enum_->Release();
    		p_enum_ = nullptr;
    	}
    	if (p_service_) {
    		p_service_->Release();
    		p_service_ = nullptr;
    	}
    	if (p_instance_) {
    		p_instance_->Release();
    		p_instance_ = nullptr;
    	}
    	if (is_init_) {
    		CoUninitialize();
    	}
    	is_init_ = false;
    }
    
    bool NetConfig::init()
    {
    	if (is_init_) {
    		return true;
    	}
    
    	// Step 1: Initialize COM.
    	HRESULT	hres = CoInitializeEx(0, COINIT_MULTITHREADED);
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "CoInitializeEx failed: " << hres << endl;
    #endif
    		return false;
    	}
    
    	/*
    	// Step 2: Set general COM security levels
    	hres = CoInitializeSecurity(
    		NULL,
    		-1,                          // COM negotiates service
    		NULL,                        // Authentication services
    		NULL,                        // Reserved
    		RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
    		RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
    		NULL,                        // Authentication info
    		EOAC_NONE,                   // Additional capabilities 
    		NULL                         // Reserved
    	);
    	//ASSERT_THROW(SUCCEEDED(hres), "CoInitializeSecurity failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "CoInitializeSecurity failed: " << hres << endl;
    #endif
    		return false;
    	}
    	*/
    
    	// Step 3:  Obtain the initial locator to WMI
    	hres = CoCreateInstance(
    		CLSID_WbemLocator,
    		0,
    		CLSCTX_INPROC_SERVER,
    		IID_IWbemLocator,
    		(LPVOID*)&p_instance_);
    	//ASSERT_THROW(SUCCEEDED(hres), "CoCreateInstance failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "CoCreateInstance failed: " << hres << endl;
    #endif
    		return false;
    	}
    
    	// Step 4: Connect to the local root\cimv2 namespace and obtain pointer pSvc to make IWbemServices calls.
    	hres = p_instance_->ConnectServer(
    		_bstr_t(L"ROOT\\CIMV2"),
    		NULL,
    		NULL,
    		0,
    		NULL,
    		0,
    		0,
    		&p_service_
    	);
    	//ASSERT_THROW(SUCCEEDED(hres), "ConnectServer failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "ConnectServer failed: " << hres << endl;
    #endif
    		return false;
    	}
    
    	// Step 5:  Set security levels for the proxy
    	hres = CoSetProxyBlanket(
    		p_service_,                        // Indicates the proxy to set
    		RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx 
    		RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx 
    		NULL,                        // Server principal name 
    		RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
    		RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
    		NULL,                        // client identity
    		EOAC_NONE                    // proxy capabilities 
    	);
    	//ASSERT_THROW(SUCCEEDED(hres), "CoSetProxyBlanket failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "CoSetProxyBlanket failed: " << hres << endl;
    #endif
    		return false;
    	}
    
    	// 通过适配器名称来找到指定的适配器对象.
    	CComBSTR TheQuery = L"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE SettingID = \"";
    	std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> conversion;
    	TheQuery += conversion.from_bytes(key_).c_str();
    	TheQuery += L"\"";
    	hres = p_service_->ExecQuery(
    		//SysAllocString(L"WQL"),
    		L"WQL",
    		TheQuery,
    		WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY,
    		NULL,
    		&p_enum_);
    	//ASSERT_THROW(SUCCEEDED(hres), "ExecQuery failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "ExecQuery failed: " << hres << endl;
    #endif
    		return false;
    	}
    	
    	// Get the adapter object.
    	ULONG num = 0;
    	hres = p_enum_->Next(WBEM_INFINITE, 1, &p_obj_, &num);
    	//ASSERT_THROW(SUCCEEDED(hres), "Next failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "Next failed: " << hres << endl;
    #endif
    		return false;
    	}
    
    	//ASSERT_THROW(0 < num, "Next failed");
    	if (num < 1) {
    #ifdef _DEBUG
    		cout << "Next failed num < 1" << endl;
    #endif
    		return false;
    	}
    
    	VariantInit(&path_);
    	hres = p_obj_->Get(L"__PATH", 0, &path_, NULL, NULL);
    	//ASSERT_THROW(SUCCEEDED(hres), "Get path failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "Get failed: " << hres << endl;
    #endif
    		return false;
    	}
    	hres = p_service_->GetObject(_bstr_t(L"Win32_NetworkAdapterConfiguration"), 0, NULL, &p_config, NULL);
    	//ASSERT_THROW(SUCCEEDED(hres), "GetObject Win32_NetworkAdapterConfiguration failed");
    	if (FAILED(hres)) {
    #ifdef _DEBUG
    		cout << "GetObject failed: " << hres << endl;
    #endif
    		return false;
    	}
    	is_init_ = true;
    	return true;
    }
    
    std::shared_ptr<SAFEARRAY> NetConfig::create_SAFEARRAY(const std::vector<std::string> &args)
    {
    	SAFEARRAY *psa = SafeArrayCreateVector(VT_BSTR, 0, args.size());
    	long idx[] = { 0 };
    	for (int i = 0; i < args.size(); i++) {
    		std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> conversion;
    		BSTR ip = SysAllocString(conversion.from_bytes(args[i]).c_str());
    		idx[0] = i;
    		if (FAILED(SafeArrayPutElement(psa, idx, ip))) {
    			return (false);
    		}
    		SysFreeString(ip);
    	}
    	return shared_ptr<SAFEARRAY>(psa, [](SAFEARRAY *psa) {SafeArrayDestroy(psa); });
    }
    
    bool NetConfig::set_dns_base(bool is_auto, const std::string & default_dns, const std::string & backup_dns)
    {
    	bool rt = false;
    	if (!init())
    		return rt;
    
    	IWbemClassObject *params = NULL;
    	IWbemClassObject *paramsInst = NULL;
    	p_config->GetMethod(_bstr_t("SetDNSServerSearchOrder"), 0, &params, NULL);
    	params->SpawnInstance(0, &paramsInst);
    
    	shared_ptr<SAFEARRAY> p1;
    	if (is_auto) {
    		paramsInst->Put(L"DNSServerSearchOrder", 0, NULL, NULL);
    	}
    	else {
    		if (backup_dns.size()) {
    			p1 = create_SAFEARRAY({ default_dns, backup_dns });
    		}
    		else {
    			p1 = create_SAFEARRAY({ default_dns });
    		}
    		VARIANT paramVt;
    		paramVt.vt = VT_ARRAY | VT_BSTR;
    		paramVt.parray = p1.get();
    		paramsInst->Put(L"DNSServerSearchOrder", 0, &paramVt, NULL);
    	}
    
    	rt = exec_method(L"SetDNSServerSearchOrder", paramsInst);
    	if (params) {
    		params->Release();
    	}
    	return rt;
    }
    
    bool NetConfig::exec_method(const wchar_t * method, IWbemClassObject * params_instance)
    {
    	bool rt = false;
    	IWbemClassObject *results = NULL;
    	auto res = p_service_->ExecMethod(path_.bstrVal, _bstr_t(method), 0, NULL, params_instance, &results, NULL);
    	if (SUCCEEDED(res)) {
    		VARIANT vtRet;
    		VariantInit(&vtRet);
    		if (!FAILED(results->Get(L"ReturnValue", 0, &vtRet, NULL, 0))) {
    			if (vtRet.uintVal == 0 || vtRet.uintVal == 1) {
    				rt = true;
    			}
    			else {
    				last_error_code_ = vtRet.uintVal;
    #ifdef _DEBUG
    				wcout << method << " failed, result: " << last_error_code_ << endl;
    #endif
    			}
    		}
    #ifdef _DEBUG
    		else {
    			cout << "ExecMethod Get ReturnValue failed: " << res << endl;
    		}
    #endif
    		VariantClear(&vtRet);
    		results->Release();
    	}
    #ifdef _DEBUG
    	else {
    		cout << "ExecMethod failed: " << res << endl;
    	}
    #endif	
    	if (params_instance) {
    		params_instance->Release();
    	}
    	return rt;
    }
    
    
    展开全文
  • Windows管理规范(Windows Management Instrumentation,WMI),是微软提供给管理的工具之一,WMI可以从计算机中收集大量的系统信息,本篇文章主要介绍一下使用powershell调用WMI的情况。 WMI概要 Windows计算机中...

    简介

    Windows管理规范(Windows Management Instrumentation,WMI),是微软提供给管理的工具之一,WMI可以从计算机中收集大量的系统信息,本篇文章主要介绍一下使用powershell调用WMI的情况。

    WMI概要

    Windows计算机中包含的管理信息是十分的繁杂的,WMI会将这些信息整理成易于访问的格式,在最顶层,WMI被组织成命名空间,可以把每个命名空间理解为一个文件夹,不同命名空间的作用范围是不同的,例如root\CIMv2包含所有Windows操作系统和计算机硬件信息、root\SecurityCenter包含了关于防火墙、杀毒软件和反流氓软件等工具的信息。root\SecurtityCenter(新版本windows 使用root\SecurityCenter2替换)的内容根据已安装杀软等防护软件的不同而不同。

    在命名空间中有着一系列的类,每个类都是可用于WMI查询的管理单元,通过这些类可以管理和获取到具体的相关信息,

    通过微软的管理控制台在计算机中产生的命名空间,不同计算机的WMI包含的命名空间可能是不同的。

    在这里插入图片描述

    不同windows系统对应的powershell 版本,关于powershell的不同版本之间是向前兼容的,新版的powershell依旧可以使用老版本中的powershell命令。

    操作系统PowerShell版本
    Windows7、Windows Server20082.0
    Windows8、Windows Server20123.0
    Windows8.1、Windows Server2012 R24.0
    Windows10、Windows Server20165.0

    MWI管理功能并不能覆盖整个windows的功能以及微软的产品,微软从来没规定某个产品必须使用WMI,或者要求某个产品使用了WMI,必须公开WMI的每个可能的部分。

    powershell 操作WMI

    powershell 操作WMI存在两种方式,一种即WMI cmdlet,例如“Get-Wmiobject”、“Invoke-WMiMethod”,这些都是遗留的命令,可以使用,但是微软后续不会对其继续投入开发。他们与远程过程调用(RPC)交互,也就是说,只有在防火墙支持状态审查时才能通过防火墙:状态审查是第三代防火墙的功能,不同于简单的包过滤防火墙,它会将应用层数据抽取出来,符合条件就可以放行。

    第二种方式CIM Cmdlets,例如Get-CimInstance与Invoke-CimMethod,这些命令多少等价于旧版本的WMI Cmdlets命令,但是他们通过WS-Man(由Windows 远程管理服务实现)交互,体代原有的RCPs,这是微软的主方向,另外CIM cmdlet可以使用旧版的RPC(或DCOM)协议通讯,因此即使与老机器进行通讯时,你也可以仅使用CIM cmdlet。

    使用powershell 命令时,使用help cmdlet的方式可以初略的显示一部分的帮助内容,注意别名部分。

    在这里插入图片描述

    使用WMI Cmdlet

    通过Get-WmiObject 命令,你可以指定一个命名空间、类名,可以从远程计算机进行查询,完成的命令格式类似。注意,命名空间名字使用的是反斜杠,不是斜杠。其中“root\CIMv2”命名空间是Windows XP SP2及后续版本的系统默认命名空间,所以如果你的类在该命名空间中,可以不显式指定。

    WMi Cmdlet

    Cmdlet说明
    Get-WmiObject获取 WMI 类或信息的实例
    Invoke-WmiMethod调用 WMI 方法。
    Register-WmiEvent订阅 WMI 事件。
    Remove-WmiObject删除 WMI 类和实例。
    Set-WmiInstance创建或修改 WMI 类的实例。
    Get-WmiObject -namespace root\cimv2 -class win32_desktop
    

    。同时,-class
    是位置参数,也就是说,如果你把类名称放到第一个位置,它依旧能正常工作。

     Get-WmiObject win32_desktop 
    

    对于许多WMI类,PowerShell的默认配置已经设定了需要展示的属性。“Win32_OperatingSystem
    ”是一个很好的例子,因为它默认仅在列表中展示了6个属性。请记住,你总能把WMI对象用管道传输到Gm或Format-List。可以显示所有可用的属性。

    Get-WmiObject win32_operatingsystem
    

    在这里插入图片描述

    Get-WmiObject win32_operatingsystem | gm
    

    截取部分

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IEN0hZt1-1642545891094)(0BFAAD620A20405D9980E9EBCD26F04E)]

    远程查询基本命令, -ComputerName可以指定多个主机,出错的话会间隔一定时间自动跳到下一个进行执行

    Get-WmiObject -Namespace root\cimv2 -Class win32_process -ComputerName 192.168.220.146 -Credential administrator
    
    其他命令

    WQL查询

    $wql = "SELECT name,ExecutablePath, from Win32_Process"
    get-wmiobject -query $wql -computername server01, server01, server03
    
    //使用select 筛选一下
    get-wmiobject -query $wql -computername server01, server01, server03 -Credential |select name,path 
    
    

    实现退出程序的所有实例

    $wql = "select * from win32_process where name='notepad.exe'"
    $np = get-wmiobject -query $wql
    $np | remove-wmiobject
    
    使用GET-CimInstance

    Get-CimInstance是PowerShell v3引入的新命令,与Get-WmiObject有很多相似的地方,但是也有几个语法上的差异。
    你需要使用“-ClassName
    ”代替“-Class
    ”(虽然你只需要输入-Class
    ,但是如果你只记住了该参数名称的话,这没有问题)。

    没有“-Credential
    ”参数;如果你需要从远程计算机查询并被要求提供替代凭据,需要通过“Invoke-Command
    ”(前面章节已介绍)发送“Get-CimInstance

    invoke-command -ScriptBlock { Get-CimInstance -ClassName win32_process }    -ComputerName WIN8 -Credential DOMAIN\Administrator
    

    参考

    https://blog.csdn.net/fuhj02/article/details/6099777
    https://docs.microsoft.com/zh-cn/previous-versions/powershell/module/microsoft.powershell.core/about/about_wmi_cmdlets?view=powershell-5.0
    Windows PowerShell 实战指南(第3版)

    展开全文
  • 运行:wbemtest.exe
  • WINDOWS WMI技术指南

    2008-12-09 09:48:45
    文件格式:PDF 内容: 详细介绍了WINDOWS操作系统的WMI技术的应用.
  • 我写了这个PHP函数://windows cpu temperaturefunction win_cpu_temp(){$wmi = new COM("winmgmts://./root\WMI");$cpus = $wmi->execquery("SELECT * FROM MSAcpi_ThermalZoneTemperature");foreach ($cpus as ...
  • wmi不仅支持本地也同样支持远程,这里介绍一下怎么快速的让当前操作系统开启远程服务。 首先这里以windwos7为例,有的朋友说,开启远程wmi没有,我说这个东西有用,他说没有用,我说小伙子还是太年轻了。这里需要...
  • 免杀的pr,你懂的 使用方法: pr.exe “gets.exe $local” pr.exe “net user admin admin /add & net localgroup administrators admin /add”
  • find / -name "*.cfg" 后渗透之WMIC 什么是WMIC WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具),提供了从命令行接口和批处理系统管理的支持。 WMIC的简单使用 在CMD装口输入WMIC即可进入WMIC的...
  • windows开启wmi配置开启监控文档,亲测好用请大家给好评,谢谢拉啊windows开启 wmi监控文档
  • 这是一个Golang 获取wmi windows硬件信息的源代码,包括CPU,网卡,内存,硬盘等信息
  • vbs 以及 windowsWMI 系统 https://msdn.microsoft.com/en-us/library/aa393259(v=vs.85).aspx [code="test.vbs" ] On Error Resume Next For Each Disk In GetObject( _ "winmgmts:&...
  • 本文介绍如何使用本机 Windows 工具来测试 WMI 连接性。下面描述的工具是“wbemtest”。 启动 wbemtest 选择Windows -> 运行 当提示运行命令时,输入 wbemtest。 出现对话框时,选择“连接”。 您可以将 ...
  • 在这篇文章中,我们看到了如何使用 Windows Management Instrumentation – WMI 检索所有逻辑驱动器,以及如何找到所有网络适配器。 假设您想获取在本地“root”机器上运行的所有 Windows 服务及其属性的列表,即...
  • Windows开启WMI时一些总结

    千次阅读 2017-02-09 15:04:00
    通过远程的方式连接WMI获取计算机信息时,可能会出现远程主机拒绝访问,这时就要通过下面的方式来开启... 1 按下Windows+R组合键,调用系统运行窗口。  2 输入wbemtest命令。 图1 调用WMI测试器  3 打开W...
  • Windows本机: <?php $pc = "127.0.0.1"; //IP of the PC to manage $WbemLocator = new COM("WbemScripting.SWbemLocator"); $WbemServices = $WbemLocator->ConnectServer($pc, 'ROOT\StandardCIMV2', '...
  • wmi.get键值需要在agent配置开启远程命令参数,5.0以下版本的参数是 EnableRemoteCommand=1,5.0版本的是 AllowKey=system.run[*],然后重启agent即可使用。 示例:获取设备硬件信息 首先,操作系统需要支持wmic命令...
  • Python用WMI模块获取Windows系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息。本文实例讲述了python使用wmi模块获取windows下的系统信息 监控系统#!/...
  • WMI的讲解(是什么,做什么,为什么)

    千次阅读 2021-08-06 09:58:01
    笔者在阅读了WMI的微软官方文档以及国内优秀前辈的介绍文章后,获益匪浅,WMI是一个较为老的知识点了,但是对于想要简单理解WMI的同学来说,对于一个新的知识点进行理解最好是能够有生动形象的例子进行抛砖引玉式的...
  • http://blog.csdn.net/wqiancangq/article/details/54575003,具体使用方法请参阅上述博客链接!
  • 今天小编就为大家分享一篇使用Windows批处理和WMI设置Python的环境变量方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • WMI实现Windows系统自动管理

    万次阅读 2018-07-31 15:25:23
    与以前的操作系统相比,Windows 2K/XP的优点之一是具有更好的可管理性。例如它支持Windows 2000服务器终端服务下的远程管理模式,支持Microsoft管理控制台(MMC),再有一个就是...WMIWindows Management Instrume...
  • wmi基础

    2021-01-24 16:08:51
    文章目录Windows管理规范wmi简介WMI攻击技术WMI防御技术 Windows管理规范 wmi简介   wmi就是Windows Managerment Instrumentation(Windows管理规范),是Windows中的一个核心管理技术。wmi为访问大量的Windows管理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,634
精华内容 8,253
关键字:

windows wmi