在 Windows 11 和更新的版本(如 Windows Server 2025)中,wmic 命令已经被弃用,取而代之的是 PowerShell 提供的更强大的命令和模块。您可以通过 PowerShell 获取有关内存的详细信息,包括每条内存条的容量、总内存以及最大支持内存。
wmic.exe 移除后 PowerShell CIM 完整迁移手册
重要说明:wmic.exe 只是命令行工具被删除,WMI 底层服务完全保留Microsoft ...。✅ 官方主推:Get‑CimInstance(CIM cmdlet),兼容 PS5.1 / PS7,新脚本全部使用;⚠️Get‑WmiObject为旧 WMI 封装,PS7 已移除,仅用于老脚本兼容,不要用于新写脚本learn.micr...。
核心对照表(wmic → Get‑CimInstance)
语法口诀:wmic 类名 get 属性1,属性2→Get‑CimInstance 类名 | Select‑Object 属性1,属性2
| wmic 旧命令 | PowerShell (CIM 推荐命令) | 用途 | ||
|---|---|---|---|---|
wmic os get caption,version,buildnumber |
`Get-CimInstance Win32_OperatingSystem | Select Caption,Version,BuildNumber` | 操作系统信息 | |
wmic qfe get hotfixid,installedon |
`Get-CimInstance Win32_QuickFixEngineering | Select HotFixID,InstalledOn` | 已安装补丁 KB(漏洞核查专用) | |
wmic cpu get name,maxclockspeed |
`Get-CimInstance Win32_Processor | Select Name,MaxClockSpeed` | CPU 信息 | |
wmic logicaldisk get name,size,freespace |
`Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" | Select DeviceID,Size,FreeSpace` | 本地磁盘 | |
wmic service get name,state,startmode |
`Get-CimInstance Win32_Service | Select Name,State,StartMode` | 系统服务列表 | |
wmic process get name,processid |
`Get-CimInstance Win32_Process | Select Name,ProcessId` | 进程列表 | |
wmic nicconfig get ipaddress,macaddress |
`Get-CimInstance Win32_NetworkAdapterConfiguration | Where {$_.IPAddress} | Select Description,IPAddress,MACAddress` | 网卡 IP/MAC |
wmic computersystem get username |
`Get-CimInstance Win32_ComputerSystem | Select UserName` | 当前登录用户 |
远程查询(替代 wmic /node:IP 类名 get xxx)
Get‑CimInstance默认使用 WinRM(5985);老服务器没开 WinRM,可以强制回退 DCOM 协议(原来 wmic 底层协议)
方式 1:WinRM 方式(推荐,企业环境优先)
# 远程查询单台机器系统信息
Get-CimInstance Win32_OperatingSystem -ComputerName "DC01" -Credential (Get-Credential)
方式 2:兼容老旧服务器,强制 DCOM(对应旧 wmic /node)
# 创建DCOM会话选项
$cimOpt = New-CimSessionOption -Protocol DCOM
# 创建会话
$session = New-CimSession -ComputerName "OLD‑SRV01" -SessionOption $cimOpt -Credential (Get-Credential)
# 执行查询
Get-CimInstance Win32_Service -CimSession $session
# 使用完成销毁会话
Remove-CimSession $session
批量多服务器:可以传入数组‑ComputerName @("SRV01","SRV02"),输出可以直接导出 CSV 报表。
方法调用(替代 wmic call)
wmic process call create "notepad.exe"
Invoke‑CimMethodMicrosoft ...Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine="notepad.exe"}
结合之前漏洞巡检实战脚本(CVE‑2026‑57089 SMB / CVE‑2026‑62878 DNS)
1. SMB 漏洞 CVE‑2026‑57089 本地巡检
Write-Host "===== CVE‑2026‑57089 SMBv3风险检测 ====="
#系统版本
Get-CimInstance Win32_OperatingSystem | Select Caption,Version,BuildNumber | Format-List
#SMB服务LanmanServer状态
Get-CimInstance Win32_Service -Filter "Name='LanmanServer'" | Select Name,State,StartMode | Format-List
#445端口监听
Get-NetTCPConnection -LocalPort 445 -ErrorAction SilentlyContinue | Select LocalAddress,LocalPort,State,OwningProcess
#补丁校验
$targetKbs = "KB5099444","KB5099445","KB5099535","KB5099536","KB5099538","KB5099539","KB5099540","KB5101649","KB5101650"
$patches = Get-CimInstance Win32_QuickFixEngineering | Where-Object {$_.HotFixID -in $targetKbs}
if($patches){
Write-Host "✅已安装修复补丁"
$patches | Select HotFixID,InstalledOn | Format-Table
}else{
Write-Warning "⚠️未检测修复补丁,存在高危风险"
}
2. DNS 漏洞 CVE‑2026‑62878 本地巡检
Write-Host "===== CVE‑2026‑62878 DNS Server蠕虫漏洞检测 ====="
#DNS角色
Get-WindowsFeature DNS-Server | Select Name,Installed | Format-List
#DNS服务状态
Get-CimInstance Win32_Service -Filter "Name='DNS'" | Select Name,State,StartMode | Format-List
#53端口监听
Get-NetUDPEndpoint -LocalPort 53 -ErrorAction SilentlyContinue
Get-NetTCPConnection -LocalPort 53 -ErrorAction SilentlyContinue | Select LocalAddress,LocalPort,State
关键坑点说明
Get‑WmiObject仅存在 PS5.1,PS7 中完全不存在,新脚本不要用,统一用Get‑CimInstance博客园- 本地查询:
Get‑CimInstance内部依然调用 WMI COM 接口,WMI 服务没丢,只是 wmic.exe 二进制没了Microsoft ... - 远程:默认 WinRM;老环境必须 DCOM 时,使用
New‑CimSessionOption ‑Protocol DCOM,不要直接用Get‑WmiObject。 - WQL 过滤语法和 wmic 保持一致,
‑Filter "Name='xxx'",单引号。 - 网络套接字类(TCP/UDP 端口)优先使用
Get‑NetTCPConnection、Get‑NetUDPEndpoint,不要强行用 Win32_TCPIPPrinterPort 等老旧 WMI 类。
小技巧:查找 WMI 类名
#搜索所有Win32开头WMI类
Get-CimClass -Namespace root\CIMv2 | Where CimClassName -Like Win32* | Select CimClassName
wmic 弃用|Win11 / Windows Server 2025:wmic → PowerShell (CIM)
基础定位WMIC:WMI Command‑Line Utility,WMI 的命令行前端;自 Windows 11 22H2、Windows Server 2025 正式标记为弃用 (deprecated)。不是移除 WMI 底层,只是废弃 wmic.exe 这个命令行工具,替代方案为 PowerShell CIM Cmdlet (Get‑CimInstance系列)。
一、底层原理解构
1)WMIC 完整技术栈(旧栈)
wmic.exe (命令行解析器)
↓ COM调用
WMI COM API (wbemcli.dll)
↓
WMI 管理服务:winmgmt.exe(WMI Provider Host)
↓
各类 WMI Provider(dll 提供程序) → 内核/驱动/注册表/系统服务
- wmic.exe 本身不做数据采集,只是一个命令解析 + 格式化输出外壳;所有查询、枚举、修改全部代理给 WMI COM 接口。
- wmic 把命令行字符串解析,转换为 WQL (WMI Query Language) 查询,提交给
winmgmt服务,接收返回对象,再把对象格式化输出为文本表格。 - 底层 WMI 引擎 (
winmgmt) 并没有被移除,CIM cmdlet 依然复用同一套底层提供程序。
2)CIM Cmdlet 新栈(PowerShell 替代栈)
PowerShell 进程(pwsh.exe/powershell.exe)
↓ .NET System.Management.Instrumentation (Microsoft.Management.Infrastructure.dll,简称 MMI)
↓ CIM‑COM 桥接
winmgmt.exe WMI 服务(兼容旧WMI providers)
↓
各类 WMI/CIM Provider → 系统内核、驱动、注册表、服务
关键点:
- CIM 不是一套全新独立底层;CIM Cmdlet 仍然复用 Windows 原有 WMI 提供程序与 winmgmt 服务。
- 区别发生在上层调用层:wmic.exe 原生 C++;CIM 是 .NET 托管封装,输出强类型对象,不再是纯文本。
- WQL 查询语法大部分兼容;但 CIM 支持 CIM‑XML 标准,支持更标准的远程管理(WinRM)。
二、依赖文件
📦 wmic.exe(弃用组件)
C:\Windows\System32\wbem\wmic.exe- 32 位:
C:\Windows\SysWOW64\wbem\wmic.exe - 二进制:C++ 原生程序,wmi 命令行外壳
- 32 位:
- 直接依赖:
wbemcli.dll:WMI Client COM 组件,wmic 核心调用库wbemprox.dll:WMI 代理组件- 系统服务:
winmgmt(Windows Management Instrumentation,WMI 服务)
- 辅助依赖:
- WMI 存储库:
%windir%\System32\wbem\Repository\(WMI 数据库) - 各类 provider dll:
%windir%\System32\wbem\*.dll,硬件 / 操作系统信息真正来源
- WMI 存储库:
弃用行为:Win11/Server2025,wmic.exe 仍然存在二进制,但系统元数据标记 Deprecated;未来版本会移除二进制文件。⚠️ 弃用 ≠ 删除底层 WMI 引擎 winmgmt。很多旧业务脚本、第三方软件依然依赖 WMI providers。
📦 CIM PowerShell 替代栈依赖文件
Microsoft.Management.Infrastructure.dll(MMI,CIM 核心托管库)- PowerShell 5.1 / PowerShell 7+ 均内置;位于 GAC / PowerShell 安装目录
- 底层依然依赖:
winmgmt服务、wbemcli.dll、WMI Repository、各类 WMI provider dll
- 远程 CIM 操作额外依赖:
- WinRM 服务 (winrm),
wsman.dll,实现 CIM‑XML over HTTP
- WinRM 服务 (winrm),
- PowerShell 内置模块:
CimCmdlets,提供Get‑CimInstance,Invoke‑CimMethod,Set‑CimInstance等 cmdlet。
三、依赖关系
wmic.exe 依赖链
wmic.exe
├─必须依赖:winmgmt 服务(未运行则 wmic 直接报错)
├─COM组件:wbemcli.dll(WMI客户端)
├─WMI存储库 Repository(损坏会wmic查询失败)
└─各类WMI Provider dll(对应硬件、操作系统类,如 Win32_Process、Win32_Service)
CIM Cmdlet 依赖链
CimCmdlets(PowerShell模块)
├─Microsoft.Management.Infrastructure.dll (.NET托管CIM客户端)
│ ├─本地访问:调用 wbemcli.dll → winmgmt服务 → WMI providers
│ └─远程访问:调用 WinRM(wsman),CIM‑XML over网络,不走DCOM
├─同样依赖 WMI Repository、WMI providers
└─PowerShell运行时(powershell.exe/pwsh.exe)
核心差异点:
- wmic 远程:底层走 DCOM(135 端口,动态高位端口,防火墙配置麻烦)
- Get‑CimInstance 远程:优先走 WinRM(5985/5986);也可兼容 DCOM 模式,但不推荐。
四、完整逻辑链路
链路 A:执行 wmic cpu get name
- 用户运行 wmic.exe,解析命令行参数
cpu get name,转换为 WQL:SELECT Name FROM Win32_Processor - wmic.exe 加载 wbemcli.dll COM 接口,向本地 winmgmt 服务提交 WQL 查询
- winmgmt 定位
Win32_Processor对应的 WMI Provider dll,调用 provider 获取 CPU 硬件信息 - provider 收集硬件信息,返回 WMI 对象集合回 winmgmt
- winmgmt 将结果返回 wmic.exe
- wmic.exe 将 WMI 对象序列化为纯文本表格输出控制台
痛点:输出是文本字符串,没有结构化对象,脚本中解析需要字符串切割,极易出错。
链路 B:执行 Get‑CimInstance Win32_Processor
- PowerShell 加载 CimCmdlets 模块,调用 MMI dll
- MMI 构建 CIM 查询,本地模式调用 wbemcli.dll,提交查询给 winmgmt 服务
- winmgmt 调用对应 WMI provider 采集硬件信息,返回 CIM 对象
- 直接把强类型 CIM 对象交付 PowerShell 管道,不做文本格式化
- PowerShell 控制台后期格式化输出表格;脚本中可以直接访问属性:
$cpu.Name
关键区别:wmic:查询后立刻转为文本;CIM:传递对象,格式化仅用于显示,脚本可以直接操作属性、方法。
五、配套链(生态、迁移、故障链)
1、功能等价映射配套
| WMIC 功能 | PowerShell CIM 替代 |
|---|---|
wmic cpu get * |
Get‑CimInstance Win32_Processor |
wmic service get name,state |
Get‑CimInstance Win32_Service |
wmic process call create notepad.exe |
Invoke‑CimMethod Win32_Process ‑Name Create ‑Arguments @{CommandLine="notepad.exe"} |
wmic /node:PC01 os get caption(远程 DCOM) |
Get‑CimInstance Win32_OperatingSystem ‑CimSession $session(CimSession 优先 WinRM) |
注意:不要使用过时的Get‑WmiObject;Get‑WmiObject也已经弃用,它同样是旧 WMI 托管接口,优先全部迁移 CimCmdlets。
2、系统配套组件
- WMI 存储库完整性:两者共同依赖;repository 损坏,wmic、CIM 全部失效。
- winmgmt 服务状态:停止则两套接口全部不可用。
- 远程场景配套:
- wmic 远程:需要 DCOM 放行,防火墙开放 135 + 动态端口,域环境传统方案,公网极不友好。
- CIM 远程:需要启用 PowerShell Remoting (WinRM),5985 (HTTP)/5986 (HTTPS),企业现代标准。
3、故障链条
winmgmt服务挂掉 → wmic 报错,Get‑CimInstance 也报错。- WMI Repository 损坏 → wmic 返回无效数据;CIM 查询同样异常。
- 特定 provider 损坏:某一个 WMI 类查询失败,两套工具同时失败。
- 脚本迁移坑:旧脚本截取 wmic 文本输出,迁移 CIM 后直接操作对象,不能继续字符串切割。
4、弃用演进配套时间线
- Win10:wmic 可用,未弃用;Get‑CimInstance 已内置。
- Win11 22H2:wmic.exe 标记 deprecated,二进制保留,系统事件日志提示弃用警告。
- Windows Server 2025:wmic 正式弃用;微软文档强烈要求迁移 CIM Cmdlet。
- 未来 Windows 版本:计划彻底移除 wmic.exe 二进制;底层 WMI 引擎 winmgmt 继续保留,兼容存量软件。
六、核心认知误区澄清
-
❌误区:wmic 弃用 = WMI 整个底层被删除✅事实:只废弃 wmic.exe 命令行工具;winmgmt 服务、WMI Provider、WQL 查询全部保留,CIM 底层继续复用这套体系。
-
❌误区:迁移目标是 Get‑WmiObject✅事实:
Get‑WmiObject同样弃用,属于旧 System.Management,必须迁移 Get‑CimInstance。 -
❌误区:CIM 是完全独立全新采集栈✅事实:CIM 只是上层托管封装,硬件系统信息来源仍然是原有 WMI providers。
-
❌误区:CIM 远程依然走 DCOM✅事实:CIM 默认优先 WinRM;DCOM 仅作为兼容备选,企业运维不建议使用。
七、迁移风险点
- 大量老批处理脚本直接解析 wmic 文本输出,迁移需要重写逻辑,改为操作 PowerShell 对象。
- 第三方老旧运维脚本、CMDB 采集脚本大量依赖 wmic,升级 Win11/Server2025 后未来会失效。
- 远程场景:原来 DCOM/wmic 远程,升级后需要部署 WinRM (PowerShell Remoting),涉及防火墙、权限加固。
在 Windows 11 和更新的版本(如 Windows Server 2025)中,wmic 命令已经被弃用,取而代之的是 PowerShell 提供的更强大的命令和模块。您可以通过 PowerShell 获取有关内存的详细信息,包括每条内存条的容量、总内存以及最大支持内存。
使用 PowerShell 查询内存信息的替代方法:
1. 查询总物理内存(Total Physical Memory)
您可以使用 Get-ComputerInfo 或 Get-WmiObject 查询总内存(物理内存)。
(Get-ComputerInfo).TotalPhysicalMemory
使用
|
Get-WmiObject -Class Win32_OperatingSystem | Select-Object TotalVisibleMemorySize, FreePhysicalMemory
这里的 TotalVisibleMemorySize 是操作系统可以访问的总物理内存(单位:KB),FreePhysicalMemory 是当前系统空闲的物理内存(单位:KB)。
2. 查询每条内存条的容量和其他信息
通过 Get-WmiObject 查询每条内存条的详细信息,如容量、速度等:
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Manufacturer, Capacity, Speed, MemoryType, SerialNumber
Manufacturer:内存条的制造商。Capacity:内存条的容量(以字节为单位)。Speed:内存条的速度(以 MHz 为单位)。MemoryType:内存类型(如 DDR4)。SerialNumber:内存条的序列号。
注意: Capacity 返回的单位是字节(Bytes),可以将它转换为 GB 以便更易读。以下是将字节转换为 GB 的示例代码:
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Manufacturer, @{Name="CapacityGB";Expression={[math]::round($_.Capacity / 1GB, 2)}}, Speed, MemoryType
3. 查询操作系统最大支持的内存(最大物理内存)
Windows 操作系统并不总是直接提供最大支持内存的详细信息,但您可以通过以下方式查询系统的内存类型和版本,推测其支持的最大内存:
(Get-WmiObject -Class Win32_ComputerSystem).MaxMemory
如果该命令返回为空,可能是由于该系统信息未填充,您可以查看硬件文档或使用其他系统监控工具(如 CPU-Z)来获取最大支持内存的具体数值。
4. 查询虚拟内存大小
如果您还想查看虚拟内存(分页文件)相关信息,可以使用以下命令:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object TotalVirtualMemorySize, FreeVirtualMemory
TotalVirtualMemorySize 是虚拟内存的总大小,FreeVirtualMemory 是当前可用的虚拟内存(单位:KB)。
5. 查看系统内存使用情况
要查看系统的内存使用情况,您可以使用 Get-Counter 来获取更实时的内存性能数据:
Get-Counter -Counter '\Memory\Available Bytes'
该命令将返回可用内存的字节数。要查看更多内存相关的性能指标,可以使用:
Get-Counter -Counter '\Memory\*'
示例:查询内存总览
如果您想要一个综合的内存查询结果,包括物理内存、每条内存条的详细信息以及操作系统的虚拟内存信息,您可以使用以下脚本:
$memoryInfo = Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Manufacturer, @{Name="CapacityGB";Expression={[math]::round($_.Capacity / 1GB, 2)}}, Speed, MemoryType
$osInfo = Get-WmiObject -Class Win32_OperatingSystem | Select-Object TotalVisibleMemorySize, FreePhysicalMemory, TotalVirtualMemorySize, FreeVirtualMemory
$computerSystem = Get-WmiObject -Class Win32_ComputerSystem | Select-Object TotalPhysicalMemory, MaxMemory
# 输出结果
$memoryInfo
$osInfo
$computerSystem
此脚本会显示每条内存条的容量、操作系统的物理和虚拟内存信息,以及计算机系统的总内存和最大内存支持信息。
结论:
wmic 被弃用后,PowerShell 提供了许多强大且灵活的命令来查询内存信息。通过 Get-WmiObject 和 Get-ComputerInfo 等命令,您可以全面了解系统的内存配置、每条内存条的详情及操作系统的内存状态。如果您需要进一步查询硬件限制或最大支持内存,建议查阅主板或系统的官方文档。
PowerShell 还提供了许多其他有用的命令来获取系统内存相关的信息。以下是一些常见的命令和技巧,它们可以帮助您更全面地了解内存使用情况和硬件信息:
1. 查看操作系统内存使用情况(详细)
通过 Get-WmiObject 查询操作系统内存的详细信息:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object TotalVisibleMemorySize, FreePhysicalMemory, TotalVirtualMemorySize, FreeVirtualMemory, PageFileUsage, WorkingSetSize
PageFileUsage: 当前使用的分页文件大小(虚拟内存使用情况)。WorkingSetSize: 系统的当前工作集大小(实际使用的内存)。
2. 查看当前进程的内存使用情况
可以查看每个进程的内存使用情况(如已使用内存):
Get-WmiObject -Class Win32_Process | Select-Object Name, ProcessId, WorkingSetSize | Sort-Object WorkingSetSize -Descending
Name: 进程名ProcessId: 进程 IDWorkingSetSize: 进程的内存占用(字节数)
3. 查看内存使用的分页文件(Virtual Memory)统计
分页文件(虚拟内存)是操作系统将一部分内存内容移到磁盘的区域,您可以通过以下命令来查看它的使用情况:
Get-WmiObject -Class Win32_PageFileUsage | Select-Object Name, CurrentUsage, AllocatedBaseSize, Status
CurrentUsage: 当前分页文件的使用量(字节)。AllocatedBaseSize: 分配的分页文件大小(字节)。Status: 分页文件的状态。
4. 查看物理内存的详细信息(包括内存条数量)
如果您需要查看内存条的详细信息,例如总内存数量和每条内存的容量,可以使用:
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Manufacturer, Capacity, Speed, MemoryType, SerialNumber, PartNumber, BankLabel
PartNumber: 内存条的型号。BankLabel: 内存插槽的标识标签。
如果需要将内存容量显示为 GB,可以像之前那样进行转换:
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Manufacturer, @{Name="CapacityGB";Expression={[math]::round($_.Capacity / 1GB, 2)}}, Speed, MemoryType
5. 查看总的内存和 CPU 使用情况(性能计数器)
通过 Get-Counter 命令可以实时查看系统的内存和 CPU 性能计数。以下是查询内存和 CPU 性能的常用命令:
# 查看当前可用内存
Get-Counter -Counter '\Memory\Available Bytes'
# 查看总内存使用情况
Get-Counter -Counter '\Memory\Committed Bytes'
# 查看当前系统的 CPU 使用情况
Get-Counter -Counter '\Processor(_Total)\% Processor Time'
# 查看内存的更多性能指标
Get-Counter -Counter '\Memory\*'
6. 查询系统总内存(包括物理内存和虚拟内存)
可以通过以下命令来查询系统总内存(包括物理内存和虚拟内存的合计):
(Get-WmiObject -Class Win32_ComputerSystem).TotalPhysicalMemory
(Get-WmiObject -Class Win32_OperatingSystem).TotalVirtualMemorySize
7. 获取内存条的错误信息(如ECC)
一些内存条可能会支持错误检测和纠正(ECC),如果系统支持并启用了 ECC,您可以查询到内存条的相关信息:
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Manufacturer, Capacity, Speed, MemoryType, SerialNumber, ErrorMethod
ErrorMethod: 错误方法(如果内存条支持 ECC,会显示相关信息)。
8. 检查内存管理设置
可以查看当前内存管理的相关设置,如分页文件设置:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object PagingFileName, MaxNumberOfProcesses, NumberOfProcesses
PagingFileName: 分页文件的路径。MaxNumberOfProcesses: 最大允许的进程数。NumberOfProcesses: 当前正在运行的进程数。
9. 查看系统内存的总数和使用情况
通过以下命令可以查看系统的物理内存和虚拟内存的详细信息:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object TotalVisibleMemorySize, FreePhysicalMemory, TotalVirtualMemorySize, FreeVirtualMemory
10. 查看每个进程的虚拟内存使用情况
Get-WmiObject -Class Win32_Process | Select-Object Name, ProcessId, VirtualSize | Sort-Object VirtualSize -Descending
VirtualSize: 进程使用的虚拟内存量(字节)。
总结
PowerShell 提供了非常强大的工具和命令,可以帮助您深入了解操作系统和硬件的内存状态。
检查系统物理内存
如果您只是想了解系统当前的物理内存,可以使用以下命令:
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Capacity, Manufacturer, Speed
这将列出每条物理内存条的信息,包括其容量和速度。
-
查看虚拟内存(Virtual Memory): 如果您还想查看虚拟内存的大小,可以使用以下命令:
powershellCopy CodeGet-WmiObject -Class Win32_OperatingSystem | Select-Object TotalVirtualMemorySize
Get-WmiObject -Class Win32_PhysicalMemory | Select-Object Capacity
Capacity --------
Get-WmiObject -Class Win32_OperatingSystem 是 PowerShell 中用于获取操作系统相关信息的命令。你希望将这些信息按功能分类并表格化,下面是常见的字段信息及其功能分类:
| 功能分类 | 属性名称 | 说明 |
|---|---|---|
| 操作系统信息 | Caption | 操作系统的名称(如:Windows 10 Pro) |
| Version | 操作系统的版本号(如:10.0.18363) | |
| BuildNumber | 操作系统的内部构建版本号(如:18363) | |
| ProductType | 产品类型(如:Workstation, Server) | |
| OSArchitecture | 操作系统的架构类型(如:32-bit 或 64-bit) | |
| 安装信息 | InstallDate | 操作系统的安装日期 |
| 系统配置 | LastBootUpTime | 系统最后启动时间 |
| LocalDateTime | 当前本地时间 | |
| BootDevice | 启动设备(如:\Device\HarddiskVolume1) | |
| 内存和性能信息 | TotalVisibleMemorySize | 系统可用的总内存大小(字节) |
| FreePhysicalMemory | 系统可用的物理内存大小(字节) | |
| TotalVirtualMemorySize | 系统的虚拟内存总大小(字节) | |
| FreeVirtualMemory | 系统的可用虚拟内存大小(字节) | |
| 硬件信息 | SystemDrive | 系统分区所在的磁盘驱动器(如:C:) |
| NumberOfProcesses | 当前系统上运行的进程数量 | |
| NumberOfUsers | 当前系统登录的用户数量 | |
| ComputerName | 计算机的名称 | |
| 网络信息 | DNSDomain | DNS 域名 |
| Domain | 计算机所在的域名 | |
| NetworkAdapters | 网络适配器信息,通常是字符串数组,包含适配器的名字、IP等 |
示例:
可以在 PowerShell 中使用以下命令查看所有信息:
Get-WmiObject -Class Win32_OperatingSystem | Format-List *
或者,如果你只想查看某一类的特定信息,可以用如下命令:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object Caption, Version, TotalVisibleMemorySize, FreePhysicalMemory, LastBootUpTime
这将显示操作系统名称、版本、总内存、可用内存和最后启动时间等信息。
Get-ComputerInfo 是 PowerShell 中用于获取计算机系统详细信息的命令。它提供了计算机硬件、操作系统、网络、存储等多方面的详细信息。以下是将其输出按功能分类并表格化的结果:
| 功能分类 | 属性名称 | 说明 |
|---|---|---|
| 操作系统信息 | WindowsVersion | 操作系统版本号(如:10.0.18363) |
| WindowsBuildLabEx | 操作系统构建版本及信息 | |
| OsArchitecture | 操作系统的架构类型(如:x64) | |
| WindowsInstallDate | 操作系统安装日期 | |
| ProductType | 操作系统产品类型(如:Workstation, Server) | |
| 计算机硬件信息 | Manufacturer | 计算机制造商 |
| Model | 计算机型号 | |
| TotalPhysicalMemory | 总物理内存(字节) | |
| NumberOfProcessors | 处理器的数量 | |
| Processor | 处理器名称和描述 | |
| 存储信息 | TotalVirtualMemorySize | 总虚拟内存大小(字节) |
| FreePhysicalMemory | 可用物理内存(字节) | |
| AvailableVirtualMemory | 可用虚拟内存(字节) | |
| BootDevice | 启动设备名称 | |
| 网络信息 | Domain | 计算机所属的域名 |
| DNSHostName | DNS 主机名 | |
| NetworkAdapters | 网络适配器信息,通常包括网卡的名称、IP 地址等 | |
| 系统状态与配置 | SystemType | 系统类型(如:工作站、服务器等) |
| CsTotalPhysicalMemory | 计算机总物理内存(字节) | |
| CsProcessor | 处理器相关信息 | |
| CsNumberOfLogicalProcessors | 逻辑处理器数量 | |
| CsTotalPhysicalMemory | 计算机的总物理内存 | |
| 本地时间和时区 | CurrentTimeZone | 当前时区名称 |
| LocalDateTime | 当前本地时间 | |
| Uptime | 系统已运行时间 | |
| 安全和身份验证信息 | AccountDomain | 本地计算机所属的账户域 |
| RegisteredUser | 注册的用户 | |
| ProductName | 操作系统名称(如:Windows 10 Pro) |
示例:
在 PowerShell 中使用 Get-ComputerInfo 可以显示所有计算机相关信息:
Get-ComputerInfo
如果只需要查看某些特定信息,可以通过 Select-Object 进行筛选。例如,要查看计算机型号、操作系统版本、总内存和系统类型,可以使用以下命令:
Get-ComputerInfo | Select-Object Model, WindowsVersion, TotalPhysicalMemory, SystemType
进一步筛选:
如果你只关心内存和处理器信息,可以执行:
Get-ComputerInfo | Select-Object TotalPhysicalMemory, NumberOfProcessors, Processor
这样你就可以按自己的需求筛选所需的详细信息了。
在 PowerShell 中,Get-CimInstance 是一个强大的命令,可以用来查询各种系统信息。为了帮助你更好地理解如何使用 Get-CimInstance 按功能分类表格化不同的信息,下面我将提供一些常见的 CIM 类,并将它们按功能进行分类。这样你可以更清晰地了解如何使用 Get-CimInstance 来获取不同的系统资源信息。
按功能分类的 Get-CimInstance 示例:
1. 计算机系统和硬件信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 计算机系统信息 | Win32_ComputerSystem |
Get-CimInstance -ClassName Win32_ComputerSystem |
| 计算机硬件信息 | Win32_ComputerSystemProduct |
Get-CimInstance -ClassName Win32_ComputerSystemProduct |
| 内存信息 | Win32_PhysicalMemory |
Get-CimInstance -ClassName Win32_PhysicalMemory |
| 存储适配器信息 | Win32_SCSIController |
Get-CimInstance -ClassName Win32_SCSIController |
| 电池信息 | Win32_Battery |
Get-CimInstance -ClassName Win32_Battery |
| 显卡信息 | Win32_VideoController |
Get-CimInstance -ClassName Win32_VideoController |
2. 处理器和核心信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 处理器信息 | Win32_Processor |
Get-CimInstance -ClassName Win32_Processor |
| 处理器核心信息 | Win32_Processor(多个核心) |
`Get-CimInstance -ClassName Win32_Processor |
3. 网络和适配器信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 网络适配器信息 | Win32_NetworkAdapter |
Get-CimInstance -ClassName Win32_NetworkAdapter |
| 网络接口信息 | Win32_NetworkAdapterConfiguration |
Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration |
| 网络协议信息 | Win32_NetworkProtocol |
Get-CimInstance -ClassName Win32_NetworkProtocol |
4. 磁盘和文件系统信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 磁盘信息 | Win32_DiskDrive |
Get-CimInstance -ClassName Win32_DiskDrive |
| 分区信息 | Win32_DiskPartition |
Get-CimInstance -ClassName Win32_DiskPartition |
| 驱动器信息 | Win32_LogicalDisk |
Get-CimInstance -ClassName Win32_LogicalDisk |
5. 操作系统信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 操作系统信息 | Win32_OperatingSystem |
Get-CimInstance -ClassName Win32_OperatingSystem |
| 操作系统补丁信息 | Win32_QuickFixEngineering |
Get-CimInstance -ClassName Win32_QuickFixEngineering |
6. 用户和账户信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 用户信息 | Win32_UserAccount |
Get-CimInstance -ClassName Win32_UserAccount |
| 组信息 | Win32_Group |
Get-CimInstance -ClassName Win32_Group |
| 登录会话信息 | Win32_Session |
Get-CimInstance -ClassName Win32_Session |
7. 服务和进程信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 服务信息 | Win32_Service |
Get-CimInstance -ClassName Win32_Service |
| 进程信息 | Win32_Process |
Get-CimInstance -ClassName Win32_Process |
8. 打印机和打印任务信息
| 功能 | 类名 | 示例命令 |
|---|---|---|
| 打印机信息 | Win32_Printer |
Get-CimInstance -ClassName Win32_Printer |
| 打印任务信息 | Win32_PrintJob |
Get-CimInstance -ClassName Win32_PrintJob |
示例:如何获取表格化信息
- 获取计算机系统信息(制造商、型号、内存等):
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object Manufacturer, Model, TotalPhysicalMemory, NumberOfProcessors | Format-Table -AutoSize
- 获取处理器信息(名称、核心数、逻辑处理器数等):
Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors | Format-Table -AutoSize
- 获取操作系统信息(操作系统名称、版本、架构等):
Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption, Version, OSArchitecture | Format-Table -AutoSize
- 获取磁盘驱动器信息(磁盘型号、容量、接口类型等):
Get-CimInstance -ClassName Win32_DiskDrive | Select-Object Model, Size, MediaType, InterfaceType | Format-Table -AutoSize
总结:
你可以使用 Get-CimInstance 来查询不同的系统组件信息,并通过 Select-Object 来选择你感兴趣的字段,最后使用 Format-Table -AutoSize 来表格化输出信息,方便阅读和分析。
Get-WmiObject 和 Get-CimInstance 都是 PowerShell 中用来查询系统信息的常用命令,二者在许多方面是相似的,但也有一些重要的区别。下面是 Get-WmiObject 和 Get-CimInstance 的比较,按照功能和性能等方面进行表格化总结。
Get-WmiObject vs Get-CimInstance 对比
| 特性 | Get-WmiObject | Get-CimInstance |
|---|---|---|
| 引入的版本 | PowerShell 2.0(较早版本) | PowerShell 3.0(较新版本) |
| 基础协议 | DCOM(Distributed Component Object Model) | CIM(Common Information Model,基于 WS-Man) |
| 性能 | 性能较差,尤其是在远程查询时 | 性能较优,支持更高效的网络通信协议(WS-Man) |
| 远程管理支持 | 支持远程管理(但不如 Get-CimInstance 高效) |
更好的远程支持,使用更现代的 WS-Man 协议 |
| 平台支持 | 只支持 Windows 操作系统 | 支持跨平台,适用于 Windows 和 Linux(通过 CIM) |
| 命令结构 | Get-WmiObject -Class <ClassName> |
Get-CimInstance -ClassName <ClassName> |
| 查询速度 | 查询速度较慢,尤其是在网络连接不稳定时 | 查询速度较快,使用更高效的协议 |
| 默认返回格式 | 直接返回 WMI 对象(较为复杂) | 返回 CIM 对象(可更好地与其他 PowerShell 命令配合) |
| 对象支持的属性 | 支持 WMI 类和属性 | 支持 CIM 类和属性,但有时支持的类和属性略有不同 |
| 兼容性 | 支持更广泛的旧版 Windows 操作系统 | 主要支持较新的 Windows 系统,特别是 Windows 8 及以上 |
| 获取的信息类别 | 可获取系统信息、硬件信息、网络信息、服务等 | 可获取系统信息、硬件信息、网络信息、服务等 |
| 错误处理 | 错误处理较为基础 | 错误处理更加灵活,支持更详细的错误信息 |
Get-WmiObject 和 Get-CimInstance 使用示例
| 命令功能 | Get-WmiObject 示例 | Get-CimInstance 示例 |
|---|---|---|
| 获取计算机系统信息 | Get-WmiObject -Class Win32_ComputerSystem |
Get-CimInstance -ClassName Win32_ComputerSystem |
| 获取操作系统信息 | Get-WmiObject -Class Win32_OperatingSystem |
Get-CimInstance -ClassName Win32_OperatingSystem |
| 获取处理器信息 | Get-WmiObject -Class Win32_Processor |
Get-CimInstance -ClassName Win32_Processor |
| 获取磁盘信息 | Get-WmiObject -Class Win32_DiskDrive |
Get-CimInstance -ClassName Win32_DiskDrive |
| 获取网络适配器信息 | Get-WmiObject -Class Win32_NetworkAdapter |
Get-CimInstance -ClassName Win32_NetworkAdapter |
| 获取打印机信息 | Get-WmiObject -Class Win32_Printer |
Get-CimInstance -ClassName Win32_Printer |
| 获取服务信息 | Get-WmiObject -Class Win32_Service |
Get-CimInstance -ClassName Win32_Service |
关键区别说明
-
协议:
Get-WmiObject使用 DCOM(Distributed Component Object Model),这是一个老旧的协议,需要较多的网络资源和权限配置,尤其是在远程管理时。Get-CimInstance使用 WS-Man(Web Services Management),这是一个更现代的协议,效率更高,并且支持更强的远程管理功能。
-
性能:
Get-WmiObject在某些场景下(尤其是远程查询)会有较高的延迟。Get-CimInstance性能更好,因为它使用的 WS-Man 协议更高效,尤其是在远程查询时。
-
跨平台支持:
Get-WmiObject只能在 Windows 系统上使用。Get-CimInstance支持跨平台,可以在 Windows 和 Linux 系统上工作。
-
远程管理:
Get-WmiObject虽然支持远程查询,但由于使用的 DCOM 协议,配置起来比较复杂,并且网络延迟较高。Get-CimInstance使用 WS-Man 协议,在远程查询时更高效且容易配置。
-
返回的数据类型:
Get-WmiObject返回的对象是 WMI 对象,这些对象可能包含一些额外的元数据,操作起来相对繁琐。Get-CimInstance返回的对象是 CIM 对象,这些对象更标准化,并且更容易与 PowerShell 中的其他命令进行交互。
总结
- 使用
Get-WmiObject:如果你需要兼容旧版本的 Windows 系统,或者你依赖于某些只在 WMI 中支持的类和属性,那么Get-WmiObject仍然是一个有效的选择。 - 使用
Get-CimInstance:如果你使用的是较新的操作系统,或者你希望提升性能和扩展性,特别是在远程管理和跨平台环境中,Get-CimInstance是更好的选择。
系统安装日期:有那些命令
PS C:\Users\Administrator> (Get-WmiObject -Class Win32_OperatingSystem).InstallDate
19700101080002.000000+480
PS C:\Users\Administrator> (Get-CimInstance -ClassName Win32_OperatingSystem).InstallDate
1970-01-01 星期四 上午:8:00:02
PS C:\Users\Administrator> systeminfo | Select-String "初始安装日期"
初始安装日期: 1970-01-01 星期四, 上午:8:00:02

浙公网安备 33010602011771号