Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Синтаксис (http://forum.oszone.net/showthread.php?t=336594)

za1 08-09-2018 12:26 2830537

Синтаксис
 
Доброго времени суток, уважаемые!
Наткнулся на очередной интересный скрипт:
Код:

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?

Kazun 08-09-2018 13:53 2830544

-f Format operator , является сокращенной версией статического метода [String]::Format.

Составное форматирование

0 - индекс, куда подставлять
N1 - строка форматирования, в данном примере один знак после запятой

N - https://docs.microsoft.com/ru-ru/dot...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/pow...w=powershell-6

@{Name="size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}} - Тип hashtable и является вычисляемым полем https://4sysops.com/archives/add-a-c...in-powershell/

Name (or Label) <string> - Название поля
Expression <string> or <script block> - Содержимое этого поля, в нашем случае, это скриптблок, который вычисляет размер в ГБ с последующим форматированием строки с точностью до одного знака после запятой.

Iska 08-09-2018 14:14 2830545

Цитата:

Цитата za1
Нагуглил, что @ - оператор массива, »

za1, не так.
Массив

Код:

Get-Help about_Arrays -Full

А то, что Вы видите в коде — один из видов коллекций, в данном случае —
хэш-таблица

Код:

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.

Цитата:

Цитата za1
-f($_.size/1gb) это для отображения объема диска в Гб, но что такое -f? »

-f — это оператор формата. В выражении:
Код:

"{0:N1}" -f ($_.size / 1gb)
«"{0:N1}"» — строка формата, где {…} — место в строке, куда помещается выражение, «0» — номер выражения, которые перечислены после оператора формата (оператор может форматировать одной строкой формата несколько выражений), «:» — разделитель номера выражения и формата выражения, «N» — идентификатор одного из стандартных форматов (Standard Numeric Format Strings | Microsoft Docs), «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)


za1 08-09-2018 17:08 2830558

Спасибо, все прям по полочкам)


Время: 20:36.

Время: 20:36.
© OSzone.net 2001-