PowerShell磁盘剩余空间检测脚本误报:F盘显示剩余0GB
排查F盘空间误报0GB的步骤
1. 验证磁盘对象是否正确获取
直接执行以下命令(替换为目标服务器名),检查返回结果是否包含F盘的正确信息:
Get-WmiObject -ComputerName servername-SharepointDB -Class Win32_LogicalDisk | Where-object Name -eq "F:"
- 如果返回空结果:说明脚本没找到F盘,可能是盘符名称格式问题(比如远程服务器上盘符是否带空格)、目标服务器不存在该盘符,或者WMI连接异常。
- 如果返回结果中
FreeSpace字段为空或0:说明WMI无法获取该盘的空闲空间数据,需进一步排查权限或系统问题。
2. 检查远程WMI/CIM访问权限
脚本执行账号需要具备目标服务器的WMI访问权限(通常为本地管理员权限):
- 测试WMI连通性:执行
Test-WSMan servername-SharepointDB,若报错,说明远程WMI服务未开启或网络不通。 - 尝试用管理员账号运行脚本,或在目标服务器本地执行磁盘查询命令,确认是否能正常返回数据。
3. 修复脚本变量赋值逻辑漏洞
当$disksize为$null时,$disksize.FreeSpace会返回$null,$null / 1GB仍为$null,而[math]::round($null, 2)会返回0,这就是误报的核心原因。需在脚本中添加校验逻辑:
$disksize = Get-WmiObject -ComputerName servername-SharepointDB -Class Win32_LogicalDisk | Where-object Name -eq "F:" # 新增校验:未获取到F盘对象时,直接发送异常告警并退出 if (-not $disksize) { $errorOptions = @{ 'SmtpServer' = "server.smtp.com" 'To' = "Recipient" 'From' = "sender" 'Subject' = "Failed to fetch F: drive data on servername-SharepointDB" 'Body' = "Cannot retrieve F: disk information. Please check drive existence or WMI access." } Send-MailMessage @errorOptions exit } $freeSpaceGB = [math]::round($disksize.FreeSpace/1GB, 2) If ($freeSpaceGB -lt $limitGB) { $options = @{ 'SmtpServer' = "server.smtp.com" 'To' = "Recipient" 'From' = "sender" 'Subject' = "F: Drive space threshold reached - $freeSpaceGB GB Free" 'Body' = "The F: drive is below 150 GB and only at $freeSpaceGB GB - Please resolve" } Send-MailMessage @options }
4. 替换为更可靠的CIM命令
WMI是较旧技术,建议改用Get-CimInstance替代,兼容性和稳定性更好:
$disksize = Get-CimInstance -ComputerName servername-SharepointDB -ClassName Win32_LogicalDisk | Where-Object Name -eq "F:"
执行上述命令,确认是否能正确返回F盘的空闲空间数据。
5. 清理脚本无效代码
你的脚本中存在一行多余的Copy命令,属于无效代码可能导致执行异常,建议删除该行。
内容的提问来源于stack exchange,提问作者ptolearn
相关产品推荐
相关产品推荐

