Текст на входе, текст на выходе: предел, сломавший тысячу bat-файлов
cmd — текстовая оболочка: dir печатает форматированные колонки, и всё, что вам на самом деле было нужно — размер, дату, имя — приходит строкой, приклеенной к странице, которую придётся резать. Скрипты на таком парсинге ломаются в тот день, когда локаль пишет месяц иначе, колонка становится шире или в имени файла появляется пробел. Кто сопровождал bat-файлы, помнит ритуал: FOR /F с токенами и разделителями, короткая молитва и вторая версия для машин, отвечающих на другом языке.
PowerShell, вышедший в 2006-м и построенный на .NET, задуман, чтобы покончить именно с этим. Get-ChildItem не печатает строки — он возвращает объекты FileInfo, в которых Name, Length, LastWriteTime и Extension лежат как данные. Конвейер между командами передаёт объекты целиком, поэтому фильтр, написанный в Москве, в Мюнхене работает точно так же, а сумма — число, которое можно округлить и отформатировать, а не строка, которой приходится верить.
Командлеты «глагол-существительное», которые складываются как надо
Команды здесь — командлеты по схеме «глагол-существительное»: Get-ChildItem, Where-Object, Measure-Object, Remove-Item, и эта дисциплина не косметика: утверждённые глаголы держат конвейер читаемым через полгода, как подписанный ящик с инструментами побеждает ящик с безымянными отвёртками. Для чистки важнее отдельных команд композиция: найти, отфильтровать, посчитать, удалить — одна строка потока объектов вместо четырёх абзацев bat-синтаксиса. Каждый этап вдобавок сам себя называет, поэтому наспех написанный однострочник и через месяц читается как фраза.
Вторая победа потише — безопасность. Remove-Item понимает -WhatIf: напечатает все удаления, которые собирался сделать, — и не сделает ни одного; -Confirm спросит по каждому файлу. Такой сухой прогон в cmd просто отсутствовал. Get-AppxPackage передаётся прямо в Remove-AppxPackage, так что удаление предустановленного приложения — конвейер, а не охота по реестру. Это не делает удаление безобидным, но делает проверяемым — свойство, которого сценариям чистки всегда не хватало.
- Get-ChildItem $env:TEMP -Recurse — объект FileInfo на каждый файл: Length и LastWriteTime как данные
- Where-Object Length -gt 100MB — фильтр по объектам, нечувствительный к локали и ширине колонок
- Measure-Object Length -Sum — итог в гигабайтах числом, которое не надо парсить заново
- Remove-Item ... -WhatIf — сухой прогон: список удалений без единого удаления
- Get-AppxPackage *zune* | Remove-AppxPackage — удаление appx-пакета одним конвейером
Где cmd по-прежнему выигрывает — и честные ограничения
PowerShell не бесплатен. Он стартует медленнее cmd, его политика выполнения останавливает новичков, запустивших скачанный .ps1 до Set-ExecutionPolicy -Scope CurrentUser RemoteSigned, а рекурсивный Get-ChildItem по всему диску ползёт на фоне специализированных сканеров. Для классики — ipconfig, sfc, powercfg — cmd остаётся более лёгким окном, и эти двадцать команд здесь никто не отменял.
Второе честное ограничение — параллелизм: удаление идёт в один поток, и огромное дерево мелких файлов займёт столько времени, сколько займёт. Но баланс очевиден. Всюду, где нужно посчитать, отфильтровать или показать перед удалением, PowerShell обращается с системой как с данными, а не как с экраном, который надо соскребать, — а однострочники из следующей статьи не требуют ничего, кроме копипасты.
Вопросы и ответы
Чем PowerShell лучше cmd для чистки Windows?
Всем, что фильтрует, считает и прогоняет удаления вхолостую: конвейер объектов переживает любую локаль и отчитывается до действия. Для классики — ipconfig, sfc, chkdsk — cmd остаётся более лёгким окном.
Чем Windows PowerShell отличается от PowerShell 7?
Windows PowerShell 5.1 встроен в систему и работает на .NET Framework; PowerShell 7 — кроссплатформенный преемник, который ставится отдельно. Однострочники чистки работают в обоих без изменений.
Понятно до покупки: что входит в лицензию
Разовый 30-минутный триал даёт доступ к базовым инструментам. Возможности с меткой PRO остаются закрыты до активации платной лицензии.
Читайте также
Написать нам: [email protected]