溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PowerShell WMI的示例分析

發(fā)布時(shí)間:2021-12-18 09:20:29 來源:億速云 閱讀:158 作者:小新 欄目:網(wǎng)絡(luò)安全

這篇文章將為大家詳細(xì)講解有關(guān)PowerShell WMI的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

什么是CIM/WMI?

CIM:公共信息模型(CIM)是用于描述受管理資源(如存儲(chǔ),網(wǎng)絡(luò)或軟件組件)的結(jié)構(gòu)和行為的DMTF標(biāo)準(zhǔn)[DSP0004]。

WMI:Windows Management Instrumentation(WMI)是一種在Windows上實(shí)現(xiàn)CIM標(biāo)準(zhǔn)的CIM服務(wù)器。

什么是WS-Man/WinRM?

WS-Man:WS-Management(WS-Man)協(xié)議是一種基于SOAP的防火墻友好協(xié)議,用于管理客戶端與CIM服務(wù)器進(jìn)行通信。

WinRM:Windows遠(yuǎn)程管理(WinRM)是Windows上的WS-Man協(xié)議的Microsoft實(shí)現(xiàn)。

什么是WQL?

管理客戶端使用WMI查詢語言(WQL)來查詢WMI中的數(shù)據(jù)。

WQL與由DMTF定義的CIM查詢語言(CQL)非常相似,但不完全相同。

什么是新的CIM Cmdlet?

PowerShell 2.0隨WMI和WsMan cmdlet一起提供。

為什么要在3.0中有另一組cmdlet?

WMI cmdlet(如Get-WmiObject)可以在DCOM上運(yùn)行,并且僅適用于WMI/Windows。

WsMan cmdlet(如Get-WsManInstance)通過WS-Man協(xié)議工作,但它們對于系統(tǒng)管理人員不是友好的。

新的Cim cmdlet提供了兩全其美的功能

  • 豐富的PowerShell體驗(yàn),不再需要XML

  • 通過WsMan(遠(yuǎn)程默認(rèn))和DCOM(本地默認(rèn))

  • 使用實(shí)現(xiàn)WSMan協(xié)議的非Windows設(shè)備

  • 簡化WMI中類名稱空間的發(fā)現(xiàn)

Win8中仍然支持舊的WMI和WsMan Cmdlet。 很容易將腳本更改為新的基于標(biāo)準(zhǔn)的CIM cmdlet。

獲取CIM cmdlet的列表

Get-Command -Module CimCmdlets

什么是關(guān)聯(lián)?

關(guān)聯(lián)表示受管理資源的兩個(gè)或多個(gè)實(shí)例(如磁盤和卷或目錄和文件)之間的關(guān)系。

給定一個(gè)類的實(shí)例,CIM服務(wù)器將返回與給定實(shí)例相關(guān)的所有實(shí)例。

您也可以通過指定目標(biāo)類或關(guān)聯(lián)關(guān)系的名稱來過濾結(jié)果。

什么是各種CIM操作?

CIM類應(yīng)實(shí)現(xiàn)在其規(guī)范中明確定義的方法(稱為外部方法)和一組標(biāo)準(zhǔn)的預(yù)定義方法。

預(yù)定義的方法稱為內(nèi)在的,它們是

  • 枚舉一個(gè)類的實(shí)例

  • 枚舉關(guān)聯(lián)的實(shí)例

  • 通過在服務(wù)器上執(zhí)行查詢來獲取實(shí)例

  • 獲取一個(gè)類的特定實(shí)例

  • 創(chuàng)建一個(gè)新的類實(shí)例

  • 修改一個(gè)類的實(shí)例

  • 刪除一個(gè)類的實(shí)例

  • 在類或?qū)嵗险{(diào)用外部方法

  • 枚舉名稱空間中的類

  • 獲取類架構(gòu)

  • 訂閱指示

  • 退訂指示

您會(huì)注意到CIM cmdlet是基于CIM操作進(jìn)行建模的。

什么是CIM指示?

CIM指示是受管理系統(tǒng)中事件的表示。

CIM客戶端可以通過提供指示類型和過濾表達(dá)式來訂閱接收指示,該指示類型和過濾表達(dá)式選擇將傳送給客戶端的事件。

什么是CimSession

CimSession表示與CIM服務(wù)器的連接。

CimSession并沒有與服務(wù)器建立物理永久連接,所以CimSession是一個(gè)非常輕量級(jí)的客戶端連接對象。

CimSession可以用來管理任何支持WsMan協(xié)議的服務(wù)器。

創(chuàng)建基于CIM的cmdlet

開發(fā)人員和高級(jí)IT專業(yè)人員可以使用CDXML來包裝現(xiàn)有的CIM類,以提供更友好的PS任務(wù)抽象。

有關(guān)詳細(xì)信息,請參閱(原鏈接以失效)。

開發(fā)人員可以通過實(shí)現(xiàn)CIM類并編寫CDXML來使用本地代碼來創(chuàng)建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/

在WMI中查找命名空間和類

在PowerShell 3.0中發(fā)布的新CIM Cmdlet使得發(fā)現(xiàn)WMI命名空間和類變得更加容易。

CIM Cmdlet參數(shù)使用Tab完成(ISE中的Tab + Space顯示下拉菜單)

查找頂級(jí)命名空間

Get-CimInstance –Namespace <Tab>

使用Tab完成類名補(bǔ)全

如果未指定命名空間, 則顯示默認(rèn)root/cimv2命名空間中的類

Get-CimInstance -ClassName *Bios<Tab>

Get-CimInstance –Namespace root/Microsoft/Windows/smb –ClassName <tab>

注意:使用Tab補(bǔ)全僅適用于本地機(jī)器。

使用Get-CimClass進(jìn)行高級(jí)類搜索

列出root/cimv2命名空間中的所有類

Get-CimClass

列出包含Stop*方法的類

Get-CimClass -MethodName Stop*

列出具有名為Handle屬性的類

Get-CimClass -PropertyName Handle

查找以*Partition結(jié)尾具有Association限定符的類

Get-CimClass -ClassName *Partition -QualifierName Association

Get-CimClass -Namespace root/Microsoft/Windows/smb -class *Smb* -QualifierName Indication

注意:Get-CimClass僅適用于支持Schema檢索操作的計(jì)算機(jī)


從WMI獲取數(shù)據(jù)

查找Win32_Service類的實(shí)例

Get-CimInstance -ClassName Win32_Service

Get-CimInstance通過Microsoft.Management.Infrastructure.CimInstance#輸出

通過WQL查詢獲取數(shù)據(jù)

Get-CimInstance -Query "Select * from Win32_Service Where Name like 'app%'"

僅獲取屬性的子集 - 通常用于減少網(wǎng)絡(luò)/內(nèi)存占用量

Get-CimInstance -ClassName Win32_Service -KeyOnly

Get-CimInstance -ClassName Win32_Service -Property Name,Status

變量$A Cim實(shí)例中保存的是客戶端上服務(wù)器對象狀態(tài)的快照

$a = Get-CimInstance -ClassName Win32_Process

注意:作為輸入對象其傳遞的對象不會(huì)更改

Get-CimInstance -InputObject $a[0]

如果您有使用WMI cmdlet的腳本,則可以輕松將它們遷移到新的CIM Cmdlet


Peeping into CimInstance

CimInstance類具有以下屬性

.CimInstanceProperties - 這個(gè)類的屬性列表

.CimClass - CIM為這個(gè)類提供的模式

.CimClass.CimClassMethods - 這個(gè)類支持的方法

.CimSystemProperties - 類似命名空間的系統(tǒng)屬性

注意:為使Cim Schema準(zhǔn)確,CIM Server必須支持類模式檢索操作。

CimInstance是可移植的 - 支持完整的序列化和反序列化

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%"')

Working with Associations

使用過濾條件DriveType==3 (硬盤驅(qū)動(dòng)器)獲取Win32_LogicalDisk類的實(shí)例

$disk1, $diskn = Get-CimInstance -class Win32_LogicalDisk -Filter 'DriveType = 3'

獲取關(guān)聯(lián)的實(shí)例 disk1

Get-CimAssociatedInstance -CimInstance $disk1

給定一個(gè)Win32_LogicalDisk的實(shí)例,給出特定類型的關(guān)聯(lián)實(shí)例

Get-CimAssociatedInstance -CimInstance $disk1 -ResultClassName Win32_DiskPartition

查找WinRM服務(wù)所依賴的服務(wù)

$service = Get-CimInstance Win32_Service -Filter 'Name Like "winrm%"'

Get-CimAssociatedInstance -InputObject $service -Association Win32_DependentService


調(diào)用CIM方法

查看一個(gè)類中有哪些方法

$c = Get-CimClass Win32_Process

你也可以使用CimInstance.CimClass屬性

$c.CimClassMethods

在實(shí)例上調(diào)用一個(gè)方法

$a = Get-CimInstance Win32_Process -Filter "Name Like 'PowerShell%'"

$a綁定到InputObject參數(shù)

$a | Invoke-CimMethod -MethodName GetOwner

調(diào)用類靜態(tài)方法 - icim是Invoke-CimMethod的別名

icim -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine="calc.exe"}


執(zhí)行CIM操作

創(chuàng)建一個(gè)實(shí)例 - CIM內(nèi)部支持創(chuàng)建、修改、刪除實(shí)例方法

New-CimInstance -Class Win32_Environment -Property @{Name="testvar"; VariableValue="testvalue"; UserName="fareast\osajid"}

修改一個(gè)實(shí)例

$a = Get-CimInstance -Class Win32_Environment -Filter "Name='testvar'" #; VariableValue="testvalue"; UserName="fareast\osajid"}

Set-CimInstance -InputObject $a -Property @{VariableValue="ChangedValue"} –PassThru

相同的結(jié)果可以通過設(shè)置$a的VariableValue屬性來實(shí)現(xiàn)

要更新服務(wù)器上的對象,請調(diào)用Set-CimInstance

$a.VariableValue="ChangedValue"

Set-CimInstance -InputObject $a -PassThru

刪除一個(gè)實(shí)例

Remove-CimInstance -InputObject $a


事件 – CIM Indications

$filter = "SELECT * FROM CIM_InstModification WHERE TargetInstance ISA 'Win32_LocalTime'"

使用過濾器訂閱事件

Register-CimIndicationEvent -Query $filter -SourceIdentifier "Timer"

使用PowerShell事件機(jī)制獲取事件

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"


Working with remote servers

CIM Cmdlet具有-ComputerName-CimSession參數(shù),用于管理遠(yuǎn)程服務(wù)器

Get-CimInstance Win32_Service -ComputerName Server1

默認(rèn)情況下,在傳遞ComputerName時(shí)使用WsMan協(xié)議(包括localhost或127.0.0.1)

如果對同一臺(tái)服務(wù)器執(zhí)行多個(gè)操作,建議創(chuàng)建一個(gè)CimSession

$s = New-CimSession -CN server1

gcim Win32_Service -CimSession $s

管理低級(jí)別的Windows服務(wù)器

有兩種方法可以管理低級(jí)別Windows服務(wù)器

安裝Windows Management Framework 3.0(推薦)或使用DCOM協(xié)議

$so = New-CimSessionOption -Protocol DCOM$s = New-CimSession -CN server1 -SessionOption $soGet-CimInstance Win32_Service -CimSession $s

CimInstance的PSComputerName屬性顯示源計(jì)算機(jī)名稱

gcim Win32_Process -CN server1,server2 | Select Name, PsComputerName

如果傳遞CN(ComputerName)或CimSession來獲取CimInstance,則不必為后續(xù)操作再次指定它。

gcim Win32_Process -CN server1,server2 | icim -MethodName GetOwner

關(guān)于“PowerShell WMI的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI