Реклама. АО «ТаймВэб». erid: 2W5zFG3MBNx
Операционная система Windows пользуется популярностью на протяжении многих лет благодаря своему удобству и регулярным обновлениям. Среди ее функций особое место занимает командная строка – мощный инструмент для выполнения различных задач. Опытные пользователи ценят ее за возможности автоматизации и управления системой.
В этой статье мы разберемся, что такое командная строка, как она работает и чем отличаются ее встроенные инструменты – PowerShell и CMD.
Что из себя представляет командная строка Windows?
Командная строка, также известная как CMD (Command Line Interpreter), – это инструмент который позволяет управлять файлами и папками в Windows с помощью ввода текстовых команд. Принцип ее работы напоминает старые операционные системы, где все действия выполнялись вручную через текстовый интерфейс. Теперь командная строка – это просто функция Windows, которая открывается в отдельном окне.
Сегодня CMD остается важным инструментом, который чаще всего используется для двух типов задач:
- устранение неполадок;
- выполнение диагностических операций.
Через командную строку можно получать доступ к параметрам программ и управлять каталогами, которые не видны в привычном графическом интерфейсе, а также выполнять системные операции, требующие точности и контроля.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Как открыть командную строку CMD
В современных версиях Windows есть несколько способов открыть командную строку, что иногда может запутать начинающих пользователей. Они ошибочно полагают, что вызов CMD из разных мест интерфейса создает ее разные версии.
На самом деле, независимо от способа запуска, открывается одна и та же командная строка, которая работает с одними и теми же командами. CMD является обычным исполняемым файлом в корневой системе Windows.
Но для удобства и ускорения работы этот файл можно открыть из разных мест:
- Через строку поиска Windows: введите «cmd» или «командная строка» в поиске на панели задач.
- С помощью комбинации клавиш Win + R: откроется окно «Выполнить», в котором нужно ввести «cmd» и нажать Enter.
- Через проводник Windows: откройте проводник, перейдите по адресу: «C:\Windows\System32\cmd.exe» и запустите файл cmd.exe вручную.
Само управление устройством через командную строку предельно простое и интуитивно понятное, оно состоит из требуемой команды и ее значения (параметра).
Необходимо учитывать, что синтаксис команд в CMD критичен. Каждая черточка, символ или пробел играют важную роль, поэтому вводить команды следует без ошибок. Впрочем, если параметр указан неправильно, система автоматически покажет подсказку с доступными вариантами. Поэтому использование командной строки понятно даже для начинающих пользователей.
Что такое PowerShell Windows
PowerShell – это современная оболочка для Windows, которая представляет собой усовершенствованную альтернативу классической командной строке CMD. Основной особенностью PowerShell является ее расширенный функционал и интуитивно понятный интерфейс для работы с командами.
PowerShell появился в ответ на пожелания пользователей о необходимости более мощного инструмента для администрирования системы.
Удобный синтаксис команд
В PowerShell можно вводить команды в более человекочитаемом формате. Например, для проверки интернет-соединения вместо ping используется команда Test-Connection – она более наглядна и понятна для пользователей без опыта работы с командной строкой.
Расширенный функционал
В PowerShell собраны специализированные инструменты для работы с командами из Windows Management Instrumentation (WMI). Кроме того, оболочка поддерживает функционал языков программирования, таких как .NET, что позволяет автоматизировать задачи и управлять системой на более глубоком уровне.
Гибкость команд и поддержка скриптов
PowerShell позволяет создавать полноценные скрипты из нескольких команд для автоматизации задач. Это значительно упрощает работу системных администраторов и опытных пользователей. Так как команды стало проще вводить, воспринимать и запоминать.
Способы доступа к PowerShell
PowerShell можно открыть несколькими способами:
- Через командную строку CMD: введите «powershell» и нажмите Enter.
- Через сочетание клавиш Win + X: в появившемся меню выберите «Windows PowerShell».
- Правый клик по кнопке Windows: в контекстном меню найдите «Windows PowerShell» или «Terminal» (в зависимости от версии Windows).
Зачем PowerShell обычному пользователю
Если командная строка CMD чаще используется для базового управления компьютером и папками, то PowerShell предоставляет гораздо больше возможностей, включая администрирование системы, автоматизацию задач и диагностику.
Основные преимущества PowerShell:
- Готовые сборки (скрипты). В PowerShell можно использовать готовые скрипты для выполнения целого набора команд одним кликом.
- Создание собственных скриптов. Пользователи могут создавать свои скрипты с расширением .ps1, которые содержат команды для автоматизации действий.
Основные различия: функциональность и возможности сценариев
Несмотря на схожесть назначения, PowerShell и командная строка CMD различаются по функциональности, набору доступных команд, синтаксису и возможностям работы с каталогами.
Поддержка справки и помощи
В PowerShell есть встроенная система справки, которую можно вызвать командой:
Get-Help
В результате появляется подробная информация о командах, способах их ввода и возможностях. Это значительно упрощает изучение PowerShell и делает его более удобным для освоения.
Синтаксис команд
PowerShell и CMD используют разный синтаксис. Некоторые команды, привычные для CMD, могут быть недоступны в PowerShell, и наоборот. В PowerShell эти команды нередко «зашиты» внутри готовых скриптов или являются частью более сложных сценариев.
Объектно-ориентированный подход
Главное отличие PowerShell от CMD заключается в объектно-ориентированном подходе:
- В CMD команды работают на уровне текстового ввода и вывода данных.
- В PowerShell команды обрабатывают объекты, которые открывают доступ к мощным инструментам автоматизации и управления.
PowerShell был разработан значительно позже командной строки CMD, поэтому он вобрал в себя более современные технологии и принципы работы.
Команды PowerShell и CMD
Рассмотрим популярные команды PowerShell и их аналоги из классической командной строки.
Как изменить каталог
Смена активного каталога или переход между папками – это одна из базовых команд, с которой начинают знакомство пользователи.
В CMD для этого используется команда:
cd путь\к\каталогу
В PowerShell аналогичная функция выполняется командой:
Set-Location -Path путь\к\каталогу
Особенности:
- в обоих случаях путь указывается через обратные слэши \;
- переключение диска осуществляется в PowerShell привычной командой d: или расширенной формой:
Set-Location d:
Как перечислить файлы в каталоге
Чтобы вывести список файлов и папок в текущем каталоге, в CMD применяется команда dir. В PowerShell используется ее более мощный аналог – команда Get-ChildItem:
Get-ChildItem C:\Users\Documents
Эта команда позволяет не только перечислить файлы, но также отобразить скрытые папки и расширенную информацию о каждом объекте в каталоге. Она наглядно демонстрирует объектно-ориентированный подход PowerShell, где файлы и папки рассматриваются как объекты с различными свойствами.
Как переименовать файл
Переименование файла в CMD выполняется командой:
ren старое_имя новое_имя
В PowerShell используется более развернутая команда:
Rename-Item старое_имя новое_имя
Особенности:
- указывается два параметра: путь к текущему файлу и его новое имя;
- в отличие от ручного переименования в проводнике, команда позволяет автоматизировать этот процесс для нескольких файлов или папок.
Благодаря объектно-ориентированному подходу и интеграции с языками программирования, PowerShell предоставляет больше возможностей для автоматизации управления системой и каталогами.
Ключевые отличия команд PowerShell от CMD
Ниже приведем примеры наиболее часто используемых команд в CMD и их аналогов в PowerShell, которые называются командлетами.
Проверка интернет-соединения
В CMD для проверки доступности хоста используется команда ping:
В PowerShell для той же задачи используется командлет Test-Connection:
PowerShell предоставляет более детализированный результат выполнения команды с дополнительными полями (Source, Bytes, Time).
Отображение маршрута сетевого соединения
В CMD для просмотра маршрутов используется команда route print, а аналогичная функция в PowerShell выполняется командлетом Get-NetRoute.
При этом PowerShell представляет информацию в более структурированном виде, позволяя применять фильтры и дополнительные параметры для обработки данных.
Перспективы на будущее: наследие CMD и эволюция PowerShell
Классическая командная строка постепенно теряет свою актуальность при работе с папками. Основная причина этого заключается в ее ограниченной функциональности.
PowerShell эволюционировал из простой утилиты для выполнения команд в полноценный инструмент для разработчиков, системных администраторов и опытных пользователей. Сегодня он не только заменяет CMD, но и становится базовым компонентом Windows для ввода сложных задач и автоматизации процессов.
Выбор подходящего инструмента для решения задачи
Выбор между командной строкой CMD и PowerShell зависит от уровня подготовки пользователя и характера задач, которые нужно решить.
CMD
Командная строка остается удобным инструментом для начинающих пользователей, которые только знакомятся с архитектурой Windows. Она имеет минималистичный синтаксис и позволяет выполнять базовые команды.
PowerShell
PowerShell – это мощный инструмент, который решает задачи по настройке и управлению операционной системой:
- автоматизация рутинных действий;
- выполнение сложных операций администрирования;
- обработка данных с использованием расширенных функций и командлетов.
При этом переход из CMD на PowerShell не вызывает трудностей, поскольку многие базовые команды полностью идентичны.
Заключение
PowerShell содержит базовые возможности CMD и дополняет их расширенным набором команд. Он собрал под одной оболочкой лучшие возможности командной строки и автоматизации. С другой стороны, CMD остается минималистичным инструментом, который позволяет взаимодействовать с системой на глубинном уровне. Она полезна для выполнения базовых команд и понимания архитектуры Windows.
Интерпретатор командной строки (Command Line Interpreter, или CMD) и PowerShell — это приложения, используемые для прямого взаимодействия с операционной системой Windows. На первый взгляд у них много общего, но в этом тексте мы сконцентрируемся на ключевых отличиях командной строки CMD и PowerShell.
Что из себя представляет командная строка Windows?
Интерпретатор командной строки (более распространенное название — командная строка Windows) — это командная оболочка, которая появилась впервые в MS-DOS 1980-х годов. Она позволяла пользователю взаимодействовать с операционной системой (ОС) напрямую.
Так, данная командная оболочка предоставляет среду для запуска приложений и различных утилит — выходные данные отображаются в том же окне. Командную строку можно использовать для создания и редактирования сценариев и сохранения их в пакетных файлах, для решения задач автоматизации в рамках одной системы.
Как открыть командную строку CMD
Прежде чем проводить сравнение Windows PowerShell и CMD, хорошо бы понять, где их найти и как с ними взаимодействовать.
Существует несколько способов открыть интерфейс командной строки. Классический метод — через поисковую строку, введя в ней слова cmd или командная строка.
Для большинства этот способ быстрее и удобнее, но существует и другая возможность получить доступ к cmd.exe:
- Комбинацией клавиш win+r открыть меню выполнения.
- Ввести в открывшееся меню команду cmd.
Также можно вручную открыть cmd.exe из его исходного местоположения: C:\Windows\system32\cmd.exe.
Для взаимодействия с ОС в командной строке нужно ввести команду и ее параметр.
Например, чтобы проверить соединение с удаленным хостом вводим:
ping -r google.com
Где ping — команда, -r — параметр команды, google.com — адрес удаленного хоста.
После этого командная строка выполняет введенную команду и реализует задачу или функцию, для которой она предназначена в Windows.
Команды должны быть введены в Command Prompt без ошибок. Неправильный синтаксис или написание могут привести к сбою команды или, что еще хуже, к выполнению неправильной команды или правильной команды неправильным способом. Если ввести команду без параметров, вы увидите подсказку с возможными параметрами:
Теперь мы можем перейти к PowerShell.
Что такое PowerShell Windows
PowerShell — это более продвинутая версия CMD. Кросс-платформенное решение для автоматизации задач, состоящее из оболочки командной строки, языка сценариев и структуры управления конфигурацией.
Подробнее о PowerShell читайте здесь →
Ключевым отличием от CMD, заметным на старте работы, являются командлеты — упрощенные команды, используемые в среде PowerShell. Назначение команды PowerShell довольно легко интерпретировать по названию: они следуют простой закономерности — за глаголом идет существительное.
Сравним:
- Команда CMD: ping
- Командлет PowerShell: Test-Connection
Командлеты помогают управлять инфраструктурой Windows. Кроме того, они позволяют обычному пользователю получить удаленный доступ к реестру, файловой системе и пространству Windows Management Instrumentation (WMI) на системах.
Как современная командная оболочка PowerShell включает в себя лучшие функции других популярных оболочек. В отличие от большинства оболочек, которые принимают и возвращают только текст, PowerShell принимает и возвращает объекты .NET. Это программная платформа, в которой исполняются программы. Таким образом, нет необходимости разбирать текст для извлечения информации из выходных данных.
Как язык сценариев PowerShell обычно используется для автоматизации управления системами, позволяет создавать сложные сценарии с множеством условий. Он также используется для сборки, тестирования и развертывания решений, часто в средах CI/CD.
Открыть shell, как и командную строку, можно через поисковую строку и через меню выполнения, вписав в обоих случаях PowerShell. Также, в зависимости от версии операционной системы его можно найти в Power User Menu. Открывается оно комбинацией клавиш win+x или нажатием правой кнопки мыши на значок Windows.
Зачем PowerShell обычному пользователю
Разница PowerShell и CMD заключается в их использовании. Последний используется в основном для выполнения пакетных команд, устранения некоторых первичных неполадок. PowerShell, в свою очередь, может использоваться как для выполнения пакетных команд, так и для административных целей.
Важной является возможность создания сценариев (скриптов) — текстовых файлов, содержащих всего одну или целый набор команд PowerShell.
В качестве примера создадим простой выводящий текст сценарий, который состоит из одной команды:
- Создаем файл сценария (с расширением ps1), в котором будут прописаны команды:
2. В окне PowerShell вводим & и путь к необходимому файлу:
Теперь давайте разберем, как выполнять простое взаимодействие с системой при помощи CMD и PowerShell.
Как получить помощь?
Первым делом необходимо узнать, какие команды вообще существуют. Это можно узнать, запросив помощь у самого приложения.
В командной строке Windows используется команда help, чтобы отобразить список доступных команд.
В PowerShell, чтобы выполнить такое же действие используется команда Get-help.
Соберите сервер в конфигураторе под свои задачи. Или выберите из более 100 готовых.
Как изменить каталог?
Для изменения каталога (папки) в командной строке применяется команда Change Directory (cd). Эта команда позволяет перейти в другую папку с компьютера (изменить текущий каталог).
В PowerShell команда cd является псевдонимом для командлета Set-Location-Path <название каталога>, выполняющего идентичную функцию.
Первая итерация команды CD, которую полезно знать, это CD\. Она переводит вас на вершину файловой иерархической структуры (дерева каталогов).
Для перехода в нужную папку с диска, выполните команду CD «название папки». Вложенные папки должны быть разделены символом бэкслэша: \. Например, если необходимо перейти в папку user, находящуюся в C:\users нужно ввести команду cd users\user. Используя команду cd .., можно вернуться на один каталог вверх.
Чтобы изменить диск, нужно ввести его название с двоеточием. Например, d:, чтобы переключиться на диск D. В PowerShell используется командлет set-location d:.
От каталогов перейдем к хранящимся в них файлам.
Как перечислить файлы в каталоге?
Команда dir (Directory) используется, чтобы перечислить файлы в каталоге через командную строку.
Отличие PowerShell – в используемой для перечисления файлов команде. Чтобы перечислить файлы в каталоге, используется команда Get-ChildItem.
Как переименовать файл?
Чтобы переименовать файл в каталоге, в cmd используется команда ren (rename). После нее сначала вводится имя файла, которое вы хотите заменить, затем вводится желаемое имя. Например, ren dir1 dir2.
В Windows PowerShell используется команда Rename-Item для переименования папки путем передачи пути к переименовываемой папке и целевого имени. Например, C:\Windows\dir1 dir2.
Далее разберем важные утилиты, которые могут пригодиться при взаимодействии с системой, а также их отличия в CMD и PowerShell.
Ключевые отличия команд PowerShell от CMD
Завершим знакомство обычного пользователя с PowerShell и CMD сравнением команд и командлетов. Остановимся на нескольких примерах.
- Ping: как мы писали ранее, аналогом cmd-команды ping является командлет Test-Connection в PowerShell.
- Tracert: в PowerShell для определения маршрута следования данных в сети используется Test-NetConnection -TraceRoute.
- IPConfig: Get-NetIPConfiguration в PowerShell – эквивалент IPConfig.
- Nslookup: Команда Resolve-DnsName выполняет DNS-запрос для указанного имени. Эта команда функционально аналогична инструменту nslookup, который позволяет пользователям запрашивать имена.
- Netstat: Get-NetRoute в PowerShell получает текущие TCP-соединения.
- Route: Команда Get-NetRoute является аналогом route и получает информацию о маршруте IP из таблицы маршрутизации IP.
- Netsh: Netsh – служебная программа на базе командной строки, позволяющая показывать или изменять конфигурацию сети активного компьютера. Чтобы запустить ее, и в Windows Powershell, и в CMD используется одна и та же команда — netsh.
- Gpupdate: ее аналогом является команда Invoke-GPUpdate. Она обновляет параметры групповой политики, включая параметры безопасности, установленные на удаленных компьютерах.
- Gpresult: Команда Get-GPResultantSetOfPolicy получает и записывает в файл информацию о результирующих политиках (RSoP) для пользователя.
Разница между командной строкой CMD и Windows PowerShell: что выбрать
Мы завершили обзор, которые условно можно назвать «PowerShell против CMD». Очевидно, есть много причин, по которым Windows PowerShell заменила командную строку Windows по умолчанию в ОС Windows 10. Но, если вы привыкли к CMD, вам не обязательно переходить на PowerShell.
Хотя переход не будет болезненным: в среде PowerShell большинство команд из CMD работают. Все потому, что были созданы псевдонимы командной строки в PowerShell, которые позволяют интерпретировать старые команды cmd как новые команды PowerShell.
Какой инструмент выбрать — ваш выбор. Но PowerShell – более современен. В две основные функции PowerShell встроены дополнительные возможности. И эти возможности, или сценарии использования, являются причиной растущей популярности PowerShell.
Чтобы узнать, как старые команды CMD соотносятся с новыми командами PowerShell, используйте команду Get-Alias.
Первые версии 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 and command prompt (CMD) are both essential command-line interface tools for Windows administrators, allowing them to execute commands, manage system processes and automate administrative tasks. While CMD has been a foundational component of Windows since the MS-DOS era, PowerShell has emerged as a more advanced and powerful scripting language, enhancing system management and automation capabilities.
This blog provides a detailed comparison between PowerShell and CMD, highlighting their strengths and weaknesses and examining practical examples and key differences. The goal is to help Windows professionals understand when to choose one tool over the other.
What is PowerShell?
PowerShell is a powerful command-line interface and scripting language, primarily aimed at system administrators and IT professionals. PowerShell was designed to automate administrative tasks, manage configurations, and provide detailed control over the Windows operating system and its components.
One of the defining characteristics of PowerShell is its object-oriented nature. Because PowerShell is built on top of .NET framework. PowerShell commands (known as cmdlets) return objects rather than plain text output. Each object contains properties and methods, which represent the actions that can be performed on the object.
PowerShell’s close integration with the .NET framework means that users can leverage a vast library of classes, methods and properties. PowerShell is also designed to work seamlessly with Windows Management Instrumentation (WMI), which provides a powerful way of accessing system management information. WMI allows PowerShell to retrieve system properties, manage hardware components and interact with the operating system at a deeper level.
What is Command Prompt (CMD)?
CMD is a command-line interpreter available in Windows operating systems that allows users to run Windows commands and scripts for file management, directory navigation and system configuration. Its simplicity makes it an ideal choice for users who need to perform basic tasks without the complexity of an advanced scripting language.
A key feature of CMD is its capability to run batch files. A batch file is a script file containing a series of commands that are executed sequentially, this way users can automate repetitive tasks, such as backing up files, modifying system settings, or installing applications.
CMD provides direct access to operating system features and configurations. Users can access system settings, network configurations and execute system commands without navigating through a GUI, which can be more efficient for certain tasks, especially troubleshooting. CMD allows access to system environment variables like %PATH%, %TEMP% and %USERNAME%, which are used to define system settings and configurations and can be referenced in commands and scripts.
Key Differences Between PowerShell and (CMD) Command Prompt
PowerShell and command prompt are designed with different functionalities and user needs in mind. Below is a detailed feature comparison that highlights the key differences.
Feature | PowerShell | Command Prompt (CMD) |
Cross-platform availability | The PowerShell Core (v7 and later) edition of PowerShell works on Windows, Linux and macOS. | CMD is limited to Windows environments only. |
Command help and community support | PowerShell offers detailed, structured help for cmdlets, functions and scripts, including examples, via the Get-Help cmdlet. It also has extensive online documentation and an active community, offering troubleshooting, tutorials and advanced use cases. | CMD provides basic information and options about command syntax via the Help command but lacks in-depth guidance. CMD’s community is smaller than that of PowerShell, and its documentation is less comprehensive. |
Output types | PowerShell outputs .NET objects, which can be easily manipulated, so it is suitable for more advanced processing of data and complex operations. | CMD outputs plain text. While you can use redirection or piping, all output is a simple stream of characters, making it less flexible for complex data manipulation. |
Command chaining | PowerShell supports advanced command chaining using pipes (|), which allow passing of objects between cmdlets for complex workflows. | CMD allows basic chaining using operators like (|), but only text is passed between commands. This limits the types of operations you can perform. |
Scripting capabilities | PowerShell uses .ps1 scripts with advanced scripting elements like functions, loops and conditional statements, making it ideal for automation. | CMD supports batch scripting with simple command sequences. It is suitable for basic automation and file management tasks. Scripts are written in .bat files. |
Object manipulation | PowerShell is excellent at manipulating objects due to its object-oriented nature, allowing for efficient handling of different data types and complex tasks. | CMD is limited to text manipulation and lacks the ability to handle structured data easily, so more complex commands are required for similar outcomes. |
Remote management | PowerShell has built-in capabilities for executing commands remotely, making it an essential tool for system administrators managing multiple machines. | CMD has limited remote management options, so external tools or scripts are needed for remote operations. |
User interface | PowerShell supports a richer user interface with features like tab completion, syntax highlighting and access to Windows Presentation Foundation (WPF) for graphical elements. | CMD has a basic user interface with no advanced features like tab completion or syntax highlighting, so it often requires more exact command input. |
Command aliases and flexibility | PowerShell includes cmdlet aliases (like gci for Get-ChildItem), making it more user-friendly. | CMD does not have many aliases and its command syntax is more rigid. |
Error handling | PowerShell has advanced and structured error handling using try, catch and finally. This allows for better control and debugging of errors. | CMD offers limited error handling via if error level, which is less useful and not as user-friendly as PowerShell’s approach. |
Task automation | PowerShell’s object-oriented nature and full scripting language makes it excellent for automating complex workflows, system administration and bulk operations across machines. | CMD’s batch scripting is suitable for smaller, straightforward automation tasks, like file management or system diagnostics. |
Cross-platform scripting | PowerShell scripts can be executed on Windows, Linux and macOS, making it a versatile choice for system administrators working across platforms. | CMD batch files (.bat) are exclusive to Windows, limiting their use in cross-platform environments. |
Ease of use | PowerShell is more complex; its advanced capabilities mean there is a steeper learning curve. For basic tasks, users may find it overkill. | CMD is simpler, which makes it easier for beginners and other users to perform straightforward tasks like navigating directories or listing files. |
Troubleshooting/network testing | PowerShell provides advanced cmdlets for detailed network diagnostics, such as Test-Connection (which is like ping but more powerful) and Get-NetIPAddress. | CMD is preferred for network testing because commands like ping, ipconfig, tracert and netstat are lightweight. |
Why CMD Still Matters
Despite PowerShell’s dominance in system administration and automation, CMD still remains valuable in certain situations, such as the following:
- Many legacy systems and applications still rely on CMD and batch files for functionality. With CMD, batch files are easy to create and edit.
- CMD’s simplicity makes it ideal for basic tasks such as file management, where it offers a quick and straightforward approach. It provides direct access to system operations with minimal overhead.
- CMD is particularly useful for quick operations when Windows is not fully operational, such as performing diagnostics or repairs.
- While PowerShell can handle network-related tasks, CMD’s simplicity makes it faster for basic commands. For example, the ping, tracert and ipconfig commands often used by network administrators enables quick troubleshooting and offer immediate, easy-to-read feedback.
Overall, CMD is still a practical tool for straightforward tasks that don’t require the complexity of PowerShell.
PowerShell and CMD Use Cases: When to Use Each Tool
PowerShell Use Cases: Automation and Beyond
PowerShell excels in automating repetitive tasks such as system updates, user management and data reporting. By writing scripts or using cmdlets, IT professionals can save time and reduce human error. Key benefits include the following:
- PowerShell is highly extensible, you can build and add your own functionality via custom cmdlets, functions and modules.
- One of the most significant improvements to PowerShell in recent years is its multi-platform capability. PowerShell Core (v7 and beyond) runs on Windows, Linux and macOS, enabling system administrators and DevOps engineers to automate processes regardless of the underlying operating system.
- Administrators can automate cloud infrastructure management for platforms like Azure, AWS and Google Cloud, as well as write scripts for deployment, CI/CD pipelines, or orchestration tools like Jenkins, Docker and Kubernetes.
- PowerShell is ideal for handling complex administrative tasks that require flexibility, logic and integration with other systems. These tasks can involve dealing with large datasets, interacting with APIs and managing intricate workflows.
- Administrators can automate the creation, modification and deletion of Active Directory objects such as users, groups and computers, as well as configuration of new systems, including the installation of software, updates and security policies.
CMD Use Cases: Quick and Simple Commands
The command prompt is a simple, fast and immediate tool for basic administrative and troubleshooting tasks, including those described below.
Network Diagnostics and Troubleshooting
CMD provides several useful commands for quickly identifying network-related problems:
- ipconfig — Quickly check network configuration details, especially when troubleshooting IP issues.
- ping — Test whether your computer can reach another device on the network or the internet.
- tracert — Identify network bottlenecks or troubleshoot slow internet connections by seeing where delays occur.
- netstat — Identify active connections and troubleshoot network-related problems.
File and Directory Management
CMD provides several commands for managing files and directories. For example, the following commands are essential for quick administrative tasks and basic file system navigation:
- dir — Quickly view the files and directories in a folder.
- cd — Navigate between directories quickly from the command line.
- copy — Quickly copy files from one location to another.
- del — Delete files.
Windows Recovery and Safe Mode Operations
CMD is frequently used in Windows Recovery Environment (WinRE) to troubleshoot and fix issues when the operating system is not booting properly. In recovery mode, CMD can be used to perform system repairs and restoration tasks that would otherwise require a GUI. For example, CMD can be used to:
- Fix bootloader issues and repair the Master Boot Record (MBR). Resolve boot-related issues preventing Windows from starting.
- Restore the system if it fails to boot or has become unstable. Access system restore points from the command prompt to restore the system to a previous state.
- Fix problems related to booting or missing operating systems in dual-boot setups. Modify or rebuild the Boot Configuration Data (BCD) store.
PowerShell and CMD: Practical Examples
When it comes to administrative tasks in Windows, both PowerShell and the command prompt are powerful tools, but they handle tasks differently. Below, we compare the difference between PowerShell and CMD when it comes to three common administrative tasks: creating user accounts, querying event logs and performing file operations.
Creating User Accounts
PowerShell
With PowerShell, you can use New-LocalUser to create a local machine user, and New-ADUser to create user accounts in Active Directory, as follows:
New-LocalUser -Name "John.Doe" -Password (ConvertTo-SecureString "Password123#" -AsPlainText -Force) -FullName "John Doe" -Description "A new user account"
New-ADUser -Name "Josh Brolin" -Path "OU=NBC,DC=milkyway,DC=local" -GivenName "Josh" -Surname "Brolin" -SamAccountName "Josh-Brolin" -AccountPassword (ConvertTo-SecureString -AsPlainText “webdir123R” -Force ) -ChangePasswordAtLogon $True -DisplayName "Josh Brolin" -Enabled $True
CMD
To create a user account from CMD, use the net user command, as shown in these examples:
net user john.doe P@ssw0rd /add
net user John.Doe Password123# /add /fullname:"John Doe" /comment:"A new user account"
Querying Event Logs
PowerShell
PowerShell provides cmdlets specifically designed to retrieve event logs, making it quite powerful for this task. For instance, you can use either of the following commands to get the last 10 entries from the System and Application event logs:
Get-EventLog -LogName System -Newest 10
Get-EventLog -LogName Application -EntryType Error -Newest 10
CMD
In CMD, querying event logs requires using the wevtutil command, which is less user-friendly. Here is the command to get the last 10 entries from the System event log:
wevtutil qe System /c:10 /f:text
Performing File Operations
Both PowerShell and CMD enable copying, moving and deleting files, but PowerShell provides more advanced features, such as handling file properties.
PowerShell
PowerShell provides cmdlets like Copy-Item, Move-Item and Remove-Item to manage files, as illustrated here:
Copy-Item -Path "C:\Logs\Log1.txt" -Destination "C:\Backup\Log1.txt"Move-Item -Path "D:\Backup\Log1.txt" -Destination "E:\Archive\Log1.txt"
Remove-Item -Path "E:\Archive\Log1.txt" -Force
CMD
In CMD, you can use the copy, move and del commands for file operations:
copy C:\Logs\Log1.txt C:\Backup\Log1.txt
move D:\Backup\Log1.txt E:\Archive\Log1.txt
del E:\Archive\Log1.txt
Transitioning from CMD to PowerShell
Key Concepts to Understand
Command prompt users who want to take advantage of the more robust capabilities of PowerShell need to understand the following key points before converting their scripts.
- Command structure — CMD uses executable commands like dir and copy, while PowerShell uses cmdlets that follow a verb-noun structure, such as Get-ChildItem and Copy-Item.
- Object-oriented — PowerShell deals with objects rather than plain text, which enables more complex data manipulation.
- Pipeline — PowerShell’s pipeline feature allows you to pass objects between cmdlets, enabling chaining of commands.
Learning Basic PowerShell Cmdlets
Start with some basic cmdlets that have CMD equivalents, like those in the table below. Take time to practice these and other fundamental cmdlets.
Task | CMD Command | PowerShell Cmdlet |
List directory contents | dir | Get-ChildItem |
Copy a file | copy | Copy-Item |
Move a file | move | Move-Item |
Delete a file | del | Remove-Item |
View network configuration | ipconfig | Get-NetIPConfiguration |
Change current directory | cd | Set-Location |
Ping a server | ping | Test-Connection |
Converting CMD Batch Scripts to PowerShell Scripts
To convert CMD scripts to PowerShell, convert each CMD command to its PowerShell equivalent. However, remember that while some basic commands in batch scripts will translate directly to PowerShell, there are important differences in syntax and capabilities. In addition, remember that CMD batch scripts are typically saved with the .bat extension, while PowerShell scripts are saved with the .ps1 extension.
For example, here is a CMD batch script:
@echo offecho Copying file...
copy C:\Temp\Log1.txt D:\Backup\
echo Done!
And here is the equivalent PowerShell script:
Write-Host "Copying file..."
Copy-Item -Path "C:\Temp\Log1.txt" -Destination "D:\Backup\"
Write-Host "Done!"
Why PowerShell Is the Future
Microsoft is increasingly positioning PowerShell as the default command-line tool, gradually replacing the traditional command prompt. Accordingly, adopting PowerShell is not just a choice, but a necessity for anyone aiming to stay ahead in modern IT environments. Key benefits include the following:
- Designed for modern environments — PowerShell offers capabilities that rival tools like Bash while seamlessly integrating with Microsoft products and cloud services.
- Easy cloud management — It excels in managing Azure resources, with specialized cmdlets for tasks like automating deployments, managing virtual machines and configuring services.
- Efficient email management — PowerShell also improves management of both on-premises Exchange and Exchange Online, allowing administrators to automate bulk tasks, configure policies, improve efficiency and reduce manual errors.
PowerShell also simplifies user and group management, reporting, and compliance tasks, further cementing its role as the future of system administration.
Conclusion
When choosing the command prompt vs PowerShell, it is important to consider the strengths of each tool. PowerShell excels in automation, offering advanced scripting capabilities and efficient system management. Its object-oriented design enhances data manipulation and integrates seamlessly with modern technologies. However, CMD remains useful for quick, simple commands and file management, especially for users who prefer a straightforward interface.
If you have not yet explored PowerShell, start by experimenting with basic commands and scripts, and then move on to translating your current CMD scripts to PowerShell. Embracing PowerShell can significantly improve your efficiency and equip you with the skills needed for navigating modern IT environments.
Frequently Asked Questions About CMD vs PowerShell
Is PowerShell the same as command prompt?
No, they are separate tools.
Can PowerShell replace CMD entirely?
PowerShell can replace CMD for most users because it supports a broader range of functionalities, including automation, scripting and integration with modern technologies. However, CMD may still be used for basic commands or quick tasks by users who prefer its simplicity or need to support legacy applications or processes.
Is CMD still relevant for Windows administrators?
While PowerShell is generally recommended for more complex operations, CMD still serves as a simple and efficient option for less demanding tasks. In addition, some legacy scripts, applications and utilities require CMD.
What are the biggest advantages of PowerShell over CMD?
Key benefits of PowerShell vs CMD include the following:
- Advanced scripting and automation — PowerShell enables the creation of complex scripts to automate a wide range of tasks, from server management to provisioning cloud resources.
- Object-oriented approach — Unlike CMD, PowerShell returns structured data that can be easily manipulated, filtered and passed through pipelines, providing greater flexibility and precision.
- Cloud integration — PowerShell seamlessly integrates with cloud platforms like Azure, Microsoft 365 and AWS, enabling administrators to manage cloud resources, deploy applications and automate workflows.
- Cross-platform compatibility — With PowerShell Core, administrators can manage systems across Windows, Linux and macOS using a single tool.
- Integrated security — PowerShell includes built-in security features such as script signing, execution policies and secure remote connections, which are crucial for maintaining a secure IT environment.
Since 2012, Jonathan Blackwell, an engineer and innovator, has provided engineering leadership that has put Netwrix GroupID at the forefront of group and user management for Active Directory and Azure AD environments. His experience in development, marketing, and sales allows Jonathan to fully understand the Identity market and how buyers think.
In Windows 10, the “traditional” command prompt that we’ve been using for years (dozens of years, to be exact) has been replaced by PowerShell. Of course, you can still call good old cmd.exe, but all menus and hotkeys now contain PowerShell as a default option, instead of CMD. Let’s sort things out: why did this happen and what’s the difference between these console applications?
Stay awhile and listen.
CMD, or command prompt, originated from the Microsoft MS-DOS command-line shell and was used not only by system administrators but by end-users as well. (However, the dividing line between these two categories was, as you might remember, hardly noticeable.) Later on, when Microsoft introduced Windows NT, it was shipped with cmd.exe – the command line app that resembled its DOS predecessor and was compatible with it but also had additional functions. That was in 1987. Since then, cmd.exe has been a built-in app for all Windows operating systems.
What Is PowerShell?
PowerShell is more than just a “powerful shell”. After its release in 2006, this fully-fledged object-based scripting environment quickly became widespread among system administrators, who enjoyed its ease and functionality. PowerShell is based on CMD but leaves it far behind in terms of usefulness. With PowerShell, you can automate various tasks; for instance, managing Active Directory or implementing user access levels.
PowerShell Remote Alerts
In this document you’ll find a PowerShell script that checks the status of the services listed below and sends an email alert if any of them is turned off:
- Windows Firewall
- Windows Defender
- Windows Update Service
- Any installed third-party antivirus
PowerShell vs Command Prompt: a Comparison
Before talking about the differences, it is worth discussing the characteristics that are shared by CMD and PowerShell. First of all, they have similar ancestors: the teletype machines of the 19th century. These machines were used in a similar way to all command lines nowadays. Even though technologies have developed drastically, a user still enters symbols on a machine and receives a result after these symbols have been interpreted and processed by this machine – like many years ago. Another point is that CMD and PowerShell appear to be attachments to the Windows console. Neither of them is a console itself; they’re just additions.
And this functionality – we finally come to the PowerShell vs CMD technical comparison – differs a lot. Since CMD is a child of the MS-DOS command line, it inherited simple batch commands that any former DOS user remembers – like “cd” or “dir”. These commands can be used to create scripts, and sometimes these scripts have to be very complicated in order to handle a given task. In PowerShell, there are no commands; instead, administrators utilize cmdlets (“command-lets”) – small scripts with clear names. One PowerShell cmdlet can replace a long sequence of CMD commands. Here are some examples:
Changing a directory:
Command prompt
Windows PowerShell
Getting the last backup type from logs and displaying it
Command prompt script
Please note: this script doesn’t work from the command prompt itself, it should be launched as a .bat file
Windows PowerShell
Calculating a date:
Command prompt script
Please note: this script doesn’t work from the command prompt itself, it should be launched as a .bat file
Windows PowerShell
Another difference is that CMD commands return text and, if a user needs some data, they must parse this text in order to get the required information. PowerShell cmdlets return objects that can be used for direct manipulation. To transfer these objects between cmdlets, pipes are used; they channel all the data so that it can be used in any number of cmdlets. Also, in CMD, the number of variables is limited and you have to pass them into commands in a strict order. PowerShell doesn’t have such limits.
Moreover, PowerShell is based on the .NET framework and can interact with any Windows objects, even core ones, unlike command prompt, which was not designed for system administration. While interacting with these objects, an administrator can create their own cmdlets in PowerShell to automate everyday tasks. In the process, administrators can use an embedded help system (it can be accessed via the Get-Help cmdlet) or test their creations. In the command prompt, there’s no opportunity to test a script; you have to enter everything properly the first time or it won’t work as expected and you may even lose some vital data. Thus, PowerShell is safer.
All this significantly improves the performance and usability of scripts; with PowerShell, you can do everything that CMD allows and much more. CMD is more backward-oriented; Microsoft wants it to be compatible with all old versions. So CMD might receive some updates, but not a lot. Accordingly, Microsoft switched to PowerShell, which gets regular updates and enhancements, and has a strong and active community.
However, note that you need to update PowerShell manually and, if your OS is old, there might be compatibility problems.
When to Use CMD
If you are used to CMD, of course, you can stay with it; it is still suitable for uncomplicated tasks. It is like a vintage car – no automation, no comfort, but you remember how helpful it was dozens of years ago and there’s still some fuel in its tank. But what if you want to travel the highway?
When to Use PowerShell
PowerShell, with its wide functionality and steep learning curve, is the way to go. With it, you can ease your everyday tasks a lot, making scripts do all the work. Performing batch deployments, getting access to hidden data, managing permissions, and much more – PowerShell is great for any task related to the Windows OS.
Conclusion
As you can see, PowerShell and command prompt differ a lot, and this applies not only to their functionality but to their purposes as well. They might seem to be lookalikes but, in fact, PowerShell and CMD are like a space shuttle and a steam car.
Once extremely useful, the command prompt has now become a thing of the past. PowerShell completely replaces it and is able to process tasks that administrators of the 1980s couldn’t even dream of. So, if you are still wondering which tool to use, there is a definite answer: PowerShell, for sure.
How to Remotely Manage Your Servers Using PSRemoting and Invoke PowerShell Commands
- Making a new firewall rule
- Restarting the server or computer
- Restating certain services
- Checking the status of the service, and more