powershell--windows管理规范WMI基础

简介

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版)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值