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

PowerShell磁盘检查报告脚本空间值错误运行失败求助

PowerShell磁盘检查脚本故障修复

核心故障原因

脚本持续运行失败由3个明确问题导致:

  • 变量引用笔误:计算磁盘剩余占比的Status字段中,错误使用了从未定义的$db变量指代当前磁盘对象,实际ForEach管道内的当前对象为$_,空变量参与数值运算会直接触发取值异常
  • 缺少边界容错:Win32_Volume类会枚举系统保留分区、恢复分区等无盘符的特殊卷,这类卷的Size属性可能为0或空值,直接做除法会触发除零、空值运算错误
  • 语法小瑕疵:原脚本替换双引号的语句中$_-replace缺少运算符前空格,部分老版本PowerShell会触发解析错误
  • 额外兼容性提示:Get-WmiObject已在新版PowerShell中被标记为过时,远程查询稳定性弱于官方推荐的替代命令Get-CimInstance

修复后完整代码

$Computers = Get-Content -Path C:\Users\gbekari\unbackup\Servers.txt

$results = foreach ($Computer in $Computers){
    # 如需兼容PowerShell 2.0等极老版本,可将Get-CimInstance换回Get-WmiObject
    Get-CimInstance Win32_Volume -Filter "DriveType='3'" -ComputerName $Computer | ForEach-Object {
        # 跳过大小为空/为0的无效特殊分区,避免运算报错
        if (-not $_.Size -or $_.Size -eq 0) { return }
        $freePercent = [Math]::Round(100 * $_.FreeSpace / $_.Size, 2)
        [PSCustomObject]@{
            Computername = $computer
            date         = Get-Date -format "dd.MM.yy HH:mm"
            size         = [Math]::Round($_.Size /1GB,2)
            freeSpace    = [Math]::Round($_.FreeSpace /1GB,2)
            Status       = if ($freePercent -ge 20 ) {'NONE'} else {'Warning'}
            empty        = "Diskcheck"
        }
    }
}

$results | ConvertTo-Csv -NoTypeInformation -Delimiter "|" | ForEach-Object { $_ -replace '"','' } | Set-Content -Path C:\Users\gbekari\unbackup\Sers.txt

修复说明

  • 修正了状态计算时的变量引用错误,统一使用当前管道对象$_取值
  • 增加无效分区过滤逻辑,跳过大小为0/空的系统特殊卷,从根源避免运算报错
  • 提前计算剩余空间占比变量,简化判断逻辑:剩余占比≥20%标记为NONE,低于20%标记为Warning,完全匹配高亮标注需求
  • 替换冗余的New-Object PSObject写法为更简洁的[PSCustomObject]类型加速器,执行效率更高
  • 修正了替换语句的语法空格问题,兼容全版本PowerShell解析规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:33:33