#Руководства
-
0
Рассказываем о языке программирования, с помощью которого можно творить чудеса в Windows (и не только).
Иллюстрация: Francesca Tosolini / Unsplash / Annie для Skillbox Media
Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
Рядовые пользователи общаются со своими ПК через графический интерфейс: нажимают иконки и кнопки, переключаются между окнами и вкладками.
А системные администраторы используют для этого командную строку. Чтобы компьютер понимал их указания, интерпретатор, он же командная оболочка, переводит всё на машинный язык.
Есть десятки оболочек под разные нужды, предпочтения и операционные системы. В Linux обычно используют Bash, в macOS по умолчанию установлен Zsh, а для Windows (но не только) есть PowerShell.
Из статьи вы узнаете:
- Что такое Windows PowerShell
- Как открыть PowerShell в Windows
- Какие у неё есть команды (они же командлеты)
- Что такое объекты и конвейеры (пайплайны)
- Как запустить выполнение задач в фоновом режиме
- Как работать в PowerShell ISE
- О переменных
- О логических операторах
- Об условиях в Power Shell
- Как работать с циклами
- О массивах, хеш-таблицах, функциях и классах
Windows PowerShell — это одновременно командная оболочка и язык сценариев, основанный на .NET. PowerShell используют для управления компьютером и автоматизации задач. Это полноценный объектно-ориентированный язык, в котором есть переменные, функции, классы и объекты.
В отличие от других командных оболочек, PowerShell работает не со строками, а с объектами. Благодаря этому можно создавать сложную логику. При этом интерпретатор полностью совместим со стандартными командами cmd.exe и может выполнять их.
Команды пишут в интерактивном режиме внутри терминала. Но если вы хотите сохранить какой-то часто используемый скрипт, удобнее использовать ISE.
Windows PowerShell ISE — это интегрированная среда сценариев для PowerShell. В ней можно писать, сохранять и запускать скрипты, есть подсветка синтаксиса, автодополнение, справочник команд и инструменты отладки. PowerShell ISE — легаси-инструмент, он работает для версии языка 5.1 и ниже. Для более поздних обновлений используют IDE общего назначения с плагинами.
С 2016 года язык стал кросс-платформенным. Его можно использовать не только в Windows, но и в macOS (начиная с версии 10.13) и популярных дистрибутивах Linux (каких именно, можно узнать в документации).
Обычно PowerShell предустановлен по умолчанию. Но если у вас его нет, можете воспользоваться инструкцией от Microsoft. Также в документации есть руководства по установке для macOS и Linux.
PowerShell не зависит от версии операционной системы и одинаково работает как на Windows 10, так и на Windows Server.
Есть два основных способа открыть PowerShell или PowerShell ISE в Windows: меню «Пуск» и приложение «Выполнить».
В меню «Пуск» долистайте до папки Windows PowerShell, откройте её и выберите нужное приложение. Здесь есть 32-разрядные (у них х86 в скобках) и 64-разрядные версии терминала и ISE.
Скриншот: Skillbox Media
Приложение «Выполнить» открывается сочетанием клавиш Win + R. В появившемся окне введите powershell или powershell ise (в зависимости от того, что вам нужно) и нажмите ОК.
Скриншот: Skillbox Media
Команды в PowerShell называются командлетами (от английского cmdlet). Все они состоят из связки «Глагол-Существительное», или по-другому «Действие-Объект». Например, Get-Services и Start-Process. Благодаря такой структуре можно понять назначение команды, даже если вы с ней ещё не сталкивались.
После самого командлета ему передаются параметры и их значения. Между всеми словами в команде ставится пробел. Вот пример синтаксиса команды, чтобы перейти в каталог C:\:
Set-Location -LiteralPath C:\ -PassThru
Препарируем её:
- Set-Location — буквально «установить местоположение». Переходит в нужный каталог.
- -LiteralPath C:\ — в этом параметре мы прописываем путь до каталога, в который хотим перейти. У командлета Set-Location это аргумент по умолчанию, поэтому -LiteralPath можно не прописывать отдельно: Set-Location C:\ -Passthru сработает точно так же.
- -PassThru — обычно командлет Set-Location просто меняет местоположение и ничего не возвращает. Этот параметр говорит, что нужно вывести на экран расположение каталога, в который мы перешли.
При этом в PowerShell не важен регистр. Эту же команду можно записать только заглавными буквами, только строчными и даже «лесенкой» — она всё равно сработает.
sEt-loCATion -PATH c:\ -passthru
Если в одной строке написаны сразу несколько команд, они разделяются точкой с запятой ;.
Иногда команда может получиться слишком длинной. Чтобы разбить её на несколько строк, в месте переноса ставится гравис `. Создать новую строку можно сочетанием клавиш Shift + Enter (появится ниже текущей) или Ctrl + Enter (появится выше текущей).
Разделим предыдущую команду:
Set-Location `
-LiteralPath C:\ `
-PassThru
Совет
Стрелки вверх и вниз позволяют прокручивать историю команд, которые вы вводили. Это удобно, если нужно выполнить одну из предыдущих команд ещё раз или внести в неё небольшие изменения.
При работе с терминалом в интерактивном режиме бывает неудобно каждый раз вводить полные названия командлетов. Поэтому у самых распространённых есть псевдонимы, или алиасы, — их сокращённые версии.
Получить список доступных алиасов можно командой Get-Alias (у неё тоже есть свой псевдоним — gal).
Чтобы узнать список алиасов для отдельного командлета, воспользуйтесь параметром -Definition. Например:
Get-Alias -Definition Get-ChildItem
Если вы по алиасу хотите узнать полное название командлета, примените параметр -Name. Это аргумент по умолчанию, поэтому писать его необязательно.
# Оба варианта равноправны Get-Alias -Name clear Get-Alias clear
Многим командлетам для работы нужно передать путь до файла или каталога. Делается это в виде строки, например: C:\Windows\System32.
Но если в этом адресе встретится пробел или другой спецсимвол, PowerShell воспримет его как разделитель. Например:
# Эта команда не будет работать Set-Location C:\Program Files
PowerShell «видит» пробел и думает, что путь до папки закончился на слове Program, а files — это уже значение какого-то другого параметра.
Есть два способа избежать таких ситуаций:
- Экранировать проблемные символы обратным грависом `: C:\Program` Files. Если путь длинный, то это может быть неудобно.
- Поместить весь путь в одинарные или двойные кавычки: ‘C:\Program Files’ или «C:\Program Files» (лучше одинарные).
Также в PowerShell есть сокращения для быстрого доступа к ближайшим директориям:
- Точка . указывает на текущий каталог. Например, Get-ChildItem . позволяет посмотреть все папки и файлы в нынешнем местоположении.
- Две точки .. указывают на родительский каталог. Например, Set-Location .. позволяет быстро к нему перейти. Это может быть полезно, если вы находитесь где-то в глубоко вложенной директории.
У многих командлетов есть сразу два параметра, в которых можно указать путь до папки или файла: -Path и -LiteralPath. Разница между ними в том, что в -Path можно подставлять переменные, а -LiteralPath воспринимает символы буквально, даже если в них указано имя переменной. О переменных в PowerShell мы рассказываем ниже.
Чтобы узнать подробную информацию о командлете, используйте Get-Help Название-Командлета. Например:
Get-Help Get-Childitem
У Get-Help есть несколько полезных параметров:
- -Detailed даёт более детальную справку.
- -Full даёт полную справку.
- -Examples приводит примеры использования командлета.
- -Online перенаправляет на веб-страницу с документацией.
Командлеты PowerShell возвращают в терминал не строки, а объекты — структуру данных с набором свойств и методов. Подробно об объектах можно прочитать в нашей статье.
Строка, которую вы видите в терминале после выполнения команды — только визуальное представление объекта. PowerShell в виде таблицы показывает некоторые свойства, но не все.
Так же, как командлеты возвращают объекты, они могут принимать и обрабатывать их. Можно написать команду, на выходе получить объект, передать его другому командлету, получить объект уже от него, передать — и так до бесконечности. Это и есть конвейеры, или пайплайны.
Чтобы передать результат командлета другому командлету, между ними ставят вертикальную черту |.
Get-Process возвращает список процессов, запущенных на компьютере. Если передать ему название процесса (или шаблон, написанный с помощью регулярных выражений), командлет выведет только нужные элементы списка.
Вызовем запущенный процесс powershell.
Get-Process powershell
Мы получили объект и таблицу с некоторыми его свойствами. Чтобы узнать все свойства и методы, передадим объект командлету Get-Member. Для этого нам и понадобится конвейер.
Get-Process powershell | Get-Member
Get-Member получил объект от Get-Process и вывел таблицу со всем его содержимым. Результат работы Get-Member — тоже объект (вернее, список объектов), который можно передать по конвейеру дальше.
Например, мы хотим отобразить только те строки, в которых MemberType — это Property. Для этого используем командлет Where-Object.
Get-Process powershell | Get-Member | Where-Object {$_.MemberType -eq 'Property'}
Where-Object по очереди перебирает каждый объект, полученный от Get-Member. Выражение в фигурных скобках — логическое:
- $_ ссылается на текущий объект (то есть на отдельную строку в таблице);
- .MemberType обращается к значению свойства MemberType в этом объекте;
- -eq сравнивает, равно ли выражение слева от него выражению справа от него;
- ‘Property’ — это значение, которое мы ожидаем увидеть у свойства MemberType.
О логических выражениях мы рассказываем ниже.
Командлет Format-Table позволяет настроить отображение таблицы, которую PowerShell выводит в терминале: выбрать свойства и методы, которые в ней будут, установить ширину столбцов, сгруппировать данные по нескольким таблицам и так далее.
Отформатируем таблицу, которую получили от командлета Get-Member.
Get-Process powershell | Get-Member | Format-Table -AutoSize -Wrap -GroupBy MemberType -Property Name, Definition
Расшифруем параметры Format-Table:
- -AutoSize выравнивает ширину столбцов по размеру их содержимого;
- -Wrap переносит содержимое ячейки на следующую строку, если она не помещается в размеры экрана (по умолчанию текст обрезается);
- -GroupBy разделяет одну таблицу на несколько, сгруппированных по значению какого-либо свойства (в нашем случае для каждого MemberType создана отдельная таблица);
- -Property указывает, какие свойства объекта будут отображаться в таблице в качестве столбцов (в нашем случае Name и Definition).
Командлет Sort-Object позволяет отсортировать список объектов (то есть таблицу) по значениям её свойств (то есть столбцов). Отсортируем результат работы GetMember по столбцу Name в алфавитном порядке. Для этого используем параметр -Property (работает как у Format-Table).
Get-Process powershell | Get-Member | Sort-Object -Property Name
У Sort-Object есть и другие полезные параметры:
- -Descending сортирует объекты в порядке убывания.
- -Unique удаляет дубликаты и возвращает только уникальные объекты.
- -Top получает число N и отображает первые N объектов в таблице.
- -Bottom получает число N и отображает последние N объектов в таблице.
Некоторые задачи могут занимать много времени. Это, например, установка и обновление ПО, поиск файла в большой директории. Пока PowerShell выполняет одну команду, писать другие нельзя.
К примеру, попытаемся найти на всём диске C файл powershell.exe. Используем для этого командлет Get-ChildItem с параметром -Recurse. Так он будет искать не только в текущем каталоге, но и во всех подкаталогах.
PowerShell может попытаться зайти в папки, к которым у него нет доступа, поэтому добавим -ErrorAction SilentlyContinue. Если случится ошибка, команда не станет сообщать об этом и просто продолжит выполняться.
Получается так:
Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue
Как видим, пока задача не завершена, командная строка недоступна. Чтобы принудительно прервать её выполнение, нажмите сочетание клавиш Ctrl + C (при этом ничего не должно быть выделено, иначе компьютер воспримет это как команду «Копировать»).
Чтобы не ждать выполнения долгих задач и сразу приступать к следующим, их можно запускать в фоновом режиме. Делается это командлетом Start-Job, а сама команда помещается в фигурные скобки.
Start-Job {Get-ChildItem -Path C:\ -Name powershell.exe -Recurse -ErrorAction SilentlyContinue}
Одновременно можно выполнять любое количество фоновых задач. Помимо Start-Job для работы с фоновыми задачами есть другие командлеты:
- Get-Job выдаёт отчёт со статусом фоновых задач.
- Wait-Job делает консоль недоступной, пока выполняется фоновая задача.
- Stop-Job прерывает выполнение фоновой задачи.
- Receive-Job выводит результат фоновой задачи и удаляет его из памяти. Чтобы сохранить результат в памяти, используйте параметр -Keep.
Wait-Job, Stop-Job и Receive-Job ожидают, что вы примените их к конкретной задаче (или нескольким). Для этого укажите название Name или идентификатор Id. Делать это можно и в связке с Get-Job.
Get-Job Job1
Терминал PowerShell удобен для выполнения небольших коротких однострочных задач. Чтобы создавать и сохранять сложные скрипты, есть интегрированная среда сценариев.
Важно!
PowerShell ISE предназначен для версий языка 5.1 и младше. Для более старших версий Microsoft рекомендует использовать Visual Studio Code с расширением PowerShell.
PowerShell ISE состоит из трёх основных окон:
- область сценариев в верхней части экрана — в ней пишут скрипты;
- область консоли в нижней части экрана — работает так же, как обычный терминал, здесь можно писать команды в интерактивном режиме;
- панель команд в правой части экрана — полный справочник команд PowerShell с конструктором, в котором можно указать значения нужных параметров.
PowerShell позволяет вставлять в код комментарии. Они никак не влияют на выполнение скрипта и нужны людям, которые будут читать вашу программу. Однострочный комментарий начинается с символа #, а многострочный обрамляется с двух сторон символами <# и #>.
Любой код чаще читают, чем пишут, и важно делать его понятным для человека. Разработчики PowerShell договорились между собой о едином своде правил и выпустили стайлгайд. Вот несколько правил оттуда.
Используйте нотацию PascalCase в названиях командлетов, функций, параметров, свойств, методов, переменных и классов. Неправильно писать: get-service, Get-service, GET-SERVICE. Правильно: Get-Service.
Пишите полные названия командлетов. Алиасы удобны для работы в интерактивном режиме, но в скриптах могут затруднять чтение команд. Неправильно: dir, gci, ls. Правильно: Get-ChildItem.
One True Brace Style при оформлении вложенности. Если вы где-то используете фигурные скобки, то код внутри них отбивается табуляцией (четыре пробела), а сами скобки ставятся так:
if ($var1 -eq $var2) { # Код внутри условия } else { # Код внутри условия # Ещё код внутри условия }
Исключение из прошлого правила — когда код в фигурных скобках совсем небольшой, его можно записать в одну строку. Например:
Get-ChildItem | Where-Object { $_.Length -gt 10mb }
Комментируйте код. Так будет гораздо проще разобраться, что он делает и как работает. Причём как другому человеку, так и вам самим через полгода.
В PowerShell ISE можно выполнить код целиком или частично, есть инструменты отладки. Скрипты сохраняются в файлах с расширением .ps1. Но запустить их двойным кликом не получится — нужно нажать правую кнопку мыши и в появившемся окне выбрать Выполнить с помощью PowerShell.
Также запустить скрипт можно из оболочки. Например, в каталоге C:\Scripts есть файл test_script.ps1. Выполнить его можно:
- командой PowerShell -File C:\Scripts\test_script.ps1, запущенной из любого места;
- командой .\test_script.ps1, запущенной, когда вы находитесь в каталоге C:\Scripts.
По умолчанию запускать любые файлы с PowerShell-скриптами запрещено. Сделано это в целях безопасности. Узнать нынешнюю политику выполнения можно с помощью командлета Get-ExecutionPolicy. Вот какая она может быть:
- Restricted (установлена по умолчанию) — запрещено запускать любые скрипты.
- AllSigned — разрешено запускать только скрипты, которые были подписаны доверенным разработчиком.
- RemoteSigned — разрешено запускать подписанные доверенным разработчиком и собственные скрипты.
- Unrestricted — разрешено запускать любые скрипты.
Чтобы ваши ps1-файлы запускались, нужно заменить политику выполнения на RemoteSigned. Для этого откройте PowerShell от имени администратора и выполните команду:
Set-ExecutionPolicy RemoteSigned
Чтобы подтвердить действие, введите y.
Чтобы сохранять данные и обращаться к ним в будущем, в PowerShell есть переменные. Перед их названием ставится знак доллара $, а сами они могут содержать латинские буквы (заглавные и строчные), цифры и нижние подчёркивания.
Переменная может хранить данные любого типа, и их можно перезаписывать.
Переменную можно привести к определённому типу данных. Создадим переменную со строкой 2023 и преобразуем её в число. Чтобы узнать тип данных, воспользуемся методом .GetType().
Чтобы удалить переменную, используется метод .Clear().
Переменные можно подставлять в строки, если они оформлены двойными кавычками. Если же кавычки одинарные, то PowerShell воспринимает символы в строке буквально. Сравните:
Помимо пользовательских также есть системные переменные. Например, $PSVersionTable хранит информацию о версии PowerShell.
PowerShell позволяет проводить с объектами арифметические операции и сравнивать их друг с другом. Для этого он использует логические операторы.
Арифметические операторы:
- + — сложение;
- — — вычитание;
- * — умножение;
- / — деление;
- % — деление по модулю;
- ( и ) — скобки для группировки операций.
Операторы сравнения оформляются так же, как параметры командлетов. Их названия произошли от английских выражений, указанных в скобках.
- -eq — равно (от equal);
- -ne — не равно (от not equal);
- -gt — больше (от greater than);
- -ge — больше либо равно (от greater than or equal);
- -lt — меньше (от less than);
- -le — меньше либо равно (от less than or equal).
Условия в PowerShell создаются с помощью ключевых слов if, elseif и else. В обычных скобках указывается само условие, в фигурных — код, который запускается при его выполнении. Например:
$Number = 123 if ($Number -gt 0) { Write-Host 'Число больше нуля' } elseif ($Number -lt 0) { Write-Host 'Число меньше нуля' } else { Write-Host 'Число равно нулю' } >>> Число больше нуля
Также условия можно задавать с помощью ключевого слова switch. Например:
$Day = 2 switch ($Day) { 1 {Write-Host 'Понедельник'} 2 {Write-Host 'Вторник'} 3 {Write-Host 'Среда'} 4 {Write-Host 'Четверг'} 5 {Write-Host 'Пятница'} 6 {Write-Host 'Суббота'} 7 {Write-Host 'Воскресенье'} } >>> Вторник
Windows PowerShell — язык программирования, на котором администрируют операционные системы и автоматизируют процессы. Он поддерживает объектно-ориентированное программирование и позволяет работать в интерактивном режиме, а также писать, сохранять и выполнять полноценные скрипты.
- PowerShell предустановлен в Windows, но его можно скачать на macOS и Linux.
- У языка есть собственная интегрированная среда сценариев PowerShell ISE, предназначенная для старых версий языка (5.1 и ниже).
- PowerShell работает не со строками, а с объектами. Он обрабатывает их с помощью командлетов, построенных по принципу «Глагол-Существительное».
- Результат выполнения одного командлета можно передавать другому в конвейере.
- Задачи можно выполнять в фоновом режиме.
- PowerShell — высокоуровневый язык, на котором можно работать с переменными, логическими операторами, условиями, циклами, массивами, хеш-таблицами, функциями и классами.
С чего начать путь в IT?
Получите подробный гайд в нашем телеграм-канале бесплатно! Кликайте по баннеру и заходите в канал — вы найдёте путеводитель в закрепе.
Забрать гайд>
Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась.
Windows PowerShell позволяет системным администраторам автоматизировать большинство рутинных задач. С ее помощью можно менять настройки, останавливать и запускать сервисы, а также производить обслуживание большинства установленных приложений. Воспринимать синее окошко как еще один интерпретатор команд было бы неправильно. Такой подход не отражает сути предложенных корпорацией Microsoft инноваций. На самом деле возможности Windows PowerShell гораздо шире: в небольшом цикле статей мы попробуем разобраться, чем решение Microsoft отличается от более привычных нам средств.
Основные возможности
Разумеется Windows PowerShell — это в первую очередь командная оболочка с языком сценариев, изначально созданная на основе платформы .NET Framework, а позднее — на .NET Core. В отличие от принимающих и возвращающих текстовые данные оболочек, Windows PowerShell работает с классами .NET, у которых есть свойства и методы. PowerShell позволяет выполнять обычные команды, а также дает доступ к объектам COM, WMI и ADSI. В ней используются различные хранилища, вроде файловой системы или реестра Windows, для доступа к которым созданы т.н. поставщики (providers). Стоит отметить возможность встраивания исполняемых компонентов PowerShell в другие приложения для реализации различных операций, в т.ч. через графический интерфейс. Верно и обратное: многие приложения для Windows предоставляют доступ к своим интерфейсам управления через PowerShell.
Windows PowerShell позволяет:
- Менять настройки операционной системы;
- Управлять службами и процессами;
- Настраивать роли и компоненты сервера;
- Устанавливать программное обеспечение;
- Управлять установленным ПО через специальные интерфейсы;
- Встраивать исполняемые компоненты в сторонние программы;
- Создавать сценарии для автоматизации задач администрирования;
- Работать с файловой системой, реестром Windows, хранилищем сертификатов и т.д.
Оболочка и среда разработки
Существует Windows PowerShell в двух ипостасях: помимо эмулятора консоли с командной оболочкой есть интегрированная среда сценариев (Integrated Scripting Environment — ISE). Чтобы получить доступ к интерфейсу командной строки достаточно выбрать соответствующий ярлык в меню Windows или запустить powershell.exe из меню «Выполнить». На экране появится синее окошко, заметно отличающееся по возможностям от допотопного cmd.exe. Там есть автодополнение и другие фишки, привычные пользователям командных оболочек для Unix-систем.
Для работы с оболочкой нужно запомнить некоторые сочетания клавиш:
- Стрелки вверх и вниз прокручивают историю для повтора ранее набранных команд;
- Стрелка вправо в конце строки перенабирает предыдущую команду посимвольно;
- Ctrl+Home удаляет набранный текст от позиции курсора до начала строки;
- Ctrl+End удаляет текст от курсора до конца строки.
F7 показывает окно с набранными командами и позволяет выбрать одну из них. В консоли также работает выделение текста мышью, копипаст, позиционирование курсора, удаление, backspace — все как мы любим.
Windows PowerShell ISE является полноценной средой разработки с поддерживающим вкладки и подсветку синтаксиса редактором кода, конструктором команд, встроенным отладчиком и другими программистскими радостями. Если в редакторе среды разработки после имени команды написать знак дефис, вы получите в выпадающем списке все доступные параметры с указанием типа. Запустить PowerShell ISE можно либо через ярлык из системного меню, либо с помощью исполняемого файла powershell_ise.exe.
Командлеты
В Windows PowerShell появились т.н. командлеты (cmdlets). Это специализированные классы .NET, в которые заложена разнообразная функциональность. Именуются они по принципу «Действие-Объект» (или «Глагол-Существительное, если вам так больше нравится), а разделенная дефисом связка напоминает сказуемое и подлежащее в предложениях естественных языков. Например, Get-Help буквально означает «Получить-Помощь» или в контексте PowerShell: «Показать-Справку». По сути это аналог команды man в Unix-системах и мануалы в PowerShell нужно запрашивать именно так, а не вызывая командлеты с ключом —help или /?.. Не стоит забывать и об онлайн-документации по PowerShell: у Microsoft она достаточно подробная.
Помимо Get в командлетах для обозначения действий используются и другие глаголы (и не только глаголы, строго говоря). В списке ниже мы приведем несколько примеров:
Add
— добавить;
Clear
— очистить;
Enable
— включить;
Disable
— выключить;
New
— создать;
Remove
— удалить;
Set
— задать;
Start
— запустить;
Stop
— остановить;
Export
— экспортировать;
Import
— импортировать.
Есть системные, пользовательские и опциональные командлеты: в результате выполнения все они возвращают объект или массив объектов. К регистру они не чувствительны, т.е. с точки зрения интерпретатора команд нет разницы между Get-Help и get-help. Для разделения используется символ ‘;’, но ставить его обязательно только если в одной строке выполняется несколько командлетов.
Командлеты Windows PowerShell группируются в модули (NetTCPIP, Hyper-V и т.д.), а для поиска по объекту и действию существует командлет Get-Command. Показать справку по нему можно так:
Get-Help Get-Command
По умолчанию команда отображает краткую справку, но в командлеты при необходимости передаются параметры (аргументы). С их помощью можно, например, получить детальную (параметр -Detailed) или полную (параметр -Full) справку, а также вывести на экран примеры (параметр -Examples):
Get-Help Get-Command -Examples
Справка в Windows PowerShell обновляется командлетом Update-Help. Если строка команд получается слишком длинной, аргументы командлета можно перенести на следующую, написав служебный символ ‘`’ и нажав Enter — просто закончить писать команду на одной строке и продолжить на другой не получится.
Ниже приведем несколько примеров распространенных командлетов:
Get-Process
— показать запущенные в системе процессы;
Get-Service
— показать службы и их статус;
Get-Content
— вывести содержимое файла.
Для часто используемых командлетов и внешних утилит в Windows PowerShell есть короткие синонимы — алиасы (от англ. Alias). Например, dir — алиас Get-ChildItem. Есть в списке синонимов и аналоги команд из Unix-систем (ls, ps и т.д.), а командлет Get-Help вызывается командой help. Полный список синонимов можно посмотреть с помощью командлета Get-Alias:
Сценарии, функции, модули и язык PowerShell
Скрипты Windows PowerShell хранятся в виде обычных текстовых файлов с расширением .ps1. Запустить их двойным кликом нельзя: нужно правой кнопкой мыши вызвать контекстное меню и выбрать пункт «Запустить в PowerShell». Из консоли придется либо указать полный путь к скрипту, либо перейти в соответствующий каталог и написать имя файла. Запуск сценариев также ограничен системной политикой, а для проверки текущих настроек можно использовать командлет Get-ExecutionPolicy, который выдаст одно из следующих значений:
Restricted
— запуск сценариев запрещен (по умолчанию);
AllSigned
— разрешен только запуск подписанных доверенным разработчиком сценариев;
RemoteSigned
— разрешен запуск подписанных и собственных сценариев;
Unrestricted
— разрешен запуск любых сценариев.
У администратора есть два варианта действий. Наиболее безопасный предполагает подписание скриптов, но это довольно серьезное колдунство — мы будем разбираться с ним в следующих статьях. Сейчас пойдем по пути наименьшего сопротивления и поменяем политику:
Set-ExecutionPolicy RemoteSigned
PowerShell для этого придется запустить от имени администратора, хотя с помощью специального параметра можно изменить политику и для текущего пользователя.
Пишутся скрипты на объектно-ориентированном языке программирования, команды которого именуются по тому же принципу, что и рассмотренные ранее командлеты: «Действие-Объект» («Глагол-Существительное»). Основное его предназначение — автоматизация задач администрирования, но это полноценный интерпретируемый язык, в котором есть все необходимые конструкции: условный переход, циклы, переменные, массивы, объекты, обработка ошибок и т.д. Для написания сценариев годится любой текстовый редактор, но удобнее всего запустить Windows PowerShell ISE.
В скрипт можно передавать параметры, делать их обязательными, а также задавать значения по умолчанию. Кроме того Windows PowerShell позволяет создать функции и вызывать их точно так же, как и командлеты: для этого используется конструкция Function и фигурные скобки. Сценарий с функциями называется модулем и имеет расширение .psm1. Модули должны храниться в каталогах, определенных в переменных окружения PowerShell. Посмотреть их можно при помощи следующей команды:
Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize
Конвейеры
В последнем примере мы применили знакомую пользователям оболочек для Unix-систем конструкцию. В Windows PowerShell вертикальная черта также позволяет передать выход одной команды на вход другой, но в реализации конвейера есть и существенная разница: речь здесь идет уже не о наборе символов или каком-то тексте. Встроенные командлеты или пользовательские функции возвращают объекты или массивы объектов, а также могут получать их на входе. Как в Bourne shell и его многочисленных последователях, в PowerShell с помощью конвейера упрощается выполнение сложных задач.
Простейший пример конвейера выглядит так:
Get-Service | Sort-Object -property Status
Сначала выполняется командлет Get-Service, а потом все полученные им службы передаются на сортировку по свойству Status командлету Sort-Object. В какой именно аргумент передается результат работы предыдущего участка конвейера, зависит от его типа — обычно это InputObject. Подробнее этот вопрос будет рассматриваться в посвященной языку программирования PowerShell статье.
При желании цепочку можно продолжить и передать результат работы Sort-Object еще одному командлету (выполняться они будут слева направо). Кстати, пользователям Windows доступна и привычная всем юниксоидам конструкция для постраничного вывода:
Get-Service | Sort-Object -property Status | more
Запуск задач в фоновом режиме
Довольно часто бывает нужно запустить некую команду в фоне, чтобы не дожидаться результата ее выполнения в сессии оболочки. В Windows PowerShell есть несколько командлетов на такой случай:
Start-Job
— запуск фоновой задачи;
Stop-Job
— остановка фоновой задачи;
Get-Job
— просмотр списка фоновых задач;
Receive-Job
— просмотр результата выполнения фоновой задачи;
Remove-Job
— удаление фоновой задачи;
Wait-Job
— перевод фоновой задачи обратно в консоль.
Для запуска фоновой задачи мы используем командлет Start-Job и в фигурных скобках указываем команду или набор команд:
Start-Job {Get-Service}
Фоновыми задачами в Windows PowerShell можно манипулировать, зная их имена. Для начала научимся их отображать:
Get-Job
Теперь покажем результат работы задания Job1:
Receive-Job Job1 | more
Всё довольно просто.
Удаленное выполнение команд
Windows PowerShell позволяет выполнять команды и сценарии не только на локальном, но и на удаленном компьютере и даже на целой группе машин. Для этого существует несколько способов:
- У многих командлетов есть параметр
-ComputerName
, но таким способом не получится, например, создать конвейер; - Командлет
Enter-PSSession
позволяет создать на удаленной машине интерактивный сеанс; - С помощью командлета
Invoke-Command
можно выполнять команды или сценарии на одном или нескольких удаленных компьютерах.
Версии PowerShell
С момента первого релиза в 2006 году PowerShell серьезно изменился. Инструмент доступен для множества систем, работающих на разных аппаратных платформах (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux и OS X. Последний релиз 6.2 выпущен 10 января 2018 года. Написанные для более ранних версий скрипты с высокой вероятностью будут работать в более поздних, а вот с обратным переносом могут возникнуть проблемы, поскольку за годы развития в PowerShell появилось большое количество новых командлетов. Узнать версию установленной на компьютере командной оболочки можно с помощью свойства PSVersion встроенной переменной $PSVersionTable:
$PSVersionTable.PSVersion
Также можно воспользоваться командлетом:
Get-Variable -Name PSVersionTable –ValueOnly
То же самое делается и с помощью командлета Get-Host. На самом деле вариантов множество, но для их применения нужно изучить язык программирования PowerShell, чем мы и займемся в следующей статье.
Итоги
Корпорации Microsoft удалось создать действительно мощную командную оболочку с удобной интегрированной средой для разработки скриптов. От привычных нам по миру Unix средств ее отличает глубокая интеграция с операционными системами семейства Windows, а также с программным обеспечением для них и платформой .NET Core. PowerShell можно назвать объектно ориентированной оболочкой, потому что командлеты и пользовательские функции возвращают объекты или массивы объектов и могут получать их на входе. Думаем, этим инструментом должны владеть все администраторы серверов на Windows: прошло время, когда они могли обойтись без командной строки. Продвинутая консольная оболочка особенно необходима на наших недорогих VPS, работающих под управлением Windows Server Core, но это уже совсем другая история.
Часть 2: введение в язык программирования Windows PowerShell
Часть 3: передача параметров в скрипты и функции, создание командлетов
Часть 4: Работа с объектами, собственные классы
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какие темы стоит в первую очередь затронуть в следующих статьях цикла?
54.1% Программирование в PowerShell165
40% Функции и модули PowerShell122
21.64% Как подписывать собственные скрипты?66
9.84% Работа с хранилищами через поставщиков (providers)30
54.75% Автоматизация администрирования компьютеров с помощью PowerShell167
29.51% Управление программным обеспечением и встраивание исполняемых компонентов PowerShell в сторонние продукты90
Проголосовали 305 пользователей. Воздержались 56 пользователей.
Первые версии Linux- и Unix-дистрибутивов традиционно управлялись при помощи командной строки. Несмотря на то, что со временем были выпущены различные графические оболочки, такие как GNOME, KDE, Cinnamon, XFCE, Linux стал прочно ассоциироваться с управлением через терминал. В то же время операционные системы семейства Windows ассоциируются именно с использованием графического интерфейса. Однако, существует способ, при котором можно управлять ОС Windows из командной оболочки, — с помощью инструмента PowerShell. Сегодня мы рассмотрим синтаксис и основы работы с PowerShell.
PowerShell — это мощная кросс-платформенная среда автоматизации и управления конфигурациями, разработанная корпорацией Microsoft. PowerShell объединяет в себе командную оболочку и язык сценариев, что позволяет выполнять административные задачи, автоматизировать процессы и управлять системой Windows.
История развития PowerShell: от Monad до современной версии
История PowerShell берет свои корни в начале 2000-х годов, когда Microsoft решила создать более мощную и продвинутую командную оболочку для Windows, взамен устаревшей cmd
.
В 2002 году Microsoft предложила концепцию объектно-ориентированной оболочки, которая должна была заменить командный процессор Windows. Так родился проект Monad. Среди ключевых особенностей Monad можно выделить следующие:
- Использование объектов вместо простого текстового ввода/вывода, в отличие от Unix-оболочек.
- Единый подход к управлению локальными и удаленными системами.
- Глубокая интеграция с .NET Framework.
- Конвейерная (pipeline) обработка данных с передачей объектов, а не строк.
Впервые широкой публике Monad был представлен в 2003 году, а в 2005 году вышла первая публичная бета-версия. Однако после выхода операционной системы Windows Vista Microsoft решила сменить название c Monad на привычное нам сегодня PowerShell.
В ноябре 2006 года Microsoft выпустила Windows PowerShell под версией 1.0, которая включала в себя полную интеграцию с .NET Framework, поддержку Cmdlets (небольшие команды, работающие с объектами) и интеграцию с WMI (Windows Management Instrumentation). Однако PowerShell версии 1.0 еще не был предустановлен в Windows и поставлялся как отдельный компонент.
В 2009 году была выпущена версия 2.0, в которую были интегрированы такие функции, как удаленное выполнение команд и фоновое выполнение задач, добавлена поддержка модулей для расширения функционала и улучшен обработчик ошибок. Именно с версией 2.0 PowerShell был интегрирован в дистрибутивы Windows, начиная с Windows 7 и Windows Server 2008 R2.
С тех пор было выпущено еще 6 основных релизов:
- PowerShell 2.0 (2009)
- PowerShell 3.0 (2012)
- PowerShell 4.0 (2013)
- PowerShell 5.0 (2016)
- PowerShell Core 6.0 (2016–2020)
- PowerShell 7 (2020)
На момент написания статьи актуальной является версия 7.5.0.
Архитектура и принципы работы PowerShell
Архитектура PowerShell
Архитектура PowerShell основана на следующих компонентах:
- Командная оболочка
Представляет собой интерактивную командную строку, где пользователь может вводить команды для управления операционной системой и ее объектами.
- Язык сценариев
PowerShell использует свой собственный язык сценариев, который сочетает в себе возможности командной строки и полноценного языка программирования. Язык сценариев поддерживает переменные, циклы, условия, функции и модули.
- Платформа .NET
PowerShell построен на модульной платформе .NET, что позволяет ему взаимодействовать с объектами .NET и использовать их методы и свойства.
- Модули и провайдеры
Модули — это пакеты, содержащие команды и функции. Позволяют расширять функциональность PowerShell. Провайдеры — это компоненты, которые предоставляют доступ к данным в различных хранилищах (например, файловая система, реестр, переменные среды).
Принципы работы PowerShell
Принцип работы PowerShell основан на объектно-ориентированном подходе — в отличие от традиционных командных оболочек, которые работают с текстом, PowerShell работает с объектами. Каждая команда возвращает объект, который содержит свойства и методы. Это позволяет легко обрабатывать данные, передавать их между командами и использовать в скриптах.
Одной из мощных особенностей PowerShell является возможность передачи вывода одной команды (объектов) непосредственно в другую с помощью символа |
. Благодаря этому можно строить цепочки команд, где каждая команда обрабатывает или преобразует объекты, которые передаются дальше по цепочке.
Отличия PowerShell от командной строки (CMD)
Несмотря на схожесть, PowerShell и командная строка (CMD) — это два разных инструмента. PowerShell значительно мощнее и функциональнее обычной командной строки Windows. Основные отличия заключаются в следующем:
- Функционал
CMD поддерживает минимальный и ограниченный набор команд. Также с помощью CMD можно запускать скрипты с расширением .bat
. В свою очередь, PowerShell является объектно-ориентированной оболочкой и скриптовым языком и основан на модульной платформе .NET.
С помощью PowerShell можно выполнять как простые действия, связанные, например, с файлами и пакетами, так и сложные задачи управления реестром, службами, процессами и облачными ресурсами.
- Принцип работы
CMD работает с текстовыми командами (cd
, dir
, copy
, del
и т. д.) и обрабатывает строки с командами дальнейшей передачей в стандартный вывод.
PowerShell работает с объектами .NET, которые называются командлетами (cmdlets, например Get-Process
, Get-Service
, Stop-Process
и т. д.), что позволяет передавать сложные структуры данных между командами без необходимости парсинга текста.
- Автоматизация и запуск скриптов
С помощью CMD можно запускать скрипты с расширением .bat
, однако они ограничены в возможностях.
При помощи PowerShell можно запускать скрипты с расширением .ps1
, которые могут выполнять сложные операции, а также работать с API, базами данных и облачными сервисами.
vds
Установка PowerShell на Windows
Несмотря на то, что командная строка (cmd) и Powershell уже предустановлены во всех последних версиях Windows, PowerShell можно установить отдельно.
Отдельная установка может понадобиться, если предустановленная версия отличается от последней доступной актуальной версии.
Установить PowerShell в ОС Windows можно тремя разными способами:
- Через Microsoft Store (только для ОС Windows 10 и Windows 11).
- При помощи установочного файла с расширением
.msi
. - С помощью утилиты
winget
(winget
должен быть установлен отдельно).
Microsoft Store
Данный метод установки поддерживается только на Windows 10 и Windows 11. Процесс установки для двух дистрибутивов идентичен.
- Запускаем приложение Microsoft Store и в поиске вводим «powershell». Существует 2 версии PowerShell — Обычная (стабильная) и Preview. Версия Preview является тестовой и может содержать ошибки, однако она позволяет ознакомиться с новым функционалом, который еще не доступен в обычной (стабильной) версии.
Мы установим обычную стабильную версию:
- Для установки нажимаем на кнопку «Получить» и дожидаемся завершения установочного процесса:
Для запуска введите «powershell» в поиске Windows.
Также стоит обратить внимание, что при установке старая версия PowerShell не будет удалена. Чтобы отличить новую установленную версию от старой, достаточно посмотреть на имя приложения — новая версия называется PowerShell, а старая версия (она же предустановленная) называется Windows PowerShell:
MSI-пакет
Это более универсальный способ установки, так как подходит для более широкого спектра дистрибутивов, включая Windows 10 сборки 1607 и выше, Windows 11, Windows Server 2016 и выше.
- Переходим на сайт «Майкрософт» и выбираем необходимый установщик в зависимости от используемой архитектуры — 64-битная, 86 (32-битная) или arm64:
- Далее запускаем скачанный файл и нажимаем на кнопку «Next».
- Выбираем место на диске куда будет установлен PowerShell или оставляем значение по умолчанию.
- При необходимости выбираем дополнительные опции:
-
- Add PowerShell to Path Environment Variable — добавляет полный путь до исполняемого файла PowerShell в системную переменную окружения PATH.
- Register Windows Event Logging Manifest — регистрирует событийный манифест (
PowerShellCore.EventManifest.dll
) в системе, что позволяет логировать ошибки и события PowerShell в «Просмотре событий Windows» (Event Viewer). - Enable PowerShell remoting — включает функцию PowerShell Remoting для управления компьютером удаленно при помощи WSMan (WinRM).
- Disable Telemetry — отключает сбор телеметрии.
- Add ‘Open here’ context menus to Explorer — добавляет пункт «Открыть в PowerShell» в контекстное меню проводника.
- Add ‘Run with PowerShell 7’ context menu for PowerShell files — добавляет пункт «Запуск с PowerShell 7» (Run with PowerShell 7) в контекстное меню для
.ps1
-файлов.
- Далее установщик предложит включить использование службы Microsoft Update для получения актуальной версии PowerShell. Можно как согласиться, так и полностью отказаться от данной службы:
- На последнем шаге нажимаем на кнопку «Install, чтобы запустить процесс установки.
- После того как установка будет завершена, нажимаем на кнопку Finish».
Для запуска PowerShell необходимо ввести имя программы в поиске. Установленная версия будет содержать цифру основной версии и архитектуру, в то время как предустановленная версия содержит только название:
Так выглядит окно запущенного PowerShell:
Предустановленная версия PowerShell не будет удалена, что означает возможность использования обеих версий на одном компьютере.
winget
winget (Windows Package Manager) — это встроенный менеджер пакетов в Windows 10 и Windows 11, который позволяет легко устанавливать, обновлять и удалять программы через командную строку. Является аналогом apt
/ yum
/ dnf
в Linux-дистрибутивах.
По умолчанию winget
уже предустановлен в Windows 10 1809 (сборка 17763) и выше, а также во всех версиях Windows 11. Windows Server 2019 не поддерживается, однако возможна установка на Windows Server 2022. Чтобы проверить, установлен ли winget
в вашей версии Windows, необходимо выполнить следующую команду в PowerShell:
Get-AppPackage *Microsoft.DesktopAppInstaller*|select Name,PackageFullName
Если в ответ команда вернула имя пакета, как на скриншоте выше, то winget
уже установлен в системе. Если же winget
не установлен, его необходимо установить вручную:
- Переходим на страницу проекта в GitHub.
- Находим в разделе «Releases» последний релиз — с пометкой
latest
. В данном случае это релиз с номером 1.9.25200. Скачиваем файл с расширением.msixbundle
:
winget
входит в состав приложения «Установщик приложения», которое уже может быть установлено в вашей системе. Если при запуске установочного файла отображается сообщение, что такое приложение уже установлено, значит,winget
уже присутствует в системе:
- Если же «Установщик приложения» отсутствует, установите его вручную, следуя инструкциям на экране. После завершения установки можно проверить версию
winget
и убедиться, что программа была установлена:
winget --version
- Для установки PowerShell сначала выясним, какие версии доступны.
winget search Microsoft.PowerShell
Как и при установке из магазина Windows, доступны две версии: обычная (стабильная) и Preview (бета-версия).
- Установим обычную версию при помощи команды:
winget install --id Microsoft.PowerShell --source winget
Как и при использовании других методов установки, установка новой версии PowerShell через winget не удаляет старую версию утилиты.
Основы работы с PowerShell
Рассмотрим синтаксис PowerShell и работу с командлетами (cmdlets).
Командлеты (cmdlets)
В основу PowerShell заложена работа с командлетами.
Командлеты — это встроенные команды, используемые для выполнения различных задач, таких как управление файлами, процессами, службами, пользователями и сетевыми настройками.
Синтаксис командлетов следующий:
<глагол>-<существительное> [-Параметры]
Например:
Get-Process
— Получить список процессовGet-ChildItem -Path C:\Users
— Отобразить файлы и директории в каталогеC:\Users
.
При использовании командлетов в ответ они возвращают не просто текст, а объекты платформы .NET. Это предоставляет мощные возможности для обработки данных.
Переменные
Как и в любом другом языке программирования или командной оболочке, переменные в PowerShell предназначены для хранения различных объектов: строк, чисел, объектов, массивов, хэш-таблиц. Переменные обозначаются знаком $
.
Рассмотрим переменные на практике. Объявим две переменные: одну с именем myvar1
и содержащую строковой тип данных, и вторую — с именем myvar2
и содержащую числовой тип данных:
$myvar1 = “This is string variable”
$myvar2 = 32
Для вывода значения переменной используется оператор Write-Output
:
Write-Output $myvar1
Write-Output $myvar2
PowerShell автоматически определяет тип данных, но при желании его можно задавать явно:
[string]$myvar1 = “This is string variable”
[int]$myvar2 = 32
Помимо хранения строковых и числовых данных, в переменных можно хранить массивы и хэш-таблицы (они же словари).
Создадим переменную var-array
, в которой будет храниться массив цифр от 1 до 5:
$var_array = @(1, 2, 3, 4, 5)
Чтобы вывести значения объектов, хранящихся в массиве, необходимо написать имя переменной и в квадратных скобках указать порядковый номер объекта. Как и в других языках программирования, счет объектов начинается с 0, поэтому для вывода цифры 1 необходимо ввести 0:
$var_array[0]
Создадим другую переменную с именем var-hash
, в которой будет храниться хэш-таблица или словарь данных. Структура данных имеет вид: Ключ: Значение
.
$var_hash = @{ "ID" = 1; "Name" = "Alex" }
Для вывода значений необходимо указать имя переменной и ключ, например:
$var_hash["Name"]
Также с переменными можно производить различные арифметические операции, например, сложение:
$first_num = 20
$second_num = 30
$sum = $first_num + $second_num
Write-Output $sum
Операторы
В PowerShell присутствуют следующие операторы:
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Операторы массивов
Рассмотрим их на практике.
Арифметические операторы
Используются для математических вычислений. В таблице ниже перечислены все арифметические операторы, доступные в PowerShell:
Оператор |
Описание |
+ |
Сложение |
— |
Вычитание |
* |
Умножение |
/ |
Деление |
% |
Остаток от деления |
$a = 15
$b = 10
$c = $a + $b # Сложение
$d = $a - $b # Вычитание
$e = $a * $b # Умножение
$f = $a / $b # Деление
$g = $a % $b # Остаток от деления
Write-Output $c
Write-Output $d
Write-Output $e
Write-Output $f
Write-Output $g
Операторы сравнения
Используются для проверки условий. В таблице ниже перечислены все операторы сравнения, доступные в PowerShell:
Оператор |
Описание |
-eq |
Равно |
-ne |
Не равно |
-gt |
Больше |
-ge |
Больше или равно |
-lt |
Меньше |
-le |
Меньше или равно |
$c = 25
$d = 45
$c -eq $d # Равно (Equal)
$c -ne $d # Не равно (Not Equal)
$c -gt $d # Больше (Greater Than)
$c -lt $d # Меньше (Less Than)
$c -ge $d # Больше или равно (Greater or Equal)
$c -le $d # Меньше или равно (Less or Equal)
Логические операторы
Применяются в условиях. В таблице ниже перечислены все логические операторы, доступные в PowerShell:
Оператор |
Описание |
-and |
Логическое И |
-or |
Логическое ИЛИ |
-not или ! |
Логическое НЕ |
($a -gt 5) -and ($b -lt 10) # Логическое "И"
($a -gt 5) -or ($b -gt 10) # Логическое "ИЛИ"
-not ($a -eq $b) # Логическое "НЕ"
Условные конструкции
Условные конструкции в PowerShell — это механизмы, позволяющие выполнять код в зависимости от выполнения определенных условий. Они позволяют программе принимать решения, что делает скрипты более гибкими в использовании.
Операторы if elseif else
Используются для выполнения кода в зависимости от условия. Рассмотрим использование операторов на примере ниже:
$number = 10
if ($number -gt 5) {
Write-Output "Число больше 5"
} elseif ($number -eq 5) {
Write-Output "Число равно 5"
} else {
Write-Output "Число меньше 5"
}
Циклы
Циклы используются для повторного выполнения блока кода, пока выполняется определенное условие. В PowerShell есть несколько видов циклов:
for
— классический цикл с итератором.foreach
— перебирает элементы массива или коллекции.while
— выполняется, пока условие истинно.do-while
— выполняется хотя бы один раз, затем проверяет условие.do-until
— выполняется, пока условие ложно.
Цикл for
Используется, когда известно количество итераций.
for ($i=0; $i -lt 5; $i++) {
Write-Output "Итерация $i"
}
Цикл while
Выполняется, пока условие остается True (пока условие истинно).
$count = 0
while ($count -lt 3) {
Write-Output "Счетчик: $count"
$count++
}
Цикл foreach
Используется для перебора элементов массива.
$numbers = @(1,2,3,4,5)
foreach ($num in $numbers) {
Write-Output "Число: $num"
}
Цикл do-while
Гарантирует хотя бы одну итерацию (сначала выполняет, потом проверяет).
$i = 0
do {
Write-Output "Число $i"
$i++
} while ($i -lt 5)
Цикл do-until
Выполняется до тех пор, пока условие не станет True.
$i = 1
do {
Write-Output "Итерация: $i"
$i++
} until ($i -gt 3)
Функции
Функции в PowerShell позволяют объединять блоки кода и многократно их использовать. Они могут принимать параметры и возвращать значения.
Функции создаются с помощью ключевого слова function
:
function SayHello {
Write-Output "Привет, PowerShell!"
}
SayHello
Функция с параметром
function Greet($name) {
Write-Output "Привет, $name!"
}
Greet "Иван"
Функция с несколькими параметрами
function SumNumbers($a, $b) {
return $a + $b
}
$result = SumNumbers 5 10
Write-Output "Сумма: $result"
Работа с файлами и директориями
PowerShell отлично подходит для работы с файлами и директориями. Рассмотрим некоторые полезные команды для работы в ОС Windows.
- Получение списка файлов
Get-ChildItem C:\Users
- Создание папки
New-Item -Path "C:\TestFolder" -ItemType Directory
- Создание файла
New-Item -Path "C:\TestFolder\file.txt" -ItemType File
- Запись в файл
Set-Content -Path "C:\TestFolder\file.txt" -Value "Hello, world!"
- Чтение файла
Get-Content "C:\TestFolder\file.txt"
- Копирование файла
Copy-Item -Path "C:\TestFolder\file.txt" -Destination "C:\Users\file.txt"
- Перемещение файла
Для выполнения команды ниже PowerShell необходимо запустить с правами администратора, иначе при выполнении будет ошибка.
Move-Item -Path "C:\TestFolder\file.txt" -Destination "C:\Windows\file.txt"
- Удаление файла
Remove-Item -Path "C:\TestFolder\file.txt"
Работа с процессами и службами
- Получение списка процессов
Get-Process
- Завершение процесса
Например, завершим процесс «Блокнот»:
Stop-Process -Name notepad -Force
- Получение списка служб
Get-Service
- Запуск службы
Для примера запустим службу wuauserv
:
Start-Service -Name wuauserv
- Остановка службы
Stop-Service -Name wuauserv
Автоматизация задач с помощью PowerShell
PowerShell идеально подходит для автоматизации многих задач в Windows. Рассмотрим несколько примеров.
Мониторинг процесса и его автоматический перезапуск
Первая задача, которую мы рассмотрим, заключается в отслеживании процесса и его автоматическом перезапуске, если он перестанет отвечать:
$processName = "notepad"
while ($true) {
if (-not (Get-Process -Name $processName -ErrorAction SilentlyContinue)) {
Write-Output "$processName не работает! Перезапуск..."
Start-Process $processName
}
Start-Sleep -Seconds 10
}
Скрипт выше проверяет, запущен ли процесс notepad
(«Блокнот»). Если процесс не найден, то запускает его и проверяет его статус каждые 10 секунд.
Удаление старых файлов
Удаление старых и неактуальных файлов может освободить место на диске. В примере ниже скрипт удаляет файлы, которые старше одного дня, в директории C:\TestFolder
:
$folder = "C:\TestFolder"
$days = 1
$limit = (Get-Date).AddDays(-$days)
Get-ChildItem -Path $folder -Recurse | Where-Object { $_.LastWriteTime -lt $limit } | Remove-Item -Force
Write-Output "Удалены файлы старше $days дней"
Запуск процесса по расписанию
Настроим автоматический запуск программы «Блокнот» каждый день в 9:00 утра:
$action = New-ScheduledTaskAction -Execute "notepad.exe"
$trigger = New-ScheduledTaskTrigger -Daily -At 9am
Register-ScheduledTask -TaskName "OpenNotepad" -Action $action -Trigger $trigger
Write-Output "Задача добавлена в планировщик!"
Безопасность в PowerShell
PowerShell обладает встроенным функционалом по обеспечению безопасности. Рассмотрим его более подробно.
Политики выполнения (Execution Policies)
По умолчанию PowerShell блокирует выполнение скриптов. Чтобы проверить текущую политику, необходимо использовать команду:
Get-ExecutionPolicy
Типы политик встроенных в PowerShell:
Restricted
— Запрещено выполнять скрипты (по умолчанию).AllSigned
— Разрешает только подписанные скрипты.RemoteSigned
— Локальные скрипты выполняются, загруженные из сети должны быть подписаны.Unrestricted
— Можно запускать любые скрипты, но при запуске загруженных файлов появляется предупреждение.Bypass
— Полностью отключает защиту (НЕ рекомендуется).
Для изменения политики требуются права администратора. Команда для изменения следующая:
Set-ExecutionPolicy Unrestricted
Подписание скриптов
Чтобы предотвратить запуск вредоносного кода в скриптах, в PowerShell присутствует возможность подписания скриптов.
Заранее создаем тестовый скрипт в директории C:\TestFolder
со следующим содержимым:
$path = "C:\Users"
if (Test-Path $path) {
try {
Get-ChildItem -Path $path -Force
} catch {
Write-Host "Access denied to $path"
}
} else {
Write-Host "The path does not exist: $path"
}
Сохраняем файл с именем и расширением script.ps1
.
Далее подписываем скрипт:
- Создаем самоподписанный сертификат:
New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=MyPowerShellCert" -KeyUsage DigitalSignature -KeySpec Signature -NotAfter (Get-Date).AddYears(5) -CertStoreLocation "Cert:\CurrentUser\My"
- Выведем данные сертификата. В частности, нам необходим его Thumbprint (отпечаток), который пригодится далее.
Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
- Теперь необходимо добавить сгенерированный сертификат в папку корневых сертификатов. Открываем «Диспетчер сертификатов» через PowerShell:
certmgr.msc
- Переходим в раздел «Personal» (сертификаты пользователя), кликаем по нужному сертификату правой кнопкой мыши и выбираем пункт «Export» (Экспорт):
- В открывшемся меню нажимаем на кнопку «Next». Выбираем параметр «Не экспортировать закрытый ключ»:
Выбираем формат Base-64:
Нажимаем «Next».
Дальше нажимаем на кнопку «Browse» и выбираем директорию, куда будет сохранен сертификат.
Нажимаем «Finish», чтобы завершить экспорт.
- Открываем сертификат и нажимаем на кнопку «Install Certificate…»:
Выбираем пункт для текущего пользователя:
Для установки в конкретное хранилище сертификатов выбираем пункт «Place all certificates in the following store»:
Выбираем «Trusted Root Certification Authorities»:
Завершаем установку сертификата нажатием на кнопку «Finish».
- При появлении окна с предупреждением нажимаем «Yes»:
- Подписываем скрипт
script.ps1
, размещенный в директорииC:\TestFolder.
Для этого вводим ранее полученный отпечаток после опцииThumbprint -eq
.
$cert = Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object { $_.Thumbprint -eq "B8D1657CD8D09A2B80BEFEEF378C17DA2FE41352" }
Set-AuthenticodeSignature -FilePath "C:\TestFolder\script.ps1" -Certificate $cert
- Проверяем, что скрипт был успешно подписан:
Get-AuthenticodeSignature -FilePath "C:\TestFolder\script.ps1"
Подпись был успешно создана.
- Запустим скрипт:
Теперь попробуем запустить неподписанный скрипт при использовании политики AllSigned
, разрешающей запуск только подписанных скриптов.
Меняем политику на AllSigned
:
Set-ExecutionPolicy AllSigned -Scope CurrentUser
Создаем новый скрипт и попытаемся его запустить:
Система вернула ошибку, так как скрипт не подписан.
Заключение
Сегодня мы познакомились с командной оболочкой PowerShell и ее синтаксисом. PowerShell — это мощный инструмент автоматизации в операционных системах Windows, который упрощает работу со множеством задач от создания резервных копий до планировщика задач и работы с файлами.
Рассказываем про Windows PowerShell — технологию для автоматизации рутинных задач, пришедшую на смену bat-файлам.
Работа с консолью Microsoft Windows
Ранее мы рассматривали командные интерпретаторы COMMAND.CMD и CMD.EXE, обеспечивающие автоматизацию задач в семействе операционных систем Microsoft Windows. Фактически данные интерпретаторы не получали обновлений с начала 2000-х годов и существуют в современных операционных системах для обеспечения совместимости.
Подробнее о bat-файлах →
Хотя современные операционные системы предлагают богатый на функции графический интерфейс, ряд однотипных задач быстрее решается через консоль. Более того, серверные редакции ОС не предоставляют графический интерфейс по умолчанию, поэтому интерпретатор командной строки является неотъемлемой частью практически любой операционной системы.
Помимо отсутствия обновлений, CMD.EXE имеет ограниченный функционал. Он не позволяет писать сложную логику и полностью отказаться от использования графического интерфейса. Корпорация Microsoft пыталась решить эти проблемы с помощью инструмента под названием Microsoft Script Host, который имел интеграцию со скриптовыми языками JScript и VBScript.
Однако Microsoft Script Host имел ряд собственных проблем:
- плохо интегрировался с командной оболочкой операционной системы,
- сопровождался скудной документацией,
- разные версии Windows имели командные интерпретаторы с разным набором команд,
- инструмент становился отличным вектором для атак.
Все это побуждало Microsoft сделать командный интерпретатор с нуля.
Новый командный интерпретатор Windows PowerShell
В 2003 году корпорация Microsoft начала разработку нового инструмента — Microsoft Shell (MSH), или Monad. Спустя три года и три бета-версии Monad была официально выпущена под новым названием Windows PowerShell 1.0 на Windows XP и Windows Vista. По ходу развития командная оболочка меняла свои названия на PowerShell Core и PowerShell.
При создании PowerShell разработчики задались целью создать инструмент, который позволил бы с легкостью использовать множество разнородных интерфейсов, предоставляемых операционной системой. Новый инструмент должен быть консистентным и легким для администратора, несмотря на количество технологий «под капотом». Например, PowerShell предоставляет доступ к API .NET-фреймворка, но не требует от администратора знания .NET.
Как и любой командный интерпретатор, PowerShell умеет запускать исполняемые файлы и имеет встроенные команды. Однако у PowerShell встроенные команды имеют название «командлет», появившееся от английского cmdlet.
Что такое командлет?
В основе взаимодействия с PowerShell лежат объекты, а не текст, как у CMD.EXE и командных интерпретаторов в *nix-системах. Такой подход меняет взгляд на организацию встроенных команд.
Командлет — это встроенная команда в PowerShell, выполняющая одну задачу и реализованная на .NET. Имя командлета соответствует правилу Глагол-Существительное, которое можно читать как Действие-Объект.
Самый важный командлет, о котором необходимо узнать в первую очередь, — Get-Help. Он отображает справочную информацию о PowerShell и командлетах.
# Получить общую справку по PowerShell
Get-Help
# Получить справку по командлету Get-Content
Get-Help Get-Content
# Получить справку по командлету Get-Help
Get-Help Get-Help
Если вам кажется, что использовать большие буквы в названии командлетов — это перебор, для вас есть хорошие новости. Все команды в PowerShell являются регистронезависимыми. Иными словами, перечисленные ниже написания эквивалентны:
Get-Help Get-Help
get-help get-help
GET-HELP GET-HELP
GeT-hElP gEt-HeLp
Хотя Windows PowerShell нечувствительна к регистру в именах и параметрах, внешние программы, которые вызываются через оболочку, могут не обладать такими возможностями.
В первой версии PowerShell все командлеты были реализованы на .NET, но начиная с версии 2.0 появилась возможность писать командлеты с использованием синтаксиса PowerShell.
Основы программы PowerShell
Перейдем к практике. PowerShell является кроссплатформенным инструментом и может быть запущена на Linux и macOS, но в данной статье будет рассматриваться только «родное» окружение — Windows.
Как запустить?
Запуск PowerShell можно произвести из меню поиска около кнопки Пуск, набрав powershell.
Аналогично можно запустить PowerShell через диалоговое окно Выполнить…, которое открывается через сочетание клавиш Windows + R.
Если по каким-то причинам у вас не установлен PowerShell, то необходимо сделать это, следуя инструкции в базе знаний Microsoft.
В случае успеха откроется синее окно. Windows PowerShell готов к вашим командам.
Синтаксис
Синтаксис PowerShell похож на синтаксис других командных интерпретаторов. Сначала команда, а затем аргументы команды. Несколько команд в одной строке разделяются точкой с запятой. Рассмотрим на примере.
Get-Help Get-Command -Online
Данная команда откроет в браузере вкладку с описанием командлета Get-Command в базе знаний Microsoft. Разберем подробнее:
- Get-Help – команда, в данном случае командлет,
- Get-Command – первый позиционный аргумент, который передается командлету,
- -Online – ключ, то есть именованный аргумент.
Обратите внимание, что в CMD.EXE именованные аргументы, то есть ключи, для встроенных команд начинались с символа слэш (/). У командлетов аргументы начинаются со знака минус. Использование знака / в PowerShell недопустимо и будет интерпретировано как ошибка.
Хотя PowerShell во многом похож на CMD.EXE, он имеет несколько существенных отличий. Во-первых, обращение к переменным производится через символ доллар, а не через знак процента. Во-вторых, PowerShell позволяет определять функции. Например:
function Get-Version {
$PSVersionTable.PSVersion
}
Данный код объявит функцию Get-Version, которая обращается к системной переменной (объекту) PSVersionTable и возвращает значение поля PSVersion. Проще говоря, выводит версию PowerShell.
Именование командлетов может быть неочевидным для администраторов с опытом работы с другими командными интерпретаторами. Поэтому рассмотрим основные команды Windows PowerShell.
Основные команды языка Windows PowerShell
В следующей таблице перечислены основные команды PowerShell и их аналоги в *nix-подобных системах и CMD.EXE. В версии PowerShell 7 количество командлетов превышает полторы тысячи!
Командлет (псевдоним) | Команда в *nix | Команда в CMD.exe | Описание |
Get-Location (pwd) | pwd | Выводит путь до текущего каталога | |
Set-Location (cd) | cd | cd | Меняет текущий каталог |
Get-ChildItem (ls) | ls | dir | Выводит содержимое текущего каталога |
Get-ChildItem | find | find | Производит поиск файлов по заданным критериям |
Copy-Item (cp) | cp | cp | Копирует файл |
Remove-Item (rm) | rm | rm | Удаляет файл |
New-Item (mkdir) | mkdir | mkdir | Создает каталог |
New-Item | touch | Создает пустой файл | |
Get-Content (cat) | cat | Выводит файлы | |
Get-Content | tail | Выводит последние 10 строк | |
Where-Object | grep | Производит фильтрацию | |
Create-Volume Format-Volume |
mkfs | Форматирует раздел | |
Test-Connection | ping | ping.exe | Отправляет ICMP-запросы, «пингует» |
Get-Help (man) | man | help | Показывает справку |
После работы в консоли *nix командлет для популярного действия, смены каталога, выглядит громоздко и непривычно. К счастью, командлеты имеют псевдонимы (алиасы), которые могут не следовать правилу именования командлетов. Список известных псевдонимов можно получить с помощью командлета Get-Alias.
Хотя таблица, представленная выше, значительно облегчит назначение командлетов, не стоит ожидать от командлетов поведения как в *nix-системах. Так, например, в PowerShell командлет Get-Content создан для вывода содержимого одного файла на экран, в то время как на *nix-системах утилита cat изначально использовалась для конкатенации (процесса соединения) нескольких файлов с последующим выводом на экран.
Очевидно, что возможности PowerShell значительно больше, чем CMD.exe. Опытный администратор знает, что некоторые задачи из таблицы можно решить в CMD.exe, несмотря на отсутствие специальных команд. Однако эти команды требуют опыта или смекалки.
Отдельно хочется отметить командлет Test-Connection, который делает то же самое, что утилита ping, но не имеет такого алиса. Разница между утилитой и командлетом в формате вывода: утилита выводит текст, а командлет возвращает объект, который можно использовать в конвейерах.
Конвейер PowerShell: особенности и параметры
По своей задумке конвейеры в PowerShell не отличаются от конвейеров в *nix-системах: они перенаправляют вывод одной команды на ввод другой. Как отмечалось ранее, в PowerShell происходит взаимодействие не с текстом, а с объектами. При выводе на экран объект трансформируется в таблицу, чтобы человеку было удобнее читать, но не всегда таблица выводит все поля объекта.
Особенность конвейеров PowerShell заключается в том, что конвейер передает результат не целиком, а по одному объекту. Командлет Test-Connection выводит четыре объекта: по одному на каждый ICMP-запрос. Если подключить командлет к конвейеру, то можно увидеть подтверждение этому тезису. Воспользуемся командлетом Select-Object, чтобы выбрать колонку со временем запроса.
Test-Connection selectel.ru | Select-Object ‘Time(ms)’
После запуска данной команды можно наблюдать, как с некоторой задержкой печатаются пустые строки по одной.
Но как же так? Дело в том, что отображение объекта при выводе на экран не всегда соответствует имени поля в объекте. Чтобы получить полный список полей в объекте, необходимо вызвать командлет Get-Member.
PS C:\Users\sun> Test-connection selectel.ru | Get-Member
TypeName: System.Management.ManagementObject#root\cimv2\Win32_PingStatus
Name MemberType Definition
---- ---------- ----------
PSComputerName AliasProperty PSComputerName = __SERVER
Address Property string Address {get;set;}
BufferSize Property uint32 BufferSize {get;set;}
NoFragmentation Property bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property uint32 PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress Property string ProtocolAddress {get;set;}
ProtocolAddressResolved Property string ProtocolAddressResolved {get;set;}
RecordRoute Property uint32 RecordRoute {get;set;}
ReplyInconsistency Property bool ReplyInconsistency {get;set;}
ReplySize Property uint32 ReplySize {get;set;}
ResolveAddressNames Property bool ResolveAddressNames {get;set;}
ResponseTime Property uint32 ResponseTime {get;set;}
ResponseTimeToLive Property uint32 ResponseTimeToLive {get;set;}
RouteRecord Property string[] RouteRecord {get;set;}
RouteRecordResolved Property string[] RouteRecordResolved {get;set;}
SourceRoute Property string SourceRoute {get;set;}
SourceRouteType Property uint32 SourceRouteType {get;set;}
StatusCode Property uint32 StatusCode {get;set;}
Timeout Property uint32 Timeout {get;set;}
TimeStampRecord Property uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress Property string[] TimeStampRecordAddress {get;set;}
TimeStampRecordAddressResolved Property string[] TimeStampRecordAddressResolved {get;set;}
TimestampRoute Property uint32 TimestampRoute {get;set;}
TimeToLive Property uint32 TimeToLive {get;set;}
TypeofService Property uint32 TypeofService {get;set;}
__CLASS Property string __CLASS {get;set;}
__DERIVATION Property string[] __DERIVATION {get;set;}
__DYNASTY Property string __DYNASTY {get;set;}
__GENUS Property int __GENUS {get;set;}
__NAMESPACE Property string __NAMESPACE {get;set;}
__PATH Property string __PATH {get;set;}
__PROPERTY_COUNT Property int __PROPERTY_COUNT {get;set;}
__RELPATH Property string __RELPATH {get;set;}
__SERVER Property string __SERVER {get;set;}
__SUPERCLASS Property string __SUPERCLASS {get;set;}
ConvertFromDateTime ScriptMethod System.Object ConvertFromDateTime();
ConvertToDateTime ScriptMethod System.Object ConvertToDateTime();
IPV4Address ScriptProperty System.Object IPV4Address {get=$iphost = [System.Net.Dns]:...
IPV6Address ScriptProperty System.Object IPV6Address {get=$iphost = [System.Net.Dns]:...
Можно визуально оценить список и найти поле ResponseTime. Также в начале указан тип данного объекта, Win32_PingStatus, информацию о котором можно поискать в базе знаний Microsoft. В документации не только перечислены поля, но и их назначение. Таким образом, конечный вид конвейера будет таким:
Test-connection selectel.ru | Select-Object ResponseTime
Хотя PowerShell побуждает к интерактивной работе, его основное предназначение — автоматизировать рутинные задачи. Значит, необходимо писать скрипты.
Соберите сервер в конфигураторе под свои задачи. Или выберите из более 100 готовых.
Интегрированная среда разработки
Если вы запускали PowerShell через поиск, вероятно, вы могли заметить приложение Windows PowerShell ISE.
PowerShell-скрипты — это текстовые файлы с расширением .ps1.
Windows PowerShell ISE — это интегрированная среда сценариев PowerShell, включающая в себя:
- редактор PowerShell-скриптов с автодополнением,
- окно для интерактивного выполнения командлетов в скрипте,
- список доступных командлетов с поиском.
Обратите внимание, что модуль ISE предоставляет графический интерфейс для генерации аргументов командлета. Помимо генерации команд, в функции модуля также входит вызов «справочника» по командлетам, аналогичного Get-Help, только в графическом интерфейсе.
После написания своего первого PowerShell-скрипта вы столкнетесь с некоторыми ограничениями. Во-первых, файл с расширением ps1 нельзя запустить «двойным кликом» по файлу. Необходимо открыть контекстное меню с помощью правой клавиши мыши и выбрать Запустить с помощью PowerShell.
Во-вторых, скрипт не запустится со следующей ошибкой:
Невозможно загрузить файл C:\Users\sun\Documents\HelloWorld.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/
?LinkID=135170.
+ CategoryInfo : Ошибка безопасности: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess
По умолчанию запуск PowerShell-скриптов ограничен соответствующей политикой безопасности. Посмотреть текущее значение политики безопасности можно с помощью командлет Get-ExecutionPolicy:
PS C:\Users\sun> Get-ExecutionPolicy
Restricted
Список возможных значений:
- Restricted — запуск запрещен,
- AllSigned — разрешен только запуск подписанных доверенным разработчиком скриптов,
- RemoteSigned — разрешен запуск подписанных и собственных скриптов,
- Unrestricted — разрешен запуск любых скриптов.
По умолчанию стоит значение Restricted. В идеале необходимо подписывать скрипты, но для собственных нужд можно ограничиться значением RemoteSigned:
Set-ExecutionPolicy RemoteSigned
Для выполнения данной команды необходимо запустить PowerShell от имени администратора.
Выполнение задач в фоне
PowerShell позволяет выполнять задачи в фоновом режиме, эту функциональность обеспечивают командлеты с существительным Job:
- Start-Job — запустить команду или командлет в фоновом режиме,
- Get-Job — показать состояние фоновых команд,
- Wait-Job — дождаться завершения выполнения фоновой команды,
- Receive-Job — получить результат выполнения команды.
Командлет Start-Job возвращает информацию о запущенном фоновом задании. Идентификатор, обозначенный в поле Id, является уникальным для сессии PowerShell.
Настройка удаленного выполнения
PowerShell позволяет реализовать удаленное выполнение командлетов, скриптов, но только на платформе Windows. Для включения возможности удаленного управления необходимо выполнить командлет Enable-PSRemoting с правами администратора.
Командлет Enter-PSSession запустит удаленную интерактивную сессию, а Invoke-Command выполнит команду на одном или нескольких удаленных компьютерах.
PowerShell – актуальные версии программы
PowerShell — мощный инструмент, пришедший на смену пакетным файлам. Он более функциональный и современный, а документация и различные руководства Windows PowerShell по работе делают его подходящим как для начинающих, так и продолжающих пользователей. В тексте мы составили описание PowerShell, — рассмотрели основные возможности программы, понятия, связанные с ней, синтаксис PowerShell и структуру языка.
На момент написания статьи актуальная версия PowerShell — 7.2. Используйте этот текст в качестве краткого справочника по Windows PowerShell, администрирование систем со скриптами в этой программе будет довольно простым.
Командный интерфейс Windows — это всегда был неотъемлемой частью операционной системы.
Ключевая особенность оса заключается в возможности выполнения различных задач без использования графического интерфейса.
Отличие командного интерфейса от графического заключается в возможности автоматизации задач и управлении системой через скрипты.
Таким образом, командный интерфейс Windows позволяет ускорить работу системы и сократить время выполнения повторяющихся действий.
С помощью командного интерфейса можно работать с файлами, настраивать параметры системы и многое другое.
Но что делать, если встроенные команды Windows не удовлетворяют потребностям пользователя?
Командный интерфейс для управления операционной системой Windows
Подобно командному интерфейсу, PowerShell позволяет выполнять различные действия с помощью команд и скриптов. Однако его функционал гораздо шире, чем у привычной командной строки. PowerShell позволяет управлять службами, процессами, файлами, реестром и многим другим.
Особенностью PowerShell является возможность работы как с текстовыми строками, так и с объектами. Благодаря этому, пользователь может удобно обрабатывать данные и реализовывать более сложные сценарии.
Важное отличие PowerShell от других средств управления операционной системой — это возможность автоматизации рутины и выполнения повторяющихся задач. Благодаря скриптам на PowerShell, можно значительно ускорить процессы администрирования и повысить производительность работы системы.
Возможности PowerShell | Мощный инструмент управления Windows |
Преимущества | Гибкий и функциональный подход к автоматизации |
Используя PowerShell, администраторы могут более эффективно контролировать и настраивать систему, делая управление операционной системой Windows более удобным и продуктивным.
Основные принципы и понятия командной строки в Windows
Основные понятия, которые стоит знать при использовании командной строки в Windows, включают команды, параметры, аргументы и переменные. Команды представляют собой инструкции для операционной системы, которые указывают на выполнение определенного действия.
Параметры и аргументы могут дополнять команды, задавая им определенные параметры работы или объекты, над которыми нужно выполнить операцию. Переменные используются для хранения значений, которые могут быть использованы в командах.
При работе с командной строкой в Windows, важно помнить, что многие команды имеют свои дополнительные параметры, которые можно использовать для настройки работы команды или получения дополнительной информации. Например, при вызове команды dir можно указать параметры /a для отображения всех файлов, включая скрытые.
С использованием командной строки в Windows, можно выполнять различные задачи, такие как управление файлами и папками, настройку сетевых соединений, управление пользователями и группами, а также выполнение автоматизированных скриптов. Командная строка предоставляет удобный способ взаимодействия с операционной системой без использования графического интерфейса.
История создания и развития командного интерфейса PowerShell
В истории операционных систем Windows имеется специфический аспект – командный интерфейс. Этот аспект отличается от обычного графического интерфейса пользователя и предоставляет возможность взаимодействия с операционной системой через ввод команд прямо в консоли.
В начале развития Windows операционная система была снабжена командным интерфейсом под названием «Command Prompt», который работал на основе языка команд DOS. Но в процессе развития Windows потребовался более мощный и более гибкий инструмент для автоматизации административных задач.
Это потребовало разработки нового командного интерфейса, который стал известен как PowerShell. PowerShell появился в разработке Microsoft в начале 2000-х годов и был выпущен в качестве части операционной системы Windows.
Отличие PowerShell от предыдущих командных интерфейсов заключается в том, что он основан на .NET Framework, что позволяет выполнять сложные задачи автоматизации с использованием мощных средств, таких как объекты и целостная обработка ошибок.
- PowerShell объединил в себе возможности языка скриптов, как у Bash для Unix-систем, и инструменты обращения с объектами, характерные для языков программирования.
- Это позволило администраторам Windows создавать скрипты для автоматизации повседневных задач, управления конфигурацией систем и мониторинга состояния системы.
Благодаря своей мощности и гибкости, PowerShell с течением времени стал неотъемлемой частью администрирования Windows и активно используется специалистами по информационной безопасности, администраторами баз данных и системными инженерами по всему миру.
Функциональные возможности командной строки Windows
В OSА существует возможность автоматизировать ряд задач, управлять файлами и каталогами, а также выполнять другие рутинные операции. Благодаря программе, пользователь может не только управлять системой, но и выполнять сложные задачи через командную строку.
Важным аспектом использования программы является возможность выполнения задач в автоматическом режиме, без участия пользователя. Это позволяет существенно ускорить процесс обработки информации и выполнения операций на компьютере.
- Одной из ключевых возможностей командной строки является создание и использование сценариев. Сценарий — это набор команд, которые выполняются последовательно при запуске скрипта.
- Сценарии могут содержать условные операторы, циклы, переменные и другие конструкции, что делает их мощным инструментом для автоматизации задач.
- Пользователи могут написать собственные сценарии или использовать готовые скрипты из справочников для решения конкретных задач.
Кроме того, командная строка Windows позволяет работать с реестром системы, управлять службами, планировать задания, работать с сетью и многим другим. Все это делает программу необходимым инструментом для опытных пользователей и администраторов ОС.
Сравнение командных оболочек: Windows PowerShell и другие
Различия между командными оболочками на ОС Windows и другими командными интерфейсами обладают определенными особенностями. Важно понимать разницу между ними для более эффективного использования в работе.
- Одним из ключевых отличий PowerShell от других командных оболочек является его ориентация на объекты, в отличие от текстовой ориентации других оболочек.
- В PowerShell встроена поддержка .NET Framework, что позволяет выполнять более широкий спектр задач, таких как обработка XML-файлов или работы с SQL базами данных.
- Другие командные оболочки, такие как Command Prompt в Windows или Bash в UNIX-подобных системах, сосредоточены на использовании текстовых строк для передачи данных между командами.
Windows PowerShell также предоставляет мощные инструменты для автоматизации задач и управления операционной системой. Возможность создания сценариев (скриптов) в PowerShell помогает упростить и ускорить повседневные задачи, уменьшая необходимость вручной работы.
Преимущества использования PowerShell
С помощью PowerShell можно автоматизировать рутинные операции, что значительно экономит время специалиста и повышает производительность труда.
Windows PowerShell позволяет работать с различными компонентами операционной системы и взаимодействовать с внешними программами, что делает его мощным инструментом для администрирования системы.
Кроме того, PowerShell обладает богатым набором инструментов для работы с данными, такими как SQL и XML, обеспечивая удобную обработку информации.
Важно отметить, что PowerShell поддерживает работу с .NET Framework, что позволяет создавать и использовать собственные сценарии и функции для автоматизации работы системы.
Таким образом, использование PowerShell позволяет повысить эффективность работы с системой, упростить администрирование и сделать процессы обработки данных более гибкими и удобными.
Примеры практического использования PowerShell в IT-сфере
PowerShell — эффективный командный интерпретатор для операционной системы Windows. В отличие от обычного командного интерфейса, он предоставляет богатый набор инструментов для автоматизации задач.
Одним из примеров практического применения PowerShell в IT-сфере является управление пользователями и группами. С помощью PowerShell можно быстро добавлять новых пользователей, назначать им права доступа и настраивать политики безопасности.
PowerShell также широко используется для автоматизации процессов установки и обновления программного обеспечения на компьютерах в корпоративной сети. С помощью скриптов на PowerShell можно устанавливать пакеты ПО на множество компьютеров одновременно.
Другим примером использования PowerShell является мониторинг и анализ состояния серверов и сетевых устройств. С помощью специальных скриптов можно автоматически проверять работоспособность сервисов, мониторить загрузку ЦП и дисков, а также выявлять проблемы в работе сети.
Более продвинутые пользователи могут использовать PowerShell для создания собственных модулей и расширений, которые позволят им автоматизировать самые сложные и специфические задачи в сфере информационных технологий, значительно повышая эффективность работы и сокращая время на выполнение рутинных операций.