一起学习网 一起学习网

Powershell小技巧之使用WMI工具

WMI是一个强大的技术:只需要简单的指定一个WMI类名就能返回它类的所有实例:

PS> Get-WmiObject -Class Win32_BIOS

SMBIOSBIOSVersion : 76CN27WW Manufacturer : LENOVO Name : 76CN27WW SerialNumber : 1006250300406 Version : LENOVO - 1

你如何知道它有哪些类呢?这里有一款查找工具:

function Find-WMIClass

{

   param

   (

      [Parameter(Mandatory=$true)]

      $SearchTerm = 'Resolution'

   )

   

   Get-WmiObject -Class * -List | 

   Where-Object { $_.Properties.Count -ge 3 } |

   Where-Object { $_.Name -notlike 'Win32_Perf*'  } |

   Where-Object {

      $ListOfNames = $_.Properties | Select-Object -ExpandProperty Name

      ($ListOfNames -like "*$SearchTerm*") -ne $null

   } |

   Sort-Object -Property Name  

}

设置搜索条件后,代码将搜索出包含指定属性名的类(还可以通过通配符扩大搜索范围)

下面将找出所有包含“resolution”结尾的WMI类:

PS> Find-WMIClass -SearchTerm *resolution

NameSpace: ROOTcimv2

Name Methods Properties ---- ------- ---------- CIM_CacheMemory {SetPowerState, R... {Access, AdditionalErr... CIM_CurrentSensor {SetPowerState, R... {Accuracy, Availabilit... CIM_FlatPanel {SetPowerState, R... {Availability, Caption... CIM_Memory {SetPowerState, R... {Access, AdditionalErr... CIM_MonitorResolution {} {Caption, Description,... CIM_NonVolatileStorage {SetPowerState, R... {Access, AdditionalErr... CIM_NumericSensor {SetPowerState, R... {Accuracy, Availabilit... CIM_PCVideoController {SetPowerState, R... {AcceleratorCapabiliti... CIM_PointingDevice {SetPowerState, R... {Availability, Caption... CIM_Printer {SetPowerState, R... {Availability, Availab... CIM_Tachometer {SetPowerState, R... {Accuracy, Availabilit... CIM_TemperatureSensor {SetPowerState, R... {Accuracy, Availabilit... CIM_VideoController {SetPowerState, R... {AcceleratorCapabiliti... CIM_VideoControllerResolution {} {Caption, Description,... CIM_VolatileStorage {SetPowerState, R... {Access, AdditionalErr... CIM_VoltageSensor {SetPowerState, R... {Accuracy, Availabilit... Win32_CacheMemory {SetPowerState, R... {Access, AdditionalErr... Win32_CurrentProbe {SetPowerState, R... {Accuracy, Availabilit... Win32_DisplayControllerConfigura... {} {BitsPerPixel, Caption... Win32_MemoryArray {SetPowerState, R... {Access, AdditionalErr... Win32_MemoryDevice {SetPowerState, R... {Access, AdditionalErr... Win32_NetworkAdapterConfiguration {EnableDHCP, Rene... {ArpAlwaysSourceRoute,... Win32_PointingDevice {SetPowerState, R... {Availability, Caption... Win32_Printer {SetPowerState, R... {Attributes, Availabil... Win32_PrinterConfiguration {} {BitsPerPel, Caption, ... Win32_SMBIOSMemory {SetPowerState, R... {Access, AdditionalErr... Win32_TemperatureProbe {SetPowerState, R... {Accuracy, Availabilit... Win32_VideoConfiguration {} {ActualColorResolution... Win32_VideoController {SetPowerState, R... {AcceleratorCapabiliti... Win32_VoltageProbe {SetPowerState, R... {Accuracy, Availabilit...

接着,就可以使用类名查看它的有效数据啦:

PS> Get-WmiObject -Class CIM_CacheMemory | Select-Object -Property *

心得:

其实有个类似功能的图形工具比这段代码更方便更直观,它叫ScriptomaticV2。

支持Powershell所有版本

Powershell小技巧之从文件获取系统日志
有时你可能会需要分析系统文件将他们传输到硬盘,或你想直接从evtx读取系统日志。你可以这样做:$path="$env:windirSystem32WinevtLogsSetup.evtx"Get-WinEvent-Pat

Powershell小技巧之非相同域或信任域也能远程
默认通过Enable-PSRemoting打开PS远程,启动了Kerberos认证。这个方法只适合两台电脑在相同域或信任域内的指定电脑(名字可以带后缀).但它不支持跨域、

Powershell小技巧之开启关闭远程连接
如果你要通过Powershell远程访问电脑。这时你必须在对方电脑(你想要访问的电脑),用管理员权限执行下面代码:PSEnable-PSRemoting-SkipNetworkProfileCheck-Force