Обложка канала

Windows 11, 10, etc - Вадим Стеркин

10333 @sterkin_ru

Авторский канал. Windows 11, безопасность, мобильный мир: • тайное знание • профессиональный ликбез • гадание по логам • срыв покровов • доставка пруфов

Windows 11, 10, etc - Вадим Стеркин

4 года назад
Открыть в
▶️ О сложностях #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. После прочтения появится основа знаний, и многие вещи уже не будут вводить в ступор.