Powershell获取WMI设备清单
Powershell获取WMI设备清单
支持所有PS版本。
WMI服务能够报告详细的硬件信息。通常,每个硬件都来自它们自己的WMI代理类。但是要找出这些硬件类的名字是不容易。
所有硬件类都在同一个WMI根下面,你可以在根类查询所有的硬件:
1
|
Get-WmiObject -Class CIM_LogicalDevice | Out-GridView |
上面命令能返回基础硬件清单。但是你要获得更多的信息,加上补充的代码,你还可以从WMI中获得硬件类的名字:
1
2
3
4
|
Get-WmiObject -Class CIM_LogicalDevice | Select-Object -Property __Class, Description | Sort-Object -Property __Class -Unique | Out-GridView |
现在你可以使用不同的类名查询硬件的详细类型和获得它们的清单:
1
2
3
4
5
6
|
PS> Get-WmiObject -Class Win32_SoundDevice Manufacturer Name Status StatusInfo ------------ ---- ------ ---------- Cirrus Logic, Inc. Cirrus Logic CS4... OK 3 Intel(R) Corpora... Intel(R) Display... OK 3 |
原文地址:WMI Device Inventory
$Server = $env:computername #server's CPU Mem Hardinfor $cpu = gwmi –computername $Server win32_Processor $men = gwmi -ComputerName $Server win32_OperatingSystem $Disks = gwmi –Computer: $Server win32_logicaldisk -filter "drivetype=3" $Havecpu = "{0:0.0} %" -f $cpu.LoadPercentage $Allmen = "{0:0.0} MB" -f ($men.TotalVisibleMemorySize / 1KB) $Freemen = "{0:0.0} MB" -f ($men.FreePhysicalMemory / 1KB) $Permem = "{0:0.0} %" -f ((($men.TotalVisibleMemorySize-$men.FreePhysicalMemory)/$men.TotalVisibleMemorySize)*100) Write-Host "COMPUTER:$Server"`r`n Write-Host "CPU: $Havecpu"`r`n Write-Host "Total Mem:$Allmen"`r`n Write-Host "Left Mem:$Freemen"`r`n Write-Host "Used Mem:$Permem"`r`n $IpAdd = (Get-WmiObject -class win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').ipaddress[0] Write-Host "Ipaddress:$IpAdd"`r`n
Get-WmiObject 即将过时
在PowerShell 3.0 中,你仍然可以使用功能强大的Get-WmiObject命令,但是它们会逐渐被CIM命令所替代。如果你已经在使用Get-WmiObject命令查询数据。那可以非常流畅地切换至Get-CimInstance,因为这类命令都比较类似。只不过Get-CimInstance执行的结果只是名副其实的Instance,没有包含任何方法信息。
一方面如果你要确保向后兼容,另一方面你可能想避免使用CIM的命令,这就需要PowerShell 3.0。但可惜的是,PowerShell 3.0 不能运行在XP,Vista,Win 2003中。
原文链接:Get-WmiObject Becomes Obsolete
Powershell 获取系统可用内存
http://www.pstips.net/powershell-get-free-memory.html
使用Powershell获取系统可用内存可以使用两种方法,一种是wmi Win32_OperatingSystem对象,另一种是可以通过性能计数器。
通过Win32_OperatingSystem,代码如下:
1
2
3
4
|
$ops = Get-WmiObject -Class Win32_OperatingSystem "机器名 : {0}" -f $ops .csname "可用内存(MB): {0}" -f ( [math] ::round( $ops .FreePhysicalMemory / 1kb, 2)) "可用内存(GB): {0}" -f ( [math] ::round(( $ops .FreePhysicalMemory / (1mb)), 2)) |
输出如下:
机器名 : BAOZHEN-PC 可用内存(MB): 1834.59 可用内存(GB): 1.79
通过性能计数器获取可用内存,代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
#查看内存相关的性能计数器 ( Get-Counter -ListSet memory).Counter #Available Bytes 为可用的内存大小 #通过Path获取该计数器 $availableMemoryCounter = Get-Counter -Counter "\Memory\Available Bytes" $freeMemory = $availableMemoryCounter .CounterSamples[0].rawValue #把可用内存转换成GB "可用内存:$([Math]::Round($freeMemory/1gb,2))GB" #把可用内存转换成MB "可用内存:$([Math]::Round($freeMemory/1mb,2))MB" |
输出如下:
MemoryCache Bytes MemoryCache Bytes Peak MemoryPool Paged Resident Bytes MemorySystem Code Total Bytes MemorySystem Code Resident Bytes MemorySystem Driver Total Bytes MemorySystem Driver Resident Bytes MemorySystem Cache Resident Bytes Memory% Committed Bytes In Use MemoryAvailable KBytes MemoryAvailable MBytes MemoryTransition Pages RePurposed/sec MemoryFree & Zero Page List Bytes MemoryModified Page List Bytes MemoryStandby Cache Reserve Bytes MemoryStandby Cache Normal Priority Bytes MemoryStandby Cache Core Bytes 可用内存:1.69GB 可用内存:1731MB
===============================================
#查看当前CPU利用率
$counter = New-Object Diagnostics.PerformanceCounter $counter.CategoryName = "Processor" $counter.CounterName = "% Processor Time" $counter.InstanceName = "_Total" while ($true) { $value = $counter.NextValue() Write-Host "CPU: $value" sleep 1 }
#查看进程的CPU利用率:
#取CPU核心数量,如果计算机为多核心的话,Process/% Processor Time的结果为每个核心的CPU利用率之和,会大于100% $cpus = (gwmi win32_computersystem).NumberOfLogicalProcessors $counter = New-Object Diagnostics.PerformanceCounter $counter.CategoryName = "Process" $counter.CounterName = "% Processor Time" $counter.InstanceName = "winrar" #定义需要监视的进程 #获取当前计数器的值 $counter.NextValue()/$cpus
#查看进程的内存使用情况:
$TotalMemory = (Get-WmiObject -Class Win32_PhysicalMemory |measure capacity -sum).Sum #(gwmi win32_computersystem).TotalPhysicalMemory $counter = New-Object Diagnostics.PerformanceCounter $counter.CategoryName = "Process" $counter.CounterName = "Working Set - Private" $counter.InstanceName = "ZQErpService" #定义需要监视的进程 #获取当前计数器的值 $counter.NextValue()/$TotalMemory
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南