Get-FSRM-如何获得以GB为单位的使用率和大小?

时间:2018-10-08 11:48:31

标签: powershell

我正在使用以下命令从FSRM中检索统计信息,但无法弄清楚如何返回大小和使用率(以GB为单位)。我不明白@在这里做什么...构建数组?帮助非常感谢。

Get-FsrmQuota | Format-Table Path, Size, @{Label="Usage GB"; 
Expression={$($_.size/1GB) -as [int] }} -auto

此推荐仅显示以GB为单位的用法,大小仍以字节为单位。

2 个答案:

答案 0 :(得分:2)

因此val instance = MyClass() ... 是您对Format-Table函数的调用中的一个表达式。

这是关于它的博客文章:

https://mcpmag.com/articles/2017/01/19/using-powershell-calculated-properties.aspx

因此,在您共享的示例中,结构如下:

  1. 从Get-FsrmQuota获取对象
  2. 插入“格式表”功能
  3. 格式表按原样使用路径和大小
  4. 基于$ _。size构建一个内存中计算列,将其标记为“ Usage GB”,除以1GB,并将结果标记为整数。

因此您的示例实际上只显示了以字节为单位的大小,并以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结尾的数字总是 进行四舍五入,分别为F0N0,而[Math]::Round()则四舍五入.5 down (如果整数部分是偶数)。在.NET Core 中,从2.1版开始,字符串格式现在也应该使用半到四舍五入的方法-参见the docs