PowerShell ПРОТИВ CMD – В чем разница
- TryHarder
- 03-янв-2024, 07:39
PowerShell, который в настоящее время является оболочкой командной строки по умолчанию, расширяется на них и обеспечивает еще более надежные возможности автоматизации. Это сам по себе язык сценариев с собственным ISE и поддержкой команд cmd и bash.
Поскольку они оба служат схожим целям, вы можете задаться вопросом, действительно ли они так сильно отличаются? Является ли CMD просто более простой версией PowerShell? Собирается ли PowerShell заменить командную строку в будущем? Мы ответили на эти и подобные запросы в статье ниже.
Во времена MS-DOS пользователям для управления компьютерами приходилось вводить команды исключительно через интерфейс командной строки (CLI). Со временем и инновациями MS-DOS была заменена операционными системами на основе графического интерфейса пользователя. Но одна часть CLI застряла в виде командной строки, которая была впервые выпущена в 1987 году.
Командная строка, также называемая CMD, является интерпретатором командной строки в линейке операционных систем Windows NT. Она взаимодействует с пользователем через CLI, который реализован через консоль Win32.
CMD принимает входные данные пользователя (команды) и переводит (интерпретирует) их в форму, понятную компьютеру (машинный язык). Команды CMD предварительно заданы, и каждая выполняет определенную задачу.
Эти команды можно использовать как для простых целей (например, проверки вашего ping или IP-адреса), так и для сложных задач, таких как создание пакетных файлов и сценариев для автоматизации задач системного администрирования (установка программного обеспечения, резервное копирование серверов или выход пользователей из системы на ПК в большой сети, например).
Выполнение задач с помощью CMD, как правило, быстрее и эффективнее, чем с графическим интерфейсом, особенно тех, которые могут быть выполнены путем запуска пакетов команд. Поскольку ваши команды и скрипты хранятся в текстовом файле, ваши команды можно не только повторять, но и проверять, что является еще одним большим преимуществом.
Доступ к командной строке можно получить с помощью команды run cmd
.
PowerShell - это кроссплатформенная оболочка командной строки, язык сценариев и платформа автоматизации в одном флаконе. PowerShell, построенный на новой платформе .NET Core framework, традиционно использовался системными администраторами.
В наши дни он становится все более популярным среди DevOps, облачных операторов и разработчиков благодаря таким функциям, как конвейерная цепочка, завершение табуляции / прогнозирование команд, псевдонимы, история командной строки, диски PowerShell, удаленное управление PowerShell и многое другое.
PowerShell обычно используется для задач автоматического управления системой и администрирования, управления облаком, создания, тестирования и развертывания решений в средах CI / CD и так далее. Он может работать с такими технологиями, как Azure, SQL, Exchange, AWS, Google Cloud, VMware и другими.
PowerShell использует уникальные облегченные команды, известные как командлеты (произносится command-lets). В дополнение к собственным командлетам, PowerShell также поддерживает команды CMD и Bash в виде псевдонимов. О, и вы также можете создавать свои собственные командлеты, модули и функции.
Как оболочка командной строки по умолчанию, к PowerShell можно получить доступ из меню опытного пользователя (Windows + X). Конечно, команда выполнить powershell
также отлично работает.
Хотя на первый взгляд PowerShell и CMD могут выглядеть похожими, они полностью отличаются друг от друга, от своих команд и языковой структуры до среды и возможностей написания сценариев. Вот основные различия между PowerShell и командной строкой.
Командлеты PowerShell отличаются от команд CMD в том смысле, что они являются экземплярами классов .NET, а не автономными исполняемыми файлами.
PowerShell поддерживает создание новых и пользовательских командлетов, которые могут быть созданы из нескольких строк кода, в то время как CMD этого не делает.
PowerShell также поддерживает команды CMD и команды Bash в виде псевдонимов, тогда как то же самое нельзя сказать о командной строке.
Кроме того, в PowerShell также есть собственные командлеты для работы с инструментарием управления Windows (WMI) как на локальных, так и на удаленных компьютерах, в то время как в CMD их нет.
В CMD есть множество простых пакетных команд, напоминающих MS-DOS, таких как cd
или dir
. Их может быть трудно понять / запомнить, если у вас нет большого опыта работы с ними.
С другой стороны, командлеты PowerShell намного проще в изучении и интерпретации из-за структуры языка. Командлеты PowerShell обычно соответствуют формату глагол-существительное или иногда формату глагол-модуль-существительное.
Глагол указывает, какой тип действия вы пытаетесь выполнить. Обычно используемые глаголы включают Get (получение сведений о чем-либо), Set (изменение состояния или настроек чего-либо), New (создание нового элемента) и Remove (удаление существующего элемента). Вы можете получить полный список всех возможных глаголов с помощью Get-Verb
командлета.
Module указывает, какой модуль содержит команду, в то время как Noun указывает, над каким типом элемента вы работаете.
С таким согласованным форматом, как этот, можно сделать обоснованное предположение во многих ситуациях, что значительно упрощает процесс обучения, чем с командной строкой.
Конвейер используется для последовательного выполнения нескольких команд, где выходные данные одной команды напрямую используются в качестве входных данных для следующей команды. Концепция конвейера характерна не только для PowerShell.
Уникальность заключается в том, что в PowerShell объекты используются для извлечения и возврата данных, тогда как в командной строке входные и выходные данные представляют собой просто строки. Это делает PowerShell более эффективным и способным обрабатывать сложные данные так же, как это делают языки программирования, на что не способен CMD.
В CMD вы должны передавать переменные в команды в строгом порядке, поскольку количество переменных ограничено. В PowerShell таких ограничений нет.
В PowerShell Get-Help
и Get-Command
обычно используются для понимания команд и получения дополнительной информации. Справочная система в PowerShell также интегрирована со справочными статьями в Интернете.
Использование Get-Help
дает вам информацию о том, как использовать этот командлет. Если вы используете get-help ip
, вы получаете список всех функций, командлетов и псевдонимов, связанных с IP. Если вы используете get-help set-netipaddress
, он отображает информацию только об этой конкретной функции.
Аналогично, при использовании Get-Command
отображается обширный список всех команд, установленных на компьютере. Вы можете изменить его с помощью различных параметров, таких как, Get-Command -Type Cmdlet
например.
В случае с CMD команда help отображает список доступных системных команд. Например, при вводе help dir
вместо этого отображается подробная информация о команде dir. Но это работает не со всеми командами, и в этом случае вы можете вместо этого использовать /?
поскольку это служит той же цели. Например, ping /?
отображает информацию о команде ping.
Командная строка очень ограничена в том смысле, что вы можете выполнять только базовые команды DOS, которые не имеют доступа ко многим функциям управления системой.
В CMD вам нужно было бы написать скрипт в блокноте, сохранить его как пакетный файл и запустить отдельно, тогда как это можно вызвать непосредственно в PowerShell. Обратите внимание, что CMD-скрипты сохраняются в виде .bat
файлов, тогда как PowerShell-скрипты сохраняются в виде .ps1
файлов.
В CMD также нет ISE (интегрированной среды сценариев), что означает, что она просто не может соответствовать возможностям PowerShell по созданию сложных сценариев.
PowerShell имеет доступ глубоко в систему Windows и может взаимодействовать с системными объектами на уровне ядра. Кроме того, ISE в PowerShell позволяет писать, запускать, тестировать и отлаживать команды, псевдонимы и сценарии.
Некоторые другие ключевые функции PowerShell ISE включают многострочное редактирование, выборочное выполнение, контекстно-зависимую справку, завершение табуляции, раскраску синтаксиса, поддержку языков справа налево и настройку внешнего вида, среди прочего.
Подводя итог, вот основные различия между PowerShell и CMD:
PowerShell | CMD |
Powershell использует автономные программные объекты, называемые командлетами, которые соответствуют согласованному формату глагол-существительное. | Команды CMD не соответствуют согласованному формату. |
Он также поддерживает псевдонимы и создание пользовательских командлетов. | CMD не поддерживает псевдонимы или создание новых команд. |
Powershell поддерживает команды Bash и, следовательно, системы Linux. | CMD не поддерживает системы Linux. |
В Powershell вы можете передавать выходные данные в виде объектов. | Вывод команды в CMD представляет собой строку, и вы не можете передать ее другой команде. |
В Powershell есть ISE. | У CMD нет ISE. |
Powershell имеет доступ к библиотекам программирования. | У CMD нет доступа к библиотекам программирования. |
Для обычного пользователя причина, по которой вы используете командную строку большую часть времени, скорее всего, заключается в проверке вашего ping или IP. Командная строка - прекрасный инструмент для этой цели.
Или, возможно, вы опытный пользователь со стажем и пока не хотите расставаться с CMD. CMD не исчезнет в ближайшее время, так что, если он выполняет работу за вас, это тоже нормально.
Но нельзя отрицать, что PowerShell превосходит CMD практически по всем показателям. PowerShell расширяем, подключаем друг к другу и предлагаем гораздо больше функциональности.
Внедрение PowerShell устранило проблему, с которой раньше сталкивались системные администраторы: ручной поиск командлетов в каталогах Windows и навигация по ним для автоматизации задач администрирования, особенно резервного копирования, восстановления, обновления и связанных с обслуживанием cron-заданий.
Командная строка просто не может соответствовать возможностям системного администрирования и автоматизации PowerShell. Это очевидно как для опытных пользователей, так и для системных администраторов, поэтому Microsoft, скорее всего, в конечном итоге попытается заменить cmd на PowerShell. В конце концов, PowerShell может делать большую часть того, что может CMD, и многое другое.
Большинство пользователей сталкивались с одной или двумя ошибками, из-за которых им приходилось использовать инструменты командной строки для решения проблемы. Использование powershell или cmd поначалу может показаться сложной задачей, но мы надеемся, что приведенная ниже таблица будет полезна в таких случаях. В нем мы собрали некоторые из наиболее полезных командлетов powershell и cmd-команд и кратко описали их функции.
Описание команды | Командлет PowerShell | Команда CMD |
Отображает список элементов и дочерних элементов в указанном расположении | Get-ChildItem | реж |
Получает содержимое элемента | Get-Content | Тип |
Список доступных команд с кратким описанием | Get-Command | Справка |
Отображает подробную информацию об указанной команде | Получить-Справка | /? |
Отображает текущее рабочее местоположение | Get-Location | cd |
Изменяет текущий рабочий путь на указанный | Set-Location | cd, chdir |
Список всех запущенных процессов | Get-Process | список задач |
Останавливает запущенный процесс | Остановить процесс | убить taskkill |
Копирует элементы в другое место | Копировать элемент | копировать, xcopy |
Перемещает элементы в новое местоположение | Переместить элемент | переместить |
Удаляет элемент | Удалить-Item | удалить, стереть |
Переименовывает элемент | Rename-Item | переименовать, переименовать |
Возвращает IP-адрес системы | Get-NetIPAddress | ipconfig |
Перезапускает локальную систему | Перезагрузка-Компьютер | shutdown/r |
Очищает экран | Очистить-Host | cls |