您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。