Показать полную графическую версию : [решено] Синтаксис
Доброго времени суток, уважаемые!
Наткнулся на очередной интересный скрипт:
Get-WmiObject Win32_LogicalDisk -Filter "DriveType=3" -Computer localhost |
Select SystemName,DeviceID,@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},
@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}} | Format-Table -AutoSize
и здесь мне не очень понятна вот эта часть:
@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}}
Нагуглил, что @ - оператор массива, то есть создается этот самый массив, где название "size (GB)", а вот что происходит потом?
-f($_.size/1gb)
это для отображения объема диска в Гб, но что такое -f?
-f Format operator (https://ss64.com/ps/syntax-f-operator.html) , является сокращенной версией статического метода [String]::Format (https://msdn.microsoft.com/ru-ru/library/system.string.format(v=vs.110).aspx).
Составное форматирование (https://docs.microsoft.com/ru-ru/dotnet/standard/base-types/composite-formatting)
0 - индекс, куда подставлять
N1 - строка форматирования, в данном примере один знак после запятой
N - https://docs.microsoft.com/ru-ru/dotnet/standard/base-types/standard-numeric-format-strings
"N" или "n" Число Результат: цифры целой и дробной частей, разделители групп и разделитель целой и дробной частей с необязательным отрицательным знаком.
Поддерживается: всеми числовыми типами данных.
Описатель точности: желаемое число знаков дробной части.
Описатель точности по умолчанию: определяется NumberFormatInfo.NumberDecimalDigits.
Дополнительные сведения см. в подразделе Описатель числового формата (N). 1234.567 ("N", en-US) -> 1,234.57
1234.567 ("N", ru-RU) -> 1 234,57
1234 ("N1", en-US) -> 1,234.0
1234 ("N1", ru-RU) -> 1 234,0
-1234.56 ("N3", en-US) -> -1,234.560
-1234.56 ("N3", ru-RU) -> -1 234,560
Select-Object - https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-6
@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}} - Тип hashtable (https://ss64.com/ps/syntax-hash-tables.html) и является вычисляемым полем https://4sysops.com/archives/add-a-calculated-property-with-select-object-in-powershell/
Name (or Label) <string> - Название поля
Expression <string> or <script block> - Содержимое этого поля, в нашем случае, это скриптблок, который вычисляет размер в ГБ с последующим форматированием строки с точностью до одного знака после запятой.
Нагуглил, что @ - оператор массива, »
za1, не так.https://i.imgur.com/WHWVpZw.png
Get-Help about_Arrays -Full
А то, что Вы видите в коде — один из видов коллекций, в данном случае — https://i.imgur.com/a0ti52V.png
Get-Help about_Hash_Tables -Full
Потому данным кодом:
@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}}
и:
@{Name="freespace(GB)";Expression={"{0:N1}" -f($_.freespace/1gb)}}
создаются не массивы, а хэш-таблицы, которые используется как параметры командлета Select-Object.
-f($_.size/1gb) это для отображения объема диска в Гб, но что такое -f? »
-f — это оператор формата. В выражении:
"{0:N1}" -f ($_.size / 1gb)
«"{0:N1}"» — строка формата, где {…} — место в строке, куда помещается выражение, «0» — номер выражения, которые перечислены после оператора формата (оператор может форматировать одной строкой формата несколько выражений), «:» — разделитель номера выражения и формата выражения, «N» — идентификатор одного из стандартных форматов (Standard Numeric Format Strings | Microsoft Docs (https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings)), «1» — показатель точности, попросту — число знаков после десятичной запятой (описано по той же ссылке). «-f» — собственно, сам оператор. «($_.size / 1gb)» — выражение для форматирования, берётся свойство .size текущего объекта конвеера («$_») и делится на 1 гигабайт (PowerShell позволяет использовать такие константы, как 1gb); поскольку оператор форматирования требует готового результата выражения, то выражение с делением заключается в круглые скобки.
Получающаяся хэш-таблица (которая затем будет использоваться как параметр командлета Select-Object) выглядит так:
PS C:\> @{ Name = "size(GB)"; Expression = { "{0:N1}" -f ($_.Size / 1gb) }}
Name Value
---- -----
Expression "{0:N1}" -f ($_.Size / 1gb)
Name size(GB)
Спасибо, все прям по полочкам)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.