
Важность системных администраторов в компаниях нельзя недооценивать, поскольку только при наличии надежной и постоянно функционирующей ИТ-инфраструктуры компания может достичь максимальной экономической эффективности. В зависимости от размера организации, это требует мониторинга и управления десятками, а то и сотнями компьютеров одновременно. Масштабная задача, с которой могут справиться только подготовленные специалисты с глубоким пониманием внутрисистемных связей.
Если проблема возникает одновременно на нескольких компьютерах или необходимо как можно быстрее загрузить новое решение безопасности во всю сеть, администратору не хватит ни времени, ни средств, чтобы найти каждое отдельное устройство и постоянно повторять одни и те же действия. Windows PowerShell позволяет значительно ускорить подобный процесс и максимально автоматизировать рутинные задачи. Это значительно упрощает работу системного администратора. О том, на что еще способна эта программа, вы можете узнать из нашей статьи.

- Что такое Windows PowerShell?
- Почему существует Windows PowerShell?
- В чем разница между PowerShell и командной строкой?
- Как работает Windows PowerShell?
- Механизм PowerShell
- Язык сценариев PowerShell
- Каковы типичные приложения PowerShell?
- Организация каталогов: Переименование нескольких файлов одновременно
- Сбор данных: Проверка запущенных служб на ПК
- Устранение неполадок: Поиск системных ошибок в журнале событий
- Удаленное управление: Управление службами на удаленных компьютерах
Что такое Windows PowerShell?
Как следует из названия, Windows PowerShell — это оболочка. В информационных технологиях это интерфейс между компьютером и его пользователем. В информатике этот термин относится к видимому пользовательскому интерфейсу, с помощью которого можно взаимодействовать с внутрисистемными функциями компьютера.
Оболочки обычно ориентированы на работу с командами и управляются исключительно с помощью клавиатуры и текстового ввода. Они являются альтернативой графическим пользовательским интерфейсам (GUI), для навигации по которым в основном используется мышь — например, проводник Windows. Поскольку оболочки также предоставляют доступ к значительно большему количеству функций и компонентов ПК, их предпочитают многие ИТ-специалисты и системные администраторы.
Почему существует Windows PowerShell?
До недавнего времени командная строка «command.com» и приглашение «cmd.exe» были оболочками по умолчанию в операционных системах DOS и Windows. Они позволяли опытным пользователям открывать консольные приложения, устранять неполадки или перемещаться по дискам компьютера. Например, команда netstat позволяет получать основную информацию обо всех действиях в сети. Однако «command.com» и «cmd.exe» всегда выделялись двумя проблемами: Не все компоненты системы доступны через них, а их скриптовые языки считаются ограниченными по своей функциональности. Поэтому довольно долгое время они не считались столь же полно разработанными, как современные оболочки Linux и Unix.
В результате разработчики Microsoft планировали снять эти ограничения еще в 1990-х годах. Со временем они разработали различные оболочки, которые иногда помогали, а иногда ухудшали ситуацию. Monad, впервые представленная в 2003 году и переименованная в PowerShell три года спустя, оказалась особенно революционной.
В соответствии с «Общими инженерными критериями» Microsoft, которые с 2009 года обязывают все серверные продукты компании поддерживать PowerShell, она стала центральным решением для управления и автоматизации в Windows. Начиная с Windows 2008 и далее, он входит в стандартную комплектацию операционной системы. Он также доступен для загрузки в качестве фреймворка с открытым исходным кодом для более ранних версий Windows.

В 2016 году было принято решение предлагать оболочку независимо от платформы. Намерение Microsoft: PowerShell должна стать универсальным инструментом для системных администраторов за пределами Windows, то есть в Linux и macOS. С тех пор оболочка распространяется все шире и шире, постоянно получая новых сторонников. Подводя итог, можно сказать, что PowerShell — это долгожданный преемник командной строки.
В чем разница между PowerShell и командной строкой?
Что именно отличает новый фреймворк Microsoft от привычного командного интерпретатора? Проще говоря: PowerShell обладает всеми возможностями cmd.exe, может делать многое из этого гораздо лучше, а также выполняет другие задачи, которые раньше были немыслимы в Windows.
PowerShell в основном предоставляет тот же набор команд, что и cmd.exe. При достаточном знании общих стандартных команд PowerShell можно использовать так же, как и командную строку. Однако он также позволяет получить доступ к внутренним компонентам Windows, которые ранее были недоступны с помощью cmd.exe, например, к реестру Windows и инструментарию управления Windows (WMI). Командная строка Windows PowerShell также следует четкой логике последовательной структуры и синтаксиса команд и в этом отношении имеет больше смысла, чем cmd.exe.
Еще одна особенность, которая выделяет Windows PowerShell: В отличие от командной строки и Unix-подобных систем, программа работает полностью на основе объектов, а не выдает результаты команд в текстовом виде (строки). Каждый объект имеет свойства и методы, которые определяют, как его можно использовать. Вот как объект процесса Windows представляет такие свойства, как имена и идентификаторы процессов, и методы для приостановки и завершения процессов.
Поскольку результаты команд всегда выдаются в виде объектов .NET, конвейеризация в PowerShell позволяет выполнять гораздо более сложные задачи, чем cmd.exe. Это работает за счет использования вывода одного объекта в трубопроводе в качестве ввода для следующего объекта. Например, большие и сложные объемы данных можно фильтровать по расширениям файлов и оформлять в виде четкого списка.
Windows PowerShell — это не просто командная строка, она также выступает в качестве богатой и мощной среды создания сценариев. В ней вы можете писать собственные команды или объединять несколько команд в сложные сценарии для упрощения задач управления системой. Remoting также позволяет запускать сценарии одновременно на любом количестве систем, независимо от их местоположения, и таким образом управлять ими, настраивать, записывать и ремонтировать.
Такое разнообразие опций и возможностей также позволяет понять, какова основная целевая группа Windows PowerShell: ИТ-специалисты и системные администраторы, которые хорошо разбираются в оболочках и готовы ознакомиться с Windows PowerShell для повышения эффективности работы. Однако пользователи, которые в основном работают с графическим интерфейсом Windows и используют командную строку лишь эпизодически, заметят, что PowerShell не предлагает никаких особых преимуществ, особенно если учесть, что привыкание к оболочке занимает некоторое время.
Вот краткий обзор преимуществ и недостатков Windows PowerShell по сравнению с командной строкой:
Что хорошего в PowerShell? | Что не так с PowerShell? |
---|---|
✔ Все команды, доступные из командной строки | ✘ Сложность и крутая кривая обучения |
✔ Доступ к таким внутренним компонентам Windows, как реестр и WMI | ✘ Ориентирован в первую очередь на ИТ-специалистов и системных администраторов |
✔ Более эффективная работа благодаря единообразной структуре и синтаксису команд | ✘ Отсутствие преимуществ для пользователей графического интерфейса, которые редко используют командную строку |
✔ Полная объектная ориентация позволяет выполнять более сложные задачи за счет конвейеризации | ✘ Требуется ознакомление |
✔ Комплексная среда сценариев позволяет эффективно автоматизировать процессы | |
✔ Независимое от местоположения администрирование нескольких систем с помощью удаленного управления. |
Как работает Windows PowerShell?
PowerShell в основном состоит из двух компонентов, а именно PowerShell Engine и языка сценариев PowerShell. Оба компонента можно использовать отдельно или вместе, чтобы получить максимальную функциональность от программы.
Механизм PowerShell
Интерпретатор командной строки (CLI) PowerShell предоставляет пользователю доступ к внутренним функциям операционной системы с помощью клавиатурных команд. Команды программы называются «командлетами» (произносится «командлеты»). Согласно единому синтаксису, они всегда состоят из глагола и существительного в единственном числе, например, «остановить процесс» или «отсортировать объект». Параметры указываются в команде в соответствии с формулой — Параметр [значение], например:
Get-EventLog System Newest 3 (to access the three most recent entries in the system event log)
В PowerShell принято вводить команды заглавными буквами, но строчные тоже хорошо работают.
Более 100 основных командлетов также включают часто используемые стандартные команды из командной строки, которые доступны в качестве «псевдонимов», в том числе, чтобы помочь пользователям освоиться с новой оболочкой. Например, команда cd, предназначенная для изменения каталога, имеет эквивалент «set location», который выполняет точно такую же функцию. Чтобы просмотреть все предварительно созданные псевдонимы, используйте команду «Get-Alias». Вы также можете использовать команду «Set-Alias» для создания собственных псевдонимов. Например, можно использовать следующий конвейер для назначения псевдонима «ed» команде «notepad» (для программы Notepad), чтобы для выполнения программы требовалось меньше нажатий клавиш:
Set-Alias ed notepad (to open Notepad with the ed command)
Set-Alias scr1 C:UsersIEUserDesktopscript1.ps1 (to start a script with the abbreviation scr1)

В следующей таблице приведены примеры часто используемых команд и соответствующих им псевдонимов:
Псевдоним | Команда | Функция |
---|---|---|
cd | Установить местоположение | Изменить текущий каталог |
dir | Get-ChildItem | Перечислить все элементы в папке |
gi | Get-Item | Доступ к определенному элементу |
ps | Get-Process | Перечислить все процессы |
gsv | Get-Service | Список всех установленных служб |
gm | Get-Member | Показать все свойства и методы объекта |
очистить | Clear-Host | Очистить хост PowerShell |
Строгая и понятная структура команд PowerShell позволяет работать более эффективно, чем в командной строке. Чтобы сэкономить еще больше времени, вы можете использовать клавишу [Tab] для автоматического завершения наполовину написанных команд. Во многих случаях программа даже распознает не полностью набранные команды.
Команды можно выполнять по отдельности или объединять в конвейер, чтобы вывод одного объекта мог быть прочитан и повторно использован следующим объектом. Чтобы добавить две команды в один конвейер, просто используйте значок «|». Таким образом, вы можете, например, перечислить все доступные процессы и одновременно отсортировать их по ID:
Get-Process | Sort-Object ID

Переменные определяются с помощью символа $. Как обычно, они могут использоваться для хранения результатов, чтобы к ним можно было обратиться позднее в процессе конвейеризации. Например, PowerShell даже способен хранить результаты нескольких конвейерных команд одновременно:
$a = (Get-Process | Sort-Object ID)
Язык сценариев PowerShell
Многое в языке сценариев PowerShell может показаться знакомым C# и другим языкам сценариев. С его помощью можно не только писать собственные команды (и при необходимости делиться ими с другими пользователями), но и упаковывать несколько команд последовательно в файл сценария формата .ps1 для расширения функциональности оболочки. Можно придумать множество примеров применения: от выполнения простых рутинных задач до практически полной автоматизации процессов мониторинга и управления. Сценарии всегда содержат описание приложения и выполняются с префиксом «.», за которым следует полный путь к файлу. Пример:
.C:UsersIEUserDesktopscript1.ps1
Каковы типичные приложения PowerShell?
При достаточной практике и опыте PowerShell может сделать многие задачи управления системой гораздо более эффективными. В следующем параграфе мы объясним четыре типичных примера применения.
Организация каталогов: Переименование нескольких файлов одновременно
Если, гипотетически, вам нужно переименовать около 1 000 документов схемы «Текст (1).docx», «Текст (2).docx» и т.д. так, чтобы пробелы в имени файла были заменены подчеркиваниями: Нецелесообразно изменять каждый документ по отдельности. Вместо этого лучше использовать cmd.exe или — еще лучше — внешний инструмент. Конвейерная обработка в PowerShell обеспечивает еще большую гибкость при переименовании больших объемов данных.
Для этого сначала перейдите в каталог, в котором находятся документы. Это можно легко сделать с помощью команды «Set-Location» в сочетании с полным путем к файлу. Вот пример:
Set-Location C:UsersIEUserDesktopText folder

В качестве альтернативы вы можете перейти в каталог с помощью проводника Windows: Просто щелкните в списке путей и введите «powershell», чтобы открыть окно PowerShell для каталога. Вы можете изменить имя выбранного документа с помощью следующей команды:
Get-ChildItem *docx | Rename-Item -NewName {$_.name -replace " ","_"}
Пояснение: «Get-ChildItem» перечисляет все файлы в каталоге. Добавление «*docx» отфильтровывает только документы Word с соответствующим форматом — документы PDF в папке также не будут учтены. Используйте элемент «|», чтобы добавить в конвейер еще одну команду «Rename-Item», которая сигнализирует, что что-то должно быть переименовано. «-NewName» задает новое имя с помощью блока сценария, который работает с переменной «$_.name», представляющей текущий объект. А «.name» — это свойство с именем файла. Наконец, используйте параметр «-replace», чтобы указать, что все пробелы должны быть преобразованы в символы подчеркивания.

Сбор данных: Проверка запущенных служб на ПК
Перед внедрением нового решения безопасности в сети необходимо проверить, какие службы уже установлены на конкретном ПК. Основным инструментом является команда «Get-Service», которая выводит список всех служб. Вы также можете использовать функции фильтрации в PowerShell, чтобы отобразить только часть результатов — например, все запущенные службы. Это можно сделать с помощью следующей команды:
Get-Service | Where-Object {$_.status -eq "running"}
Вывод «Get-Service» направляется конвейером в «Where-Object». «Where-Object» фильтрует все службы по их статусу (представленному переменной «$_.status» и параметром -eq «running») и выводит список запущенных служб. При необходимости вы также можете отсортировать отфильтрованный список по отображаемому имени, добавив в конвейер еще одну команду:
Get-Service | Where-Object {$_.status -eq "running"} | Sort-Object DisplayName

С помощью команды «more» можно также изменить структуру длинного списка служб, чтобы можно было прокручивать его страницу за страницей.
Устранение неполадок: Поиск системных ошибок в журнале событий
Журналы событий предоставляют системным администраторам информацию о сообщениях об ошибках в приложениях, в операционной системе или в функциях безопасности устройства. Для просмотра и управления этими журналами используйте команду «Get-EventLog». Например, если вы хотите просмотреть сообщения об ошибках в журнале событий «Система», введите следующее:
Get-EventLog System | Where-Object {$_.entryType -Match "Error"}
Если PowerShell выводит слишком много результатов, вы можете использовать параметр «Newest 100», чтобы ограничить список 100 самыми последними записями системного журнала, которые затем фильтруются на наличие ошибок:
Get-EventLog System -Newest 100 | Where-Object {$_.entryType -Match "Error"}
Вы можете получить подробную информацию об отдельных сообщениях об ошибках, если передадите вывод этого конвейера команде «Format-List»:
Get-EventLog System -Newest 100 | Where-Object {$_.entryType -Match "Error"} | Format-List

Удаленное управление: Управление службами на удаленных компьютерах
Windows Management Instrumentation (WMI) предоставляет доступ практически ко всем настройкам и функциям компьютеров Windows, что делает его важнейшим инструментом для автоматизации процессов и удаленного управления цифровыми рабочими станциями. Вы также можете применить связанную с ним команду «Get-WmiObject» к удаленным компьютерам, поэтому вы также можете использовать Windows PowerShell в качестве инструмента управления системой. Например, если вам нужна информация класса Win32_BIOS на компьютере в сети (представленном параметром «-Computername»), вам поможет следующая команда:
Get-WmiObject Win32_Bios -Computername
В качестве альтернативы вы можете работать с параметром «-Class», за которым следует полный путь класса:
Get-WmiObject -Rechnername -Class Win32_Service
Теперь вы можете получить удаленный доступ к внутренним системным настройкам стороннего компьютера. В следующем примере показано, как получить методы службы Windows Update Client, чтобы узнать, какие команды можно использовать для ее запуска, остановки и перезапуска:
Get-WmiObject -Computername -Class Win32_Service -Filter "Name='wuauserv'"

Как вы видите, команда «Get-WmiObject -Computername» сначала находит нужный хост, а затем выбирает класс «Win32_Service» с помощью параметра «-Class». Клиент обновления Windows с аббревиатурой «wuauserv» затем отфильтровывается из существующих служб. Известная команда «Get-Member» и параметр «-Type Method» дают обзор всех методов для «wuauserv», что позволяет полностью контролировать клиента удаленно:
Get-WmiObject -Computername -Class Win32_Service -Filter "Name='wuauserv'" | Get-Member -Type Method
