如何通过Powershell获取SCOM中Win10逻辑磁盘的FreeSpace属性
SCOM PowerShell获取Win10逻辑磁盘FreeSpace属性解决方案
问题根因
Microsoft.Windows.Client.Win10.Aggregate.LogicalDisk属于Microsoft.Windows.Client.Win10.LogicalDisk的派生聚合类,二者关联的实例对象同源,直接使用Select-Object默认只能获取实例的顶层基础属性,FreeSpace属于类的托管属性,存放在实例的Properties集合中,无法直接选中返回。
可行解决方案
方法1:从实例属性集合直接提取
如果对应逻辑磁盘类的托管定义中已包含FreeSpace属性,可直接通过Properties字段取值:
Get-SCOMClass -Name "Microsoft.Windows.Client.Win10.LogicalDisk" | Get-SCOMClassInstance | ForEach-Object { [PSCustomObject]@{ 磁盘显示名 = $_.DisplayName 健康状态 = $_.HealthState 可用空间 = $_.Properties["FreeSpace"].Value 总空间 = $_.Properties["Size(MB)"].Value } }
执行前可先运行以下命令确认类的属性列表中存在FreeSpace定义:
Get-SCOMClass -Name "Microsoft.Windows.Client.Win10.LogicalDisk" | Select-Object -ExpandProperty Properties | Where-Object Name -match "Free|Space"
方法2:查询性能收集数据
如果类属性中无直接定义,FreeSpace是通过性能收集规则存储的,可直接拉取最新性能数据:
# 获取所有Win10逻辑磁盘实例 $diskInstances = Get-SCOMClass -Name "Microsoft.Windows.Client.Win10.LogicalDisk" | Get-SCOMClassInstance # 拉取逻辑磁盘可用空间性能计数器最新数据 Get-SCOMPerformanceData -MonitoringObject $diskInstances -ObjectName "LogicalDisk" -CounterName "Free Megabytes" | Select-Object MonitoringObjectPath, TimeSampled, Value
注意事项
- 若要使用聚合类查询,仅需替换上述命令中的类名为
Microsoft.Windows.Client.Win10.Aggregate.LogicalDisk即可,取值逻辑完全一致 - 若返回空值,先确认对应Windows客户端管理包已正确导入,目标设备的逻辑磁盘发现规则已正常执行
内容的提问来源于stack exchange,提问作者JoWe
相关产品推荐
相关产品推荐

