Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Синтаксис

Ответить
Настройки темы
PowerShell - [решено] Синтаксис
za1 za1 вне форума

Аватара для za1

Старожил


Сообщения: 225
Благодарности: 14

Профиль | Отправить PM | Цитировать


Доброго времени суток, уважаемые!
Наткнулся на очередной интересный скрипт:
Код: Выделить весь код
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?

Отправлено: 12:26, 08-09-2018

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


-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> - Содержимое этого поля, в нашем случае, это скриптблок, который вычисляет размер в ГБ с последующим форматированием строки с точностью до одного знака после запятой.

Последний раз редактировалось Kazun, 08-09-2018 в 14:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:53, 08-09-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата 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)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:14, 08-09-2018 | #3

za1 za1 вне форума Автор темы

Аватара для za1

Старожил


Сообщения: 225
Благодарности: 14

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:08, 08-09-2018 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Синтаксис

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Синтаксис auditpol.exe Неадекват Microsoft Windows 7 1 04-04-2018 13:18
CMD/BAT - синтаксис в бат-файле Dudee Скриптовые языки администрирования Windows 13 14-02-2014 12:49
Регфайл, синтаксис. semiono AutoIt 28 25-01-2010 04:40
VBS/WHS/JS - синтаксис On Error Dr.Dark Программирование и базы данных 8 26-08-2008 11:42
синтаксис php E-mail Вебмастеру 6 03-03-2005 22:42




 
Переход