
Часть 0.
Что было до PowerShell? в 1981 году вышел MS-DOS 1.0. с командным интерпретатором COMMAND.COM
. Для автоматизации задач использовались пакетные файлы (.bat
) — простые текстовые файлы с последовательностью консольных команд. Удивительный аскетизм командной строки на фоне POSIX совместимых систем где уже с 1979 года существовала оболочка Борна (sh
).
📅 Состояние рынка оболочек на момент выхода MS-DOS 1.0 (август 1981)
Вот сводная таблица популярных ОС того времени и их поддержки оболочек (sh
, csh
и др.):
Операционная система | Поддержка оболочек (sh , csh , др.) | Комментарий |
---|---|---|
UNIX Version 7 (V7) | sh | Последний классический UNIX Bell Labs, широко распространён |
UNIX/32V | sh , csh | Версия UNIX для архитектуры VAX |
4BSD / 3BSD | sh , csh | Университетская ветка UNIX от Berkeley |
UNIX System III | sh | Первая коммерческая версия от AT&T, предшественник System V |
Xenix (от Microsoft) | sh | Лицензированная версия UNIX, продавалась Microsoft с 1980 г. |
IDRIS | sh | UNIX-подобная ОС для PDP-11 и Intel |
Coherent (Mark Williams) | sh (похожая) | Недорогая альтернатива UNIX для ПК |
CP/M (Digital Research) | ❌ (Нет sh , только простейший CLI) | Не UNIX, самая популярная ОС для 8-битных ПК |
MS-DOS 1.0 | ❌ (только COMMAND.COM ) | Минимальная командная оболочка, никаких скриптов или pipe |
💡 Что такое sh
, csh
sh
— Bourne Shell, основной скриптовый интерпретатор UNIX с 1977 года.csh
— C Shell, улучшенная оболочка с синтаксисом, похожим на C, и удобствами для интерактивной работы.- Эти оболочки поддерживали редиректы, пайпы, переменные, функции и условия — всё, что сделало UNIX мощным инструментом автоматизации.
Microsoft ориентировалась на дешёвые 16-битные IBM PC, которые имели мало памяти (обычно 64–256 КБ),не имели многозадачности и были предназначены для домашнего и офисного использования, а не серверов. UNIX был платным, требовал сложной архитектуры и опыта, а бухгалтеры и инженеры, не системные администраторы, им требовалась быстрая и простая ОС
Интерфейс DOS Вместо сложного sh
представлял один файл command.com с скудным набором внутренних команд (dir, copy, del и т.p.){:target=»_blank»} без функций, циклов и модулей.
Были и внешние команды — отдельные исполняемые файлы (.exe или .com). Примеры: FORMAT.COM, XCOPY.EXE, CHKDSK.EXE, EDIT.COM. Сценарии исполнения записывались в текстовый файл с расширением .bat (batch file)
Примеры конфигуарционных файлов:
- AUTOEXEC.BAT
:: ------------------------------------------------------------------------------ :: AUTOEXEC.BAT — Автоматическая конфигурация и запуск Windows 3.11 :: Автор: hypo69 :: Год: примерно 1993 :: Назначение: Выполняет инициализацию DOS-среды, загрузку сетевых драйверов и запуск Windows 3.11 :: ------------------------------------------------------------------------------ @ECHO OFF :: Настройка приглашения командной строки PROMPT $p$g :: Установка переменных среды SET TEMP=C:\TEMP PATH=C:\DOS;C:\WINDOWS :: Загрузка драйверов и утилит в верхнюю память LH C:\DOS\SMARTDRV.EXE :: Дисковый кэш LH C:\DOS\MOUSE.COM :: Драйвер мыши :: Загрузка сетевых служб (актуально для Windows for Workgroups 3.11) IF EXIST C:\NET\NET.EXE LH C:\NET\NET START :: Автоматический запуск Windows WIN
- CONFIG.SYS
:: ------------------------------------------------------------------------------ :: CONFIG.SYS — Конфигурация памяти и драйверов DOS для Windows 3.11 :: Автор: hypo69 :: Год: примерно 1993 :: Назначение: Инициализация драйверов памяти, настройка системных параметров :: ------------------------------------------------------------------------------ DEVICE=C:\DOS\HIMEM.SYS DEVICE=C:\DOS\EMM386.EXE NOEMS DOS=HIGH,UMB FILES=40 BUFFERS=30 DEVICEHIGH=C:\DOS\SETVER.EXE
В Майкрософт параллельно DOS почти сразу начали разрабатывать принциально новое ядро.
Ядро Windows NT{:target=»_blank»} (New Technology) впервые появилось с релизом операционной системы:
Windows NT 3.1 — 27 июля 1993 года
- Разработка началась: в 1988 году под руководством Дейва Катлера (бывшего инженера DEC, создателя VMS) с целью создать полностью новую, защищённую, переносимую и многозадачную ОС, не совместимую с MS-DOS на уровне ядра.
- NT 3.1 — называлась так, чтобы подчеркнуть совместимость с Windows 3.1 на уровне интерфейса, но была совершенно новой архитектурой.
🧠 Что принесло ядро NT:
Особенность | Описание |
---|---|
32-битная архитектура | В отличие от MS-DOS и Windows 3.x, которые были 16-битными. |
Многозадачность | Настоящая preemptive multitasking. |
Защищённая память | Программы не могли повредить память друг друга. |
Модульность | Многоуровневая архитектура ядра: HAL, Executive, Kernel, драйверы. |
Поддержка многоплатформенности | NT 3.1 работала на x86, MIPS и Alpha. |
Совместимость с POSIX | NT поставлялся с POSIX-сабсистемой, сертифицированной по POSIX.1. |
📜 Линейка NT:
Версия NT | Год | Комментарий |
---|---|---|
NT 3.1 | 1993 | Первый релиз NT |
NT 3.5 / 3.51 | 1994–1995 | Улучшения, оптимизация |
NT 4.0 | 1996 | Интерфейс Windows 95, но ядро NT |
Windows 2000 | 2000 | NT 5.0 |
Windows XP | 2001 | NT 5.1 |
Windows Vista | 2007 | NT 6.0 |
Windows 10 | 2015 | NT 10.0 |
Windows 11 | 2021 | Тоже NT 10.0 (маркетинг 😊) |
Разница в возможностях операционных систем:
Характеристика | MS-DOS (1981) | Windows NT (1993) |
---|---|---|
Тип системы | Монолитная, однозадачная | Микроядерная/гибридная, многозадачная |
Разрядность | 16-бит | 32-бит (с поддержкой 64-бит с NT 5.2 / XP x64) |
Многозадачность | ❌ Отсутствует (один процесс за раз) | ✅ Preemptive multitasking |
Защищённая память | ❌ Нет | ✅ Да (каждый процесс в своём адресном пространстве) |
Многопользовательский режим | ❌ Нет | ✅ Частично (в NT Workstation/Server) |
Совместимость с POSIX | ❌ Нет | ✅ Встроенная POSIX-сабсистема в NT 3.1–5.2 |
Переносимость ядра | ❌ Только x86 | ✅ x86, MIPS, Alpha, PowerPC |
Драйверы | Прямой доступ к оборудованию | Через HAL и Kernel-mode Drivers |
Уровень доступа приложений | Приложения = системный уровень | Пользовательский / Ядерный уровень разделены |
Безопасность | ❌ Отсутствует | ✅ Модель безопасности: SID, ACL, токены доступа |
Стабильность | ❌ Зависимость одной программы = крах ОС | ✅ Изоляция процессов, защита ядра |
Но было одно большое НО! Но средствам автоматизации и администрирования не уделялось должного внимание вплоть до 2002 года.
Microsoft использовала совершенно разные подходы, стартегии и инструменты для администрирования. Всё это было разрозненным, часто GUI-ориентированным и не всегда автоматизируемым.
📌 Список некоторых инструментов:
Средство | Назначение |
---|---|
cmd.exe | Улучшенный командный интерпретатор (замена COMMAND.COM ) |
.bat , .cmd | Скрипты командной строки |
Windows Script Host (WSH) | Поддержка VBScript и JScript для автоматизации |
reg.exe | Управление реестром из командной строки |
net.exe | Работа с пользователями, сетью, принтерами |
sc.exe | Управление службами |
tasklist , taskkill | Управление процессами |
gpedit.msc | Групповая политика (локально) |
MMC | Консоль со снап-инами для управления |
WMI | Доступ к системной информации (через wmic , VBScript, или COM) |
WbemTest.exe | GUI для тестирования WMI-запросов |
eventvwr | Просмотр журналов событий |
perfmon | Мониторинг ресурсов |
🛠 Примеры автоматизации:
- VBScript-файлы (
*.vbs
) для администрирования пользователей, сетей, принтеров и служб. WMIC
— командный интерфейс к WMI (например:wmic process list brief
)..cmd
скрипты с вызовамиnet
,sc
,reg
,wmic
, и т.д.
⚙️ Windows Scripting Host (WSH)
- Впервые появился в Windows 98, активно использовался в Windows 2000 и XP.
- Позволял выполнять VBScript и JScript-файлы из командной строки:Set objShell = WScript.CreateObject(«WScript.Shell») objShell.Run «notepad.exe»
Часть 1.
Только в 2002 году в компании сформулировался проект Monad , который позже вылился в powershell:
Начало разработки: ориентировочно в 2002 году
Публичное анонсирование: 2003 год, как «Monad Shell»
Первые бета-версии: появились к 2005 году
Финальный релиз (PowerShell 1.0): ноябрь 2006 года
Автором и главным архитектором проекта Monad / PowerShell является Джеффри Сновер (Jeffrey Snover)
Сегодня PowerShell Core работает на Windows macOS Linux
Параллельно шла разработка фреймворка .NET и powershell был в нее глубоко интегрирован, в следующих главах я покажу примеры
А теперь — самое главное!
Главное преимущество PowerShell по сравнению с классическими командными оболочками — это то, что он работает с объектами, а не с текстом. Когда вы выполняете команду, она возвращает вам не просто текст, а структурированный объект (или коллекцию объектов), у которого есть четко определенные свойства (Properties) и методы (Methods).
Смотрите, как PowerShell превосходит классические оболочки благодаря работе с объектами
📁 Как было: dir
и ручной парсинг
В CMD (и в старом COMMAND.COM
, и в cmd.exe
) команда dir
возвращает результат как обычный текст. Пример вывода:
24.07.2025 21:15 1 428 my_script.js
25.07.2025 08:01 3 980 report.html
Допустим, вы хотите извлечь имя файла и размер каждого файла. Вам придётся парсить строки вручную:
for /f "tokens=5,6" %a in ('dir ^| findstr /R "[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]"') do @echo %a %b
- Это страшно сложно читается, зависит от локали, формата даты, шрифта. И ломается при пробелах в названиях
✅ PowerShell: объекты вместо текста
✔ Простой и читаемый пример:
Get-ChildItem | Select-Object Name, Length
Результат:
Name Length
---- ------
my_script.js 1428
report.html 3980
Get-ChildItem
возвращает массив объектов файлов/папокSelect-Object
позволяет легко получить нужные свойства
🔍 Что на самом деле возвращает Get-ChildItem
?
$item = Get-ChildItem -Path .\my_script.js $item | Get-Member
Результат:
TypeName: System.IO.FileInfo
Name MemberType Definition
---- --------- ----------
Length Property long Length {get;}
Name Property string Name {get;}
CreationTime Property datetime CreationTime {get;set;}
Delete Method void Delete()
...
PowerShell возвращает объекты типа System.IO.FileInfo
, у которых есть:
- 🧱 Свойства (
Name
,Length
,CreationTime
,Extension
, …) - 🛠 Методы (
Delete()
,CopyTo()
,MoveTo()
и т.д.)
Вы работаете с полноценными объектами, а не со строками.
Синтаксис «Глагол-Существительное»:
PowerShell использует строгий и логичный синтаксис команд: Глагол-Существительное
(Verb-Noun)
Глагол | Что делает |
---|---|
Get- | Получить |
Set- | Установить |
New- | Создать |
Remove- | Удалить |
Start- | Запустить |
Stop- | Остановить |
Существительное | Над чем работает |
---|---|
Process | Процесс |
Service | Служба |
Item | Файл/папка |
EventLog | Журналы событий |
Computer | Компьютер |
🔄 Примеры:
Что нужно сделать | Команда |
---|---|
Получить процессы | Get-Process |
Остановить службу | Stop-Service |
Создать новый файл | New-Item |
Получить содержимое папки | Get-ChildItem |
Удалить файл | Remove-Item |
➡ Даже если вы не знаете точной команды, вы можете предположить её по смыслу — и почти всегда угадаете.
Командлет Get-Help
— ваш главный помощник.
- Получим справку о самой справке:Get-Help Get-Help
- Получим базовую справку о команде для работы с процессами:Get-Help Get-Process
- Посмотрим примеры использования этой команды:Get-Help Get-Process -ExamplesЭто невероятно полезный параметр, который часто дает готовые решения для ваших задач.
- Получим максимально подробную информацию о команде:Get-Help Get-Process -Full
В следующей части: конвеер или цепочка команд (PipeLines)