PowerShell磁盘空间计算减法报错:请求排查问题原因
错误原因排查与修正
核心错误:对象与数值的非法运算
错误提示中的op_Subtraction失败,根源是你在减法运算中误用了PSObject对象而非数值变量:
$GetFreeSpace = Get-PSDrive C | Select-Object Used,Free这行得到的是一个包含Used和Free属性的自定义PSObject对象,不是纯数值- 代码里的
$eightyFivePercent - $GetFreeSpace是尝试把数值和对象做减法,PowerShell无法识别这种操作,因此报错
你已经提前把剩余空间转换成了数值类型的$Freespace变量,应该用这个变量参与减法运算。
其他次要错误
- 变量赋值语法错误:
$file_Path "C:\Script\test_file_warning_alert.txt"缺少赋值运算符=,正确写法是$file_Path = "C:\Script\test_file_warning_alert.txt" - 变量名大小写不一致:PowerShell变量区分大小写,代码中混用了
$file_size和$fileSize、$file_Path和$filePath,会导致变量未定义的错误 - 精度损失风险:直接用
$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
相关产品推荐
相关产品推荐

