You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell计算含FSRM配额的磁盘剩余空间时配额总和变量为空问题

问题原因

  • 核心错误是将Format-Table这类格式化命令用于数据计算逻辑:Format-*系列cmdlet的作用仅为生成面向控制台展示的格式化输出对象,其表达式块内部的变量赋值默认不会同步到脚本父作用域,因此写在Expression中的$TotalQuotaSize += $_.Size逻辑完全不会生效。
  • 未提前初始化$TotalQuotaSize变量,即便赋值逻辑生效,也可能出现空值异常。

修复方案

拆分数据计算和格式化输出两个流程,不要在格式化命令中处理累加逻辑:

  1. 先初始化变量,遍历FSRM配额计算总大小
  2. 单独格式化输出配额列表用于查看
  3. 结合磁盘剩余空间计算你需要的实际可用容量

参考代码如下:

# 初始化总配额变量,单位为Byte
$TotalQuotaSize = 0

# 获取所有FSRM配额,累加总大小同时保存配额列表
$QuotaList = Get-FsrmQuota | ForEach-Object {
    $TotalQuotaSize += $_.Size
    $_
}

# 格式化输出配额列表(仅用于展示,不要把这段逻辑放到计算流程里)
$QuotaList | Format-Table Path, @{Label="Size_GB"; Expression = { "{0:F2}" -f ($_.Size/1GB) }}

# 原磁盘剩余空间获取逻辑
$RemainingSizeDisk = (Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= {([math]::Round(($_.FreeSpace / 1GB), 2)) }} | Measure-Object -Property 'FreeSpace (GB)' -Sum).Sum

# 转换总配额为GB单位
$TotalQuotaSizeGB = [math]::Round($TotalQuotaSize / 1GB,2)

# 此处可根据业务需求计算扣除配额后的实际剩余,比如需要扣除已分配未使用的硬配额,可额外累加所有配额的Usage字段计算即可

注意事项

  • 如果需要按单块磁盘统计对应配额,需要给Get-FsrmQuota添加路径筛选,匹配对应逻辑盘的盘符,避免多盘配额混合统计。
  • 计算实际可用容量时注意区分FSRM的硬配额和软配额:软配额仅做告警不会限制写入,不需要计入扣除项。

内容的提问来源于stack exchange,提问作者Florian Pichery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:06:03