Powershell小技巧之使用WMI工具
WMI是一个强大的技术:只需要简单的指定一个WMI类名就能返回它类的所有实例:
PS> Get-WmiObject -Class Win32_BIOSSMBIOSBIOSVersion : 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 *resolutionNameSpace: 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