PowerShell中如何在Select-Object表达式内对两列做数学运算?
问题原因
返回OB异常是因为LogSize、LogSpaceUsed两个属性为带存储单位的非纯数值类型,直接做除法运算会触发类型匹配错误。
修复方案
方案1:沿用Select-Object实现
推荐直接复用命令自带的LogSpaceUsedPercent(已用日志空间百分比)计算,逻辑最简单:
Get-DbaDbLogSpace -SqlInstance serverName | Select-Object ComputerName, InstanceName, SqlInstance, Database, LogSize, LogSpaceUsed, LogSpaceUsedPercent, @{Name="PercentFree"; Expression={100 - $_.LogSpaceUsedPercent}} | Format-Table
如果需要手动通过总大小、已用大小做除法计算,需要先提取属性对应的纯字节数值,还可以通过[math]::Round控制小数保留位数:
Get-DbaDbLogSpace -SqlInstance serverName | Select-Object ComputerName, InstanceName, SqlInstance, Database, LogSize, LogSpaceUsed, LogSpaceUsedPercent, @{Name="PercentFree"; Expression={[math]::Round(($_.LogSpaceUsed.TotalBytes / $_.LogSize.TotalBytes)*100,2)}} | Format-Table
方案2:无需Select-Object的更优实现
Format-Table本身支持自定义计算列,可以省略Select-Object步骤,代码更简洁:
Get-DbaDbLogSpace -SqlInstance serverName | Format-Table ComputerName, InstanceName, SqlInstance, Database, LogSize, LogSpaceUsed, LogSpaceUsedPercent, @{Name="PercentFree"; Expression={100 - $_.LogSpaceUsedPercent}}
内容的提问来源于stack exchange,提问作者JM1
相关产品推荐
相关产品推荐

