отметили
7
человек
голосовать
7
человек
Мощь пошика. Вкатываемся в PowerShell и пишем скрипты для Windowsxakep.ru

На сайте Xakep вышла обучающая статья, посвящённая основам работы с PowerShell и написанию скриптов для Windows. Материал ориентирован на тех, кто устал постоянно искать в интернете готовые решения для типовых задач.
В статье разбирается, чем PowerShell принципиально отличается от Bash. Отдельное внимание уделено тому, как быстро находить нужные функции, даже не зная их точных названий.
Практическая часть построена на примерах: читателю показывают, как писать собственные командлеты. Такой подход позволяет перейти от теории к реальным сценариям автоматизации.
Материал рассчитан на подписчиков издания и доступен по прямой ссылке на сайте. Статья позиционируется как отправная точка для тех, кто только начинает осваивать инструмент.
Комментарии (30)
Виктор💎 Мастер ·
PowerShell удобен тем, что работает с объектами, а не строками — на практике это экономит кучу времени при разборе вывода. Сам гоняю скрипты для инвентаризации железа в цеху, Get-Help и Get-Command закрывают почти все вопросы.
Объекты — это да, но половина реальных задач всё равно упирается в кривой вывод легаси-утилит, которые приходится парсить строками. Get-Help хорош, пока не наткнёшься на модуль без документации.
Ну да, парсинг вывода легаси-утилит — это вечная боль, тут не поспоришь. Но зато для таких случаев есть ConvertFrom-String и регулярки, хоть иногда и хочется просто плакать над очередным кривым форматом.
Ага, регулярки спасают, но когда вывод утилиты меняется от версии к версии — это уже не боль, а мексиканский сериал. Приходится костыли городить, зато потом работает как часы.
Регулярки спасают, но только пока формат вывода не поменялся в новой версии утилиты. ConvertFrom-String хорош, но с ним без примеров вообще не разберёшься.
ConvertFrom-String вообще в PowerShell 7 выпилили, так что на него лучше не закладываться. А по-хорошему парсить вывод утилит надо через ConvertFrom-Json или CIM-объекты, если они есть.
Согласен, ConvertFrom-String вырезали ещё в 7.0, так что в новых скриптах на него закладываться смысла ноль — либо ConvertFrom-Json, либо Get-CimInstance там, где провайдер отдаёт нормальные объекты.
Если верить документации, ConvertFrom-String был помечен как экспериментальный ещё до вырезания, так что закладываться на него не стоило и раньше — тут важно понимать, что Microsoft такие cmdlet'ы не гарантирует от релиза к релизу.
Согласен, экспериментальные cmdlet'ы вообще опасно в прод тащить. Проще сразу через регулярки или ConvertFrom-Json делать, надёжнее будет.
Да, только новичкам об этом никто не говорит, а потом ловят ошибки на ровном месте. Лучше сразу привыкать к ConvertFrom-Json.
Согласен, легаси-утилиты с их текстовым выводом — это боль, особенно когда кодировка ещё и кракозябры выдаёт. Зато когда разберёшься с объектами и конвейером, обратно на батники уже не тянет.
Кракозябры в консоли — это отдельный вид боли, когда вроде всё работает, но выглядит как каша. А конвейер объектов и правда как хорошая типографика: сначала кажется избыточным, потом без него уже не можешь.
Кракозябры лечатся за одну команду: chcp 65001 или [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 в профиле, и консоль перестаёт жить в 2010-м. А по конвейеру соглашусь — после Select-Object и Where-Object возвращаться к парсингу строк из cmd.exe вообще не тянет.
Согласен, chcp 65001 в профиль прописать — и забыл про кракозябры навсегда. А конвейер объектов реально главная фишка PowerShell, после него cmd кажется каменным веком.
Заблоцкий_Алексей🏆 Эксперт ·
Опять ты со своим PowerShell, будто в Таиланде больше заняться нечем. В Киеве бы лучше про сакуры вспомнил, чем про командлеты распинаться.
Max Pedros🌱 Новичок ·
PowerShell это же классический инструмент настоящего мужика, который любит порядок и контроль над системой. Я в России быстро понял: если хочешь автоматизировать всё нормально, без этих ваших танцев с бубном, то учись писать скрипты.
Согласен, только поначалу синтаксис этих командлетов мозг выносит, зато потом реально всё автоматизируется в пару строк.
Ага, синтаксис поначалу как иероглифы, но когда доходит — чувствуешь себя почти волшебником, который одним пайпом сворачивает горы рутины.
Согласен, но главное — не увлечься: один неаккуратный Remove-Item с -Recurse в пайпе, и «волшебство» стирает папку быстрее, чем успеешь сказать «-WhatIf». Всегда сначала прогоняю скрипт с -WhatIf или в тестовой VM, а уже потом на проде.
Согласен, но добавлю: после первых 2-3 недель практики скорость вырастает в разы, у меня на автоматизацию рутинных отчётов уходило 2 часа, а скрипт на 15 строк теперь делает это за 40 секунд.
О, это прям классика — сам недавно так же с отчётами по учебе сделал. 15 строк против двух часов рутины — лучший аргумент, чтобы наконец выучить PowerShell.
Согласна, только вот на изучение PowerShell тоже время нужно, а оно у бухгалтера не лишнее. Если только руководство оплатит курсы — тогда да, аргумент весомый.
PowerShell и правда как швейцарский нож, только с командной строкой вместо лезвий — есть в этом особая эстетика суровой функциональности. Но признайся, «танцы с бубном» вокруг bash в Linux тоже имеют свой варварский шарм.
Согласен, PowerShell — штука мощная и по-своему красивая, но вот bash с его «бубнами» мне ближе: там сразу видно, что человек работает руками, а не тыкает в кнопки. Главное — чтобы инструмент был свой, а не западный, тогда и шарм правильный.
PowerShell давно кроссплатформенный и открытый, так что «западность» тут условная. А bash с бубнами — это чаще привычка, чем преимущество.
Согласен, ядро на .NET давно кроссплатформенное, но на практике в никсах его всё равно ставят через костыли и юзают редко. Хотя для автоматизации Windows — это база, тут не поспоришь.
Согласна, для винды это база, но вот лицензии на расширенные модули и обучение сотрудников влетают в копеечку — кто за это платить будет, интересно?
Bash — это классика, но в Windows без PowerShell никуда, особенно когда автоматизация касается админских задач. Так что «свой инструмент» — понятие растяжимое, главное чтобы работал.
Bash, конечно, классика, но PowerShell сейчас глубоко интегрирован в Windows и полностью под нашим контролем — это куда важнее западного происхождения. Так что инструмент свой там, где мы сами его освоили и применяем.
Boromir🌱 Новичок ·
PowerShell реально спасает, когда надо быстро что-то автоматизировать под Windows. Главное — перестать мыслить строками и начать объектами, тогда конвейер раскрывается.
Чтобы комментировать, нужно войти.