这篇文章将为大家详细讲解有关PowerShell WMI的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
CIM:公共信息模型(CIM)是用于描述受管理资源(如存储,网络或软件组件)的结构和行为的DMTF标准[DSP0004]。
WMI:Windows Management Instrumentation(WMI)是一种在Windows上实现CIM标准的CIM服务器。
WS-Man:WS-Management(WS-Man)协议是一种基于SOAP的防火墙友好协议,用于管理客户端与CIM服务器进行通信。
WinRM:Windows远程管理(WinRM)是Windows上的WS-Man协议的Microsoft实现。
管理客户端使用WMI查询语言(WQL)来查询WMI中的数据。
WQL与由DMTF定义的CIM查询语言(CQL)非常相似,但不完全相同。
PowerShell 2.0随WMI和WsMan cmdlet一起提供。
WMI cmdlet(如Get-WmiObject)可以在DCOM上运行,并且仅适用于WMI/Windows。
WsMan cmdlet(如Get-WsManInstance)通过WS-Man协议工作,但它们对于系统管理人员不是友好的。
新的Cim cmdlet提供了两全其美的功能
丰富的PowerShell体验,不再需要XML
通过WsMan(远程默认)和DCOM(本地默认)
使用实现WSMan协议的非Windows设备
简化WMI中类名称空间的发现
Win8中仍然支持旧的WMI和WsMan Cmdlet。 很容易将脚本更改为新的基于标准的CIM cmdlet。
获取CIM cmdlet的列表
Get-Command -Module CimCmdlets
关联表示受管理资源的两个或多个实例(如磁盘和卷或目录和文件)之间的关系。
给定一个类的实例,CIM服务器将返回与给定实例相关的所有实例。
您也可以通过指定目标类或关联关系的名称来过滤结果。
CIM类应实现在其规范中明确定义的方法(称为外部方法)和一组标准的预定义方法。
预定义的方法称为内在的,它们是
枚举一个类的实例
枚举关联的实例
通过在服务器上执行查询来获取实例
获取一个类的特定实例
创建一个新的类实例
修改一个类的实例
删除一个类的实例
在类或实例上调用外部方法
枚举名称空间中的类
获取类架构
订阅指示
退订指示
您会注意到CIM cmdlet是基于CIM操作进行建模的。
CIM指示是受管理系统中事件的表示。
CIM客户端可以通过提供指示类型和过滤表达式来订阅接收指示,该指示类型和过滤表达式选择将传送给客户端的事件。
CimSession表示与CIM服务器的连接。
CimSession并没有与服务器建立物理永久连接,所以CimSession是一个非常轻量级的客户端连接对象。
CimSession可以用来管理任何支持WsMan协议的服务器。
开发人员和高级IT专业人员可以使用CDXML来包装现有的CIM类,以提供更友好的PS任务抽象。
有关详细信息,请参阅(原链接以失效)。
开发人员可以通过实现CIM类并编写CDXML来使用本地代码来创建cmdlet。
WMI博客:http://blogs.msdn.com/b/wmi/
PowerShell博客:http://blogs.msdn.com/b/powershell/
脚本中心:http://technet.microsoft.com/enus/scriptcenter/bb410849
脚本专家:http://blogs.technet.com/b/heyscriptingguy/
对CIM Cmdlet
参数使用Tab
完成(ISE中的Tab + Space
显示下拉菜单)
Get-CimInstance –Namespace <Tab>
Tab
完成类名补全root/cimv2
命名空间中的类Get-CimInstance -ClassName *Bios<Tab>
Get-CimInstance –Namespace root/Microsoft/Windows/smb –ClassName <tab>
注意:使用Tab补全仅适用于本地机器。
Get-CimClass
进行高级类搜索Get-CimClass
Stop*
方法的类Get-CimClass -MethodName Stop*
Handle
属性的类Get-CimClass -PropertyName Handle
*Partition
结尾具有Association
限定符的类Get-CimClass -ClassName *Partition -QualifierName Association
Get-CimClass -Namespace root/Microsoft/Windows/smb -class *Smb* -QualifierName Indication
Get-CimClass
仅适用于支持Schema检索操作的计算机Get-CimInstance -ClassName Win32_Service
Get-CimInstance通过Microsoft.Management.Infrastructure.CimInstance#输出
Get-CimInstance -Query "Select * from Win32_Service Where Name like 'app%'"
Get-CimInstance -ClassName Win32_Service -KeyOnly
Get-CimInstance -ClassName Win32_Service -Property Name,Status
$a = Get-CimInstance -ClassName Win32_Process
Get-CimInstance -InputObject $a[0]
.CimInstanceProperties
- 这个类的属性列表.CimClass
- CIM为这个类提供的模式.CimClass.CimClassMethods
- 这个类支持的方法.CimSystemProperties
- 类似命名空间的系统属性Get-CimInstance Win32_Service -Filter 'Name Like "app%"|export-clixml t1.xml $x = import-clixml .\t1.xml $x[0].pstypenames diff ($x) (Get-CimInstance win32_service -Filter 'Name Like "app%"')
DriveType==3
(硬盘驱动器)获取Win32_LogicalDisk
类的实例$disk1, $diskn = Get-CimInstance -class Win32_LogicalDisk -Filter 'DriveType = 3'
Get-CimAssociatedInstance -CimInstance $disk1
Get-CimAssociatedInstance -CimInstance $disk1 -ResultClassName Win32_DiskPartition
$service = Get-CimInstance Win32_Service -Filter 'Name Like "winrm%"'
Get-CimAssociatedInstance -InputObject $service -Association Win32_DependentService
$c = Get-CimClass Win32_Process
CimInstance
的.CimClass
属性$c.CimClassMethods
$a = Get-CimInstance Win32_Process -Filter "Name Like 'PowerShell%'"
$a | Invoke-CimMethod -MethodName GetOwner
icim -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine="calc.exe"}
New-CimInstance -Class Win32_Environment -Property @{Name="testvar"; VariableValue="testvalue"; UserName="fareast\osajid"}
$a = Get-CimInstance -Class Win32_Environment -Filter "Name='testvar'" #; VariableValue="testvalue"; UserName="fareast\osajid"}
Set-CimInstance -InputObject $a -Property @{VariableValue="ChangedValue"} –PassThru
$a.VariableValue="ChangedValue"
Set-CimInstance -InputObject $a -PassThru
Remove-CimInstance -InputObject $a
$filter = "SELECT * FROM CIM_InstModification WHERE TargetInstance ISA 'Win32_LocalTime'"
Register-CimIndicationEvent -Query $filter -SourceIdentifier "Timer"
Get-Event -SourceIdentifier Timer
Unregister-Event -SourceIdentifier "Timer"
$Action = {$process = $Event.SourceEventArgs.NewEvent;write-host New process Name = $process.ProcessName Id = $process.ProcessId }
Register-CimIndicationEvent -ClassName Win32_ProcessStartTrace -Action $Action -SourceIdentifier "ProcessWatch"
Unregister-Event -SourceIdentifier "ProcessWatch"
-ComputerName
和-CimSession
参数,用于管理远程服务器Get-CimInstance Win32_Service -ComputerName Server1
默认情况下,在传递ComputerName时使用WsMan协议(包括localhost或127.0.0.1)
$s = New-CimSession -CN server1
gcim Win32_Service -CimSession $s
$so = New-CimSessionOption -Protocol DCOM
$s = New-CimSession -CN server1 -SessionOption $so
Get-CimInstance Win32_Service -CimSession $s
gcim Win32_Process -CN server1,server2 | Select Name, PsComputerName
gcim Win32_Process -CN server1,server2 | icim -MethodName GetOwner
关于“PowerShell WMI的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。