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

PowerShell中Get-Disk容量格式与SQL存储不一致问题求助

问题分析

你存入数据库的是磁盘对象的字符串表示(@{Size=...}),说明实际插入的并非你计算好的512,核心原因是对象处理不当或变量替换环节出错,以下是具体解决步骤:


解决步骤

1. 正确提取磁盘容量数值

你的初始代码用Get-Disk | select Size得到的是带Size属性的自定义对象,而非直接数值。改用-ExpandProperty直接提取数值,避免后续处理对象时出错:

# 直接获取所有磁盘的Size数值数组
$SSDCapacity = Get-Disk | Select-Object -ExpandProperty Size
# 取最后一个磁盘的Size(要第一个磁盘就用[0])
$diskSizeStr = $SSDCapacity[-1].ToString()
# 截取前三位得到目标值
$result = $diskSizeStr.Substring(0,3)

2. 避免变量名冲突

你后续用$result = $SqlCmd.ExecuteNonQuery()覆盖了存储容量的$result变量,虽然不影响SQL语句构建,但容易混淆逻辑。建议重命名插入结果变量:

$rowsAffected = $SqlCmd.ExecuteNonQuery()

3. 验证生成的SQL语句

在执行插入前,输出SQL语句确认变量是否正确替换,快速定位问题:

Write-Host "待执行SQL:$InsertQuery"

如果输出的SQL中SSDCapacity的值不是'512',说明前面的$result赋值逻辑存在问题,需回头检查磁盘容量提取步骤。

4. 使用参数化查询(推荐)

字符串拼接SQL容易出现变量替换错误和SQL注入风险,改用参数化查询能确保插入值与PowerShell中显示的一致:

# 定义带参数占位符的SQL语句
$InsertQuery = "INSERT INTO [$($Database)].[dbo].[$($name)] 
               ([ComputerName],[Model],[SSDCapacity])
               VALUES (@ComputerName, @Model, @SSDCapacity)"

$SqlCmd.CommandText = $InsertQuery
# 绑定参数值
$SqlCmd.Parameters.AddWithValue("@ComputerName", $ComputerNameValue)
$SqlCmd.Parameters.AddWithValue("@Model", $ModelValue)
$SqlCmd.Parameters.AddWithValue("@SSDCapacity", $result)

# 执行插入操作
$rowsAffected = $SqlCmd.ExecuteNonQuery()
$conn.Close()

5. 匹配数据库字段类型

检查SSDCapacity字段的类型:

  • 如果是数值类型(如int、bigint),将$result转为数值后插入:[int]$result
  • 如果是字符串类型,直接插入拼接好的字符串即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:05:16