Отличие Windows Powershell от командной строки (CMD)

Отличия PowerShell от CMD: что использовать в работе

Андрей Салита
Андрей Салита Архитектор ИБ
30 ноября 2022

Рассказали о ключевых отличиях между интерпретаторами командной строки в Windows.

Изображение записи

Интерпретатор командной строки (Command Line Interpreter, или CMD) и PowerShell — это приложения, используемые для прямого взаимодействия с операционной системой Windows. На первый взгляд у них много общего, но в этом тексте мы сконцентрируемся на ключевых отличиях командной строки CMD и PowerShell.

Что из себя представляет командная строка Windows?

Интерпретатор командной строки (более распространенное название — командная строка Windows) — это командная оболочка, которая появилась впервые в MS-DOS 1980-х годов. Она позволяла пользователю взаимодействовать с операционной системой (ОС) напрямую. 

Так, данная командная оболочка предоставляет среду для запуска приложений и различных утилит — выходные данные отображаются в том же окне. Командную строку можно использовать для создания и редактирования сценариев и сохранения их в пакетных файлах, для решения задач автоматизации в рамках одной системы.

Как открыть командную строку CMD

Прежде чем проводить сравнение Windows PowerShell и CMD, хорошо бы понять, где их найти и как с ними взаимодействовать.

Существует несколько способов открыть интерфейс командной строки. Классический метод — через поисковую строку, введя в ней слова cmd или командная строка.

Для большинства этот способ быстрее и удобнее, но существует и другая возможность получить доступ к cmd.exe:

  1. Комбинацией клавиш win+r открыть меню выполнения.
  2. Ввести в открывшееся меню команду 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.

В качестве примера создадим простой выводящий текст сценарий, который состоит из одной команды:

  1. Создаем файл сценария (с расширением ps1), в котором будут прописаны команды:
Файл сценария

2. В окне PowerShell вводим & и путь к необходимому файлу:

Окно PowerShell для ввода данных

Теперь давайте разберем, как выполнять простое взаимодействие с системой при помощи CMD и PowerShell.

Как получить помощь?

Первым делом необходимо узнать, какие команды вообще существуют. Это можно узнать, запросив помощь у самого приложения.

В командной строке Windows используется команда help, чтобы отобразить список доступных команд.

В PowerShell, чтобы выполнить такое же действие используется команда Get-help.

Как изменить каталог?

Для изменения каталога (папки) в командной строке применяется команда 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.
Вывод командлета Test-Connection
Test-Connection в PowerShell
Альтернативная команда в CMD
Команда ping в CMD
  • Tracert: в PowerShell для определения маршрута следования данных в сети используется Test-NetConnection -TraceRoute.
Вывод командлета в PowerShell
Test-NetConnection -TraceRoute в PowerShell
Команда для определения маршрута следования данных в сети
Команда tracert
  • IPConfig: Get-NetIPConfiguration в PowerShell – эквивалент IPConfig.
Альтернативная команда в PowerShell
Get-NetIPConfiguration в PowerShell
IPConfig в командной строке
Вывод команды эквивалент IPConfig
  • Nslookup: Команда Resolve-DnsName выполняет DNS-запрос для указанного имени. Эта команда функционально аналогична инструменту nslookup, который позволяет пользователям запрашивать имена.
Команда Resolve-DnsName выполняет DNS-запрос для указанного имени
Командлет Resolve-DnsName
Инструмент nslookup позволяет пользователям запрашивать имена
Команда nslookup в CMD
  • Netstat: Get-NetRoute в PowerShell получает текущие TCP-соединения.
Вывод Get-NetRoute
Командлет Get-NetRoute в PowerShell
Вывод команды netstat
Команда netstat
  • Route: Команда Get-NetRoute является аналогом route и получает информацию о маршруте IP из таблицы маршрутизации IP.
Вывод Get-NetRoute в PowerShell
Командлет Get-NetRoute в PowerShell
Вывод route в CMD
Команда route
  • Netsh: Netsh – служебная программа на базе командной строки, позволяющая показывать или изменять конфигурацию сети активного компьютера. Чтобы запустить ее, и в Windows Powershell, и в CMD используется одна и та же команда — netsh.
Команда netsh в PowerShell
Команда netsh в CMD
И в Windows Powershell, и в CMD используется одна и та же команда — netsh
  • Gpupdate: ее аналогом является команда Invoke-GPUpdate. Она обновляет параметры групповой политики, включая параметры безопасности, установленные на удаленных компьютерах.
Командлет Invoke-GPUpdate в PowerShell
Командлет Invoke-GPUpdate
GPUpdate
  • Gpresult: Команда Get-GPResultantSetOfPolicy получает и записывает в файл информацию о результирующих политиках (RSoP) для пользователя.
Командлет Get-GPResultantSetOfPolicy в PowerShell
Командлет Get-GPResultantSetOfPolicy
Вывод Gpresult в командной строке
Команда Gpresult

Разница между командной строкой CMD и Windows PowerShell: что выбрать

Мы завершили обзор, которые условно можно назвать «PowerShell против CMD». Очевидно, есть много причин, по которым Windows PowerShell заменила командную строку Windows по умолчанию в ОС Windows 10. Но, если вы привыкли к CMD, вам не обязательно переходить на PowerShell.

Хотя переход не будет болезненным: в среде PowerShell большинство команд из CMD работают. Все потому, что были созданы псевдонимы командной строки в PowerShell, которые позволяют интерпретировать старые команды cmd как новые команды PowerShell.

Какой инструмент выбрать — ваш выбор. Но PowerShell – более современен. В две основные функции PowerShell встроены дополнительные возможности. И эти возможности, или сценарии использования, являются причиной растущей популярности PowerShell.

Чтобы узнать, как старые команды CMD соотносятся с новыми командами PowerShell, используйте команду Get-Alias.