▶️ О сложностях #PowerShell для начинающих
Вчера мы в чате упражнялись в простой задаче. Началось все с:
Get-PhysicalDisk | select DeviceID, Size
DeviceID Size
-------- ----
0 256060514304
1 240057409536
2 2000398933504
Размер в байтах режет глаз, и мы к нему вернемся. Товарищ sergey🎃rest экспериментировал на системе с дюжиной дисков и сходу получил нелогичную сортировку:
DeviceID
--------
0
1
10
11
12
2
3
...
Сложность тут в том, что мы видим цифру и ожидаем число, а на самом деле там строка. Поэтому с сортировкой облом ❌ Это решается оператором [int]:
Get-PhysicalDisk | select DeviceID, Size | sort {[int]$_.DeviceID}
👉 Заметьте, как сразу усложнился синтаксис - появились фигурные скобки, оператор и непонятная штука $_.
Следующий вопрос ожидаемо был про вывод размера диска в гигабайтах без дробной части. На это у меня есть #классика блога PowerShell: сбор сведений о дисках и разделах с выражениями и тем же оператором.
Get-PhysicalDisk |
select DeviceID, @{Expression = {[int]($_.Size/1GB)}; Label = "Размер (GB)"}
DeviceID Размер (GB)
-------- -----------
0 238
1 224
2 1863
Ссылку я кинуть не успел. Василий Гусев быстрее предложил тот же [int] и [math]::round. Тут настал уже мой черед путаться 🤦♂️ В выражении не сработала конструкция по аналогии с [int]:
@{name="Size"; expression= {[math]::round($_.Size/1GB)}}
А все потому, что этот оператор ожидает число. Ему нужны еще одни круглые скобки, чтобы подсчитать число, после чего он и округлить сможет.
@{name="Size"; expression= {[math]::round(($_.Size/1GB))}}
Мда, таким синтаксисом новичка не прельстишь 🙄 Мы же просто хотели размер диска в GB :) Да, Get-PhysicalDisk выводит именно GB/TB по умолчанию, пусть и наряду с прочими сведениями.
Но тут может ждать другой подвох, см. картинку↓ Именно размер не поместился в экран :) Тогда так:
Get-PhysicalDisk | Format-Table -Wrap
📗 Начинающим тут можно посоветовать лишь хорошую книгу о PowerShell. После прочтения появится основа знаний, и многие вещи уже не будут вводить в ступор.