我正在使用以下命令从FSRM中检索统计信息,但无法弄清楚如何返回大小和使用率(以GB为单位)。我不明白@在这里做什么...构建数组?帮助非常感谢。
Get-FsrmQuota | Format-Table Path, Size, @{Label="Usage GB";
Expression={$($_.size/1GB) -as [int] }} -auto
此推荐仅显示以GB为单位的用法,大小仍以字节为单位。
答案 0 :(得分:2)
因此val instance = MyClass()
...
是您对Format-Table函数的调用中的一个表达式。
这是关于它的博客文章:
https://mcpmag.com/articles/2017/01/19/using-powershell-calculated-properties.aspx
因此,在您共享的示例中,结构如下:
因此您的示例实际上只显示了以字节为单位的大小,并以GB为单位计算了相同的大小。它没有从任何地方收集使用列或属性。
更新: @ mklement0在评论中添加了一些重要信息。
@{ ... }
实际上是哈希表文字,类型为@{ ... }
。所有计算出的属性都是这样构建的。
答案 1 :(得分:2)
您的代码仅处理Size
属性,显然您也希望使用Usage
。要将大小格式化为整数,请使用-as [int]
。下面的代码使用了不同的格式设置方式,您可以阅读关于here的信息。
此外,我喜欢在将管道输送到Select-Object
之前使用Format-Table
来限制属性的数量,但这取决于您。
Get-FsrmQuota | Select-Object Path,
@{Label="Size GB"; Expression = { "{0:F0}" -f ($_.Size/1GB) }},
@{Label="Usage GB"; Expression = { "{0:F0}" -f ($_.Usage/1GB) }} |
Format-Table -AutoSize
正如mklement0所说,Select-Object
实际上伴随着创建额外的中间对象的代价。因此,代码可以简化为:
Get-FsrmQuota | Format-Table Path,
@{Label="Size GB"; Expression = { "{0:F0}" -f ($_.Size/1GB) }},
@{Label="Usage GB"; Expression = { "{0:F0}" -f ($_.Usage/1GB) }} -AutoSize
{0:F0}
数字格式将数字四舍五入为整数 [1] ,并显示不带千位分隔符的结果。如果要使用千位分隔符,则也可以使用{0:N0}
。
也许还考虑将数字四舍五入,使之具有两位小数。在这种情况下,将{0:F0}
更改为{0:F2}
。
[1]有趣的是,.NET字符串格式使用了从零开始的半个舍入舍入,这与[Math]::Round()
的默认从一半到偶数< / em四舍五入。这意味着以.5
结尾的数字总是 进行四舍五入,分别为F0
和N0
,而[Math]::Round()
则四舍五入.5
down (如果整数部分是偶数)。在.NET Core 中,从2.1版开始,字符串格式现在也应该使用半到四舍五入的方法-参见the docs