Get-FSRM - как получить значение «Использование» и «Размер» в ГБ? - PullRequest
0 голосов
/ 08 октября 2018

Я использую следующую команду для получения статистики из FSRM, но не могу понять, как вернуть и размер, и использование в ГБ.Я не понимаю, что здесь делает @ ... строит массив?Помощь высоко ценится.

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

В этой рекомендации отображается только использование в ГБ, размер по-прежнему в байтах.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Ваш код имеет дело только со свойством Size, где очевидно, что вы также хотели бы Usage.Чтобы отформатировать размер как целое число, вы используете -as [int].В приведенном ниже коде используется другой способ форматирования, вы можете прочитать о здесь .

Также мне нравится использовать 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

Edit

Как прокомментировал 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() по умолчанию от полудня до четного округления.Это означает, что числа, оканчивающиеся на .5, всегда округляются до F0 и N0, тогда как [Math]::Round() округляет .5 вниз , если целая часть является четное число .В .NET Core , начиная с версии 2.1, форматирование строк теперь, возможно, также использует округление до половины - см. документы

0 голосов
/ 08 октября 2018

Таким образом, @{ ... } является выражением внутри вашего вызова функции Format-Table.

Вот сообщение в блоге об этом:

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

Таким образом, в примере, которым вы поделились, он имеет такую ​​структуру:

  1. Получить объект (ы) из Get-FsrmQuota
  2. Труба в функцию Format-Table
  3. Format-Table принимает Path, Size as as
  4. Создает вычисляемый столбец в памяти, который будет помечен как «Usage GB», на основе размера $ _., Разделенного на 1GB, и помечает результат как целое число.

Таким образом, ваш пример на самом деле просто показывает размер в байтах и ​​тот же размер, рассчитанный в ГБ.Он не имеет ни столбца использования, ни свойства, собранного откуда-либо.

Обновление: @ mklement0 добавил отличную информацию в комментарии.

@{ ... } на самом деле является литералом хеш-таблицы и имеет тип [hashtable].Все расчетные свойства построены так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...