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

PowerShell磁盘空间计算减法报错:请求排查问题原因

错误原因排查与修正

核心错误:对象与数值的非法运算

错误提示中的op_Subtraction失败,根源是你在减法运算中误用了PSObject对象而非数值变量:

  • $GetFreeSpace = Get-PSDrive C | Select-Object Used,Free 这行得到的是一个包含Used和Free属性的自定义PSObject对象,不是纯数值
  • 代码里的$eightyFivePercent - $GetFreeSpace是尝试把数值和对象做减法,PowerShell无法识别这种操作,因此报错

你已经提前把剩余空间转换成了数值类型的$Freespace变量,应该用这个变量参与减法运算。

其他次要错误

  1. 变量赋值语法错误:$file_Path "C:\Script\test_file_warning_alert.txt" 缺少赋值运算符=,正确写法是$file_Path = "C:\Script\test_file_warning_alert.txt"
  2. 变量名大小写不一致:PowerShell变量区分大小写,代码中混用了$file_size和$fileSize、$file_Path和$filePath,会导致变量未定义的错误
  3. 精度损失风险:直接用$totalSize * 0.85后转[int64]可能丢失精度,建议先通过[math]::Round()或强制转换确保数值准确性

修正后的代码

# 获取C盘剩余空间并转换为int64类型
$GetFreeSpaceObj = Get-PSDrive C | Select-Object Used,Free
[int64]$FreeSpace = $GetFreeSpaceObj.Free

# 计算C盘总容量的85%
$disk = Get-Volume -DriveLetter C 
$totalSize = $disk.Size
# 先做乘法再取整,避免精度损失
[int64]$eightyFivePercent = [math]::Round($totalSize * 0.85)

# 计算需要生成的文件大小
[int64]$FileSizeForWarning = $eightyFivePercent - $FreeSpace

# 文件路径与生成逻辑
$filePath = "C:\Script\test_file_warning_alert.txt"
# 确保目录存在,避免创建文件失败
if (-not (Test-Path (Split-Path $filePath -Parent))) {
    New-Item (Split-Path $filePath -Parent) -ItemType Directory | Out-Null
}
$stream = [System.IO.File]::CreateText($filePath)
$stream.BaseStream.SetLength($FileSizeForWarning)
$stream.Close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:41:13