前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerShell5.X与WMI的集成 专题系列分享 第一部分

PowerShell5.X与WMI的集成 专题系列分享 第一部分

作者头像
Ms08067安全实验室
发布2020-12-31 09:56:42
8400
发布2020-12-31 09:56:42
举报

众所周知,在windows10以及Windows Server2016的平台当中,PowerShell5.x已经能够去获取到系 统当中大部分的信息,但有时候仍有一些信息需要借助于调用WMI的类来完成。通过本文,你可以 了解到WMI的基本架构和组件,包括WMI的数据库,WMI的provider,以及在PowerShell调用WMI的 时候提供的module和相关的命令。接下来我们就能通过powershell的命令去完成WMI的查询操作, 去获取到系统当中WMI的实例。然后我们还可通过实例的属性查看到系统当中不同的信息,同时的 话去调用实例当中为我们提供的不同的方法,去修改系统信息的配置。

1. WMI简介

在这一节当中,将为大家介绍WindowsPowerShell与WMI的集成,通过这一节的介绍,首先我们就 能够了解到在windows的运行平台当中什么是WMI,WMI的基本定义以及WMI与PowerShell的基本关 系。接下来即可在演示的环境当中去完成一些基本的演示。通过这些演示,我们就可以了解到在一 些特定的场景当中,powershell必须依赖WMI才能去完成自己的任务。

1.1 What is WMI

在了解WMI的基本定义之前,我们需要了解四个不同的名词,分别为

DMTF\CIM\WBEM(WSMAN)\WMI(WinRM)。

DMTF

  • DMTF是一个标准化组织的缩写(Distribusted Management Task Force)
  • 该组织所制定的标准最主要的作用是方便IT人员或者是软件开发人员能够更加方便的去管理任 何的IT运行环境(Sets standards to enable effective management of any IT enviroment)
  • 比如说,假设当前我们有一台服务器,而这台服务器当中安装了操作系统和应用程序。通过 DMTF制定的标准,软件开发人员或者IT运维人员就可以使用同样的方法去获取到这一台服务 器它的品牌和型号,以及操作系统的类型和应用程序的信息。这样我们就屏蔽底层系统或者硬 件的差异 ,而通过同一种方式去获取到这些目标的基本信息。
  • 那么要去实现这一目标的时候,DMTF这个标准化的组织就为我们去制定了两个非常关键的标 准。首先第一个标准就是CIM。

CIM(Common Information Model)

  • 这个标准就定义了系统当中软件硬件所有的信息发布的时候的基本元素,那么所有软件或者硬 件的厂商在发布新产品的时候都会来兼容CIM这个标准(DMTF standard that defines the managed elements)
  • 在这个CIM的标准当中,我们就能够去找到这样的一些基本信息。那有了CIM这个基本的标准 之后,IT人员又是如果去获取这些信息的呢?其实DMTF还为我们制定了另外一套标准,即 WBEM / WS-MAN。

WBEM / WS-MAN (Web-Base Enterprise Management)

  • 这个标准其实就是为我们提供了一个访问的接口,那么通过这个访问的接口,我们就能够去访 问到CIM这个通用模型当中相应的信息,从而我们就可以了解到一个系统当中它的服务器信 息,操作系统的信息,以及软件的信息。(Web Services Management)

WMI(Windows Management Instrumentation)

  • WMI就是在windows的平台当中的CIM的模型,即Microsoft's CIM-Server for Windows

WinRM(Windwos Remote Management)

  • WinRM就是在windows的平台当中的WS-MAN的实现,即Implements WS-Man in Windows

了解了以上基本信息之后,我们便知道了。在windows平台中,我们有了WMI这个基本组件之后, 我们就可以编写脚本或者编写相应的代码去获取到系统当中我们想去获取的任何信息(包括操作系 统的信息、软件、硬件、网卡、磁盘以及应用程序的信息等等)。因此我们可以将WMI看作一个通 用服务或者模型,通过这个模型就可以获取到自己想要的信息。

1.2 WMI 与 PowerShell

众所周知,对于PowerShell来说,它为我们提供了不同的PowerShell Module。在这一系列的 PowerShell Module当中就包括了很多的powershell命令(cmdlet),我们就可通过这些命令(cmdlet)去 获得相应的信息。比如在活动目录当中,我们可以通过Active Directory Module去获取到相应的活动 目录当中的用户、计算机、安全组等信息,当然我们也可以去创建用户、计算机、安全组。除此之 外,在hyperV的运行环境当中,PowerShell 也为我们提供了hyperV的Module,那我们就能够了解到 虚拟机的基本信息,虚拟机的运行状态,同时也能更改虚拟机的所有配置。

WMI在windows中首次出现的时候是在NT时代,至今已有二十多年的发展史。反观PowerShell是在 2008年出现的,所以至今也就十余年历史。WMI经过了二十多年的发展,所以WMI获取信息的能力 以及对软硬件兼容的支持程度其实是更优秀的。在一些情况中,如果powershell本身提供的命令能 够去获取相应的信息,那也可以使用powershell的方式来完成相应的操作,但是如果powershell对 某些操作没有相关的命令支持,这时便可以通过powershell调用WMI的方法去获取相关的信息。

版本查看:

代码语言:javascript
复制
// 查看PowerShell版本
PS C:\> $PSVersionTable.PSVersion

Major Minor Build Revision
----- ----- ----- --------
5     1     18362 1171      //查看命令的结果,其中"Major"既是当前已安装PowerShell的版本号

PowerShell基本演示:

Get-ADComputer

  • Module : [ActiveDirectory]
  • Gets one or more Active Directory computers.
  • https://docs.microsoft.com/en-us/powershell/module/addsadministration/Get-ADComputer?vi ew=win10-ps
代码语言:javascript
复制
PS C:\> Get-ADComputer -Filter *

DistinguishedName : CN=DC,OU=Domain Controllers,DC=testLab,DC=com
DNSHostName : DC.testLab.com
Enabled : True
Name : DC
ObjectClass : computer
ObjectGUID : 77dde2fb-7692-4dc9-bcdf-526aa53bf77d
SamAccountName : DC$
SID : S-1-5-21-2941787077-2348910004-141610113-1001
UserPrincipalName :
DistinguishedName : CN=DC3,OU=Domain Controllers,DC=testLab,DC=com
DNSHostName : DC3.testLab.com
Enabled : True
Name : DC3
ObjectClass : computer
ObjectGUID : a61cc09a-a4ec-4a96-8371-219b5ccd7dd8
SamAccountName : DC3$
SID : S-1-5-21-2941787077-2348910004-141610113-5765
UserPrincipalName :
-----------------------------------------------------------------------------
-----------
-----------------------------------------------------------------------------
-----------
PS C:\> Get-ADComputer -Filter * -Properties * | Select-Object
DNSHostName,IPv4Addres,OperatingSystem

DNSHostName           IPv4Addres     OperatingSystem
----------- ---------- ---------------
DC.testLab.com        172.30.8.150   Windows Server 2012 R2 Standard
DC3.testLab.com       172.30.8.151   Windows Server 2012 R2 Standard
zhangsan.testLab.com  172.30.8.152   Windows Server 2016 Standard
guanyu.testLab.com    172.30.8.160   Windows 7 专业版

Get-LocalUser

  • Module : [Microsoft.PowerShell.LocalAccounts]
  • Gets local user accounts.
  • https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.localaccounts/getlocaluser?view=powershell-5.1
代码语言:javascript
复制
PS C:\> Get-LocalUser
Name Enabled Description
---- ------- -----------
Administrator True 管理计算机(域)的内置帐户
DefaultAccount False 系统管理的用户帐户。
Guest False 供来宾访问计算机或访问域的内置帐户
WDAGUtilityAccount False 系统为 Windows Defender 应用程序防护方案管理和使用的用户帐户。

Invoke-Command

  • Module : [Microsoft.PowerShell.Core]
  • Runs commands on local and remote computers.
  • https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Core/Invoke-Com mand?view=powershell-5.1
代码语言:javascript
复制
PS C:\> Invoke-Command -ComputerName zhangsan.testLab.com -ScriptBlock {GetLocalUser}

Name Enabled Description PSComputerName
---- ------- ----------- ---------------
Administrator True 管理计算机(域)的内置帐户
zhangsan.testLab.com
DefaultAccount False 系统管理的用户帐户。
zhangsan.testLab.com
Guest False 供来宾访问计算机或访问域的内置帐户
zhangsan.testLab.com
-----------------------------------------------------------------------------
-----------
-----------------------------------------------------------------------------
-----------
PS C:\> Invoke-Command -ComputerName guanyu.testLab.com -ScriptBlock {GetLocalUser}
无法将“Get-LocalUser”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼
写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ CategoryInfo : ObjectNotFound: (Get-LocalUser:String)
[],CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
+ PSComputerName : guanyu.testLab.com

WMI基本演示:

Get-WmiObject

  • Module : [Microsoft.PowerShell.Management]
  • Gets instances of Windows Management Instrumentation (WMI) classes or information about the available classes.
  • https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/GetWmiObject?view=powershell-5.1
代码语言:javascript
复制
PS C:\> Get-WmiObject -Class Win32_UserAccount
AccountType : 512
Caption : R90LT26V\Administrator
Domain : R90LT26V
SID : S-1-5-21-416148207-2992492597-1317475389-500
FullName :
Name : Administrator
AccountType : 512
Caption : R90LT26V\DefaultAccount
Domain : R90LT26V
SID : S-1-5-21-416148207-2992492597-1317475389-503
FullName :
Name : DefaultAccount
AccountType : 512
Caption : R90LT26V\Guest
Domain : R90LT26V
SID : S-1-5-21-416148207-2992492597-1317475389-501
FullName :
Name : Guest

通过以上的基本演示,我们就能够了解到PowerShell当中可能有的命令是没有的,在不同的系统当 中,它还在进行一个演进的过程。而WMI相对更加成熟,功能更加完善。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档