在 PowerShell 可以很容易使用 WMI 拿到系统的信息,如果有关注我的网站,就会发现我写了很多通过 WMI 拿到系统的显卡,系统安装的软件等方法,本文告诉大家如果通过 PowerShell 拿到 WMI 类里面的属性




在 Windows 系统通过 Windows Management Instrumentation (WMI) 统一管理系统的配置,在 PowerShell 能使用 WMI 的功能进行获取系统

很少有人知道 WMI 里面包含了多少可以使用的类,包括我之前写的很多博客,实际上也只是里面的很少,通过下面的例子告诉大家如何获取设备里面包含的类

获取 WMI 类

在使用 WMI 之前需要知道 WMI 是能做什么的,这个方法能做的就是描述系统能被管理的资源,在系统里面包含了几百个类,一个类里面包含很多属性

通过 Get-WmiObject 可以找到设备里面所有可以被找到的 WMI 类

Get-WmiObject -List

在 Windows 10 设备,右击开始菜单,打开 PowerShell 输入上面代码,就可以看到输出

在 Get-WmiObject 的参数可以加上计算机是哪个,支持访问局域网可以访问的计算机的信息

Get-WmiObject -List -ComputerName 192.168.1.29

尝试在自己的系统输入一下,可以看到很多代码

PS> Get-WmiObject -List

Name                                Methods              Properties
---- ------- ----------
__thisNAMESPACE {} {SECURITY_DESCRIPTOR}
__Provider {} {Name}
__Win32Provider {} {ClientLoadableCLSID, CLSID, Concurrency, DefaultMachineNam...
__ProviderRegistration {} {provider}
__EventProviderRegistration {} {EventQueryList, provider}
__ObjectProviderRegistration {} {InteractionType, provider, QuerySupportLevels, SupportsBat...
__ClassProviderRegistration {} {CacheRefreshInterval, InteractionType, PerUserSchema, prov...
__InstanceProviderRegistration {} {InteractionType, provider, QuerySupportLevels, SupportsBat...
__MethodProviderRegistration {} {provider}
__PropertyProviderRegistration {} {provider, SupportsGet, SupportsPut}
__EventConsumerProviderRegistration {} {ConsumerClassNames, provider}
__NAMESPACE {} {Name}
__EventFilter {} {CreatorSID, EventAccess, EventNamespace, Name...}
__EventConsumer {} {CreatorSID, MachineName, MaximumQueueSize}
__FilterToConsumerBinding {} {Consumer, CreatorSID, DeliverSynchronously, DeliveryQoS...}
__AggregateEvent {} {NumberOfEvents, Representative}
__TimerNextFiring {} {NextEvent64BitTime, TimerId}
__Event {} {SECURITY_DESCRIPTOR, TIME_CREATED}
__ExtrinsicEvent {} {SECURITY_DESCRIPTOR, TIME_CREATED}
Win32_DeviceChangeEvent {} {EventType, SECURITY_DESCRIPTOR, TIME_CREATED}
Win32_SystemConfigurationChangeE... {} {EventType, SECURITY_DESCRIPTOR, TIME_CREATED} // 后面还有很多

显示 WMI 类的信息

从上面列出的任意一个 WMI 类,可以使用下面代码显示这个类里面的属性

PS> Get-WmiObject -Class Win32_OperatingSystem

SystemDirectory : C:\WINDOWS\system32
Organization :
BuildNumber : 17763
RegisteredUser : lindexi_gd@outlook.com
SerialNumber : 00331-10000-00001-AA523
Version : 10.0.17763

这里的输出只是简要的信息,没有包含所有的属性,如果想输出所有的属性,可以使用下面代码

PS> Get-WmiObject -Class Win32_OperatingSystem | Get-Member -MemberType Property

Name                                      MemberType Definition
---- ---------- ----------
BootDevice Property string BootDevice {get;set;}
BuildNumber Property string BuildNumber {get;set;}
BuildType Property string BuildType {get;set;}
Caption Property string Caption {get;set;}
CodeSet Property string CodeSet {get;set;}
CountryCode Property string CountryCode {get;set;}
CreationClassName Property string CreationClassName {get;set;}
CSCreationClassName Property string CSCreationClassName {get;set;}
CSDVersion Property string CSDVersion {get;set;}
CSName Property string CSName {get;set;}
// 还有很多属性

总结一下,获取一个 WMI 类的简洁属性,可以通过这个格式

 Get-WmiObject -Class 某个类

具体的类可以通过 Get-WmiObject -List 找到

获取某个类里面包含的所有属性,通过这个格式

Get-WmiObject -Class 某个类  | Get-Member -MemberType Property

如果需要获取某个类的某一些属性的值,可以通过下面的代码

Get-WmiObject -Class 某个类 | Format-Table -Property 属性1,属性2

如获取 Win32_OperatingSystem 的 TotalVirtualMemorySize 和 RegisteredUser 因为小伙伴的设备和我不相同,可以看到不一样的

PS> Get-WmiObject -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize,RegisteredUser

TotalVirtualMemorySize RegisteredUser
---------------------- --------------
36052888 lindexi_gd@outlook.com

如果有很多属性,可以通过列表的方法输出,将 Format-Table 修改为 Format-List 请看下面

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize : 36052888
TotalVisibleMemorySize : 25042840
FreePhysicalMemory : 8510920
FreeVirtualMemory : 9954748
FreeSpaceInPagingFiles : 10482656

通过 WMI 可以拿很多属性

Getting WMI Objects Get WmiObject

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

PowerShell 使用 WMI 获取信息的更多相关文章

  1. PowerShell 通过 WMI 获取系统安装的驱动

    本文告诉大家如何通过 WMI 获取用户已经安装的驱动程序 通过下面代码可以获取用户已经安装的驱动程序 Get-WmiObject Win32_SystemDriver | Format-List Ca ...

  2. PowerShell 通过 WMI 获取系统服务

    本文告诉大家如何通过 WMI 获取系统服务 通过 Win32_Service 可以获取系统启动的服务 Get-WmiObject Win32_Service | Format-List Caption ...

  3. PowerShell 通过 WMI 获取系统安装软件

    本文告诉大家如何通过 WMI 获取系统安装的软件 通过 Win32_Product 可以获取系统安装的软件 Get-WmiObject Win32_Product | Format-List Capt ...

  4. PowerShell 通过 WMI 获取系统信息

    本文告诉大家如何通过 WMI 使用 Win32_OperatingSystem 获取设备厂商 通过下面代码可以获取 系统版本和系统是专业版还是教育版 Get-WmiObject Win32_Opera ...

  5. WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法

    原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ...

  6. Python使用wmi获取Windows相关信息

    在使用Python获取Windows系统上的相关的信息可以使用WMI接口来获取, 什么是wmi? WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问.配置.管理和监 ...

  7. 主机性能监控之wmi 获取磁盘信息

    标 题: 主机性能监控之wmi 获取磁盘信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990541.html 欢迎转帖 请保持文本完整并注明出处 仅 ...

  8. 主机性能监控之wmi 获取进程信息

    标 题: 主机性能监控之wmi 获取进程信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990499.html 欢迎转帖 请保持文本完整并注明出处 仅 ...

  9. 主机性能监控之wmi 获取系统信息及内存性能信息

    标 题: 主机性能监控之wmi 获取系统信息及内存性能信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990240.html 欢迎转帖 请保持文本完整 ...

随机推荐

  1. Spring_MVC

    SpringMVC处理流程 分析: M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity) V-View 视图(做界面的展示  jsp,html……) C- ...

  2. python 逗号分隔值文件的操作

  3. 《C程序设计语言》笔记(三)

    六:结构 1:结构体声明中,比如: struct point{ int x; int y; }; struct后面的名字是可选的,称为结构标记.结构成员.结构标记和普通变量可以采用相同的名字,它们之间 ...

  4. Libevent:1前言

    一:libevent概述: libevent是一个用来编写快速.可移植.非阻塞IO程序的库,它的设计目标是:可移植性.高效.可扩展性.便捷. libevent包含下列组件: evutil:对不同平台下 ...

  5. 搜索docker镜像

    docker最简单的方式莫过于从现有的容器镜像开始. Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io. 可以通过浏览这个网页来查找你想要使用的镜像,或者 ...

  6. 【NS2】NS2中802.11代码深入理解—packet传输的流程(转载)

    如何传送一个封包(How to transmit a packet?)首先,我们要看的第一个function是在mac-802_11.cc内的recv( ),程式会先判断目前呼叫recv( )这个pa ...

  7. [BZOJ3064][Tyvj1518] CPU监控

    题目:[BZOJ3064][Tyvj1518] CPU监控 思路: 线段树专题讲的.以下为讲课时的课件: 给出序列,要求查询一些区间的最大值.历史最大值,支持区间加.区间修改.序列长度和操作数< ...

  8. oracle函数 to_single_byte(c1)

    [功能]将字符串中的全角转化为半角 [参数]c1,字符型 [返回]字符串 [示例] SQL> select to_multi_byte('高A') text from dual; test -- ...

  9. Java练习 SDUT-2737_小鑫の日常系列故事(六)——奇遇记

    小鑫の日常系列故事(六)--奇遇记 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 今天,小鑫在山上玩的时候,意外被推下 ...

  10. Python基础:06条件和循环

    1:条件表达式(三元操作符) Python 在很长的一段时间里没有条件表达式(C ? X : Y), 或称三元运算符.人们试着用 and 和 or 来模拟它, 但大多都是错误的. 根据 FAQ , 正 ...