Текст на вході, текст на виході: межа, що зламала тисячу 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]