Часть 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
и т.п.)] без функций, циклов и модулей. Были и внешние команды — отдельные исполняемые файлы (.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
(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. PowerShell
Только в 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
)