3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Windows PowerShell vs

Windows PowerShell vs. CMD: What’s The Difference?

Inside Out Security Blog » Data Security » Windows PowerShell vs. CMD: What’s The Difference?

Back in the day, booting the then-cutting-edge IBM 8086 from the floppy brought you to a green text screen with a cursor blinking at the familiar C:> prompt. Hacking boot.ini and config.sys to get my games to run was my first introduction to programming.

Eventually that C:> got replaced with a pretty GUI and boot from hard disk. That command prompt (CMD) still lived on for decades. Only recently did CMD get an upgrade, or replacement, with PowerShell, the shell application Microsoft introduced with Windows 7.

Get the Free PowerShell and Active Directory Essentials Video Course

CMD served us well for a good long time, but PowerShell is like going straight from steam engines to autonomous battery powered cars.

Командная строка пришла первой

Начиная с Windows NT и более поздних версий, Windows оснащалась интерпретатором командной строки, который называется cmd.exe, более известный как Командная строка. С его помощью пользователи могут взаимодействовать с операционной системой, используя текстовые команды и параметры.

Но хотя командная строка появилась первой, она была не первой. В предыдущих версиях операционной системы (Windows 95, 98 и ME) был более примитивный интерпретатор командной строки, называемый COMMAND.COM, более известный как MS-DOS.

Само собой разумеется, что командная строка была огромным улучшением по сравнению с устаревшим интерпретатором MS-DOS.

Несмотря на графическую природу Windows, командная строка никогда не была и не будет устаревшей. Он предлагает степень мощности и гибкости, которую просто невозможно достичь с помощью интерфейсов «укажи и щелкни» (например, пакетные сценарии), и, в зависимости от вашего уровня знаний, вы можете быстрее выполнять задачи с помощью командной строки.

Например, вот некоторые общие задачи, которые облегчаются с помощью командной строки

, Кроме того, есть несколько основных команд, которые должен знать каждый пользователь.

в случае, если вам нужно устранить проблему, и все, что у вас есть, это доступ к командной строке.

Если вы абсолютная командная строка, мы рекомендуем ознакомиться с нашим руководством для начинающих по командной строке

, Это проще, чем вы думаете, и стоит знать.

В то время как командная строка более чем достаточна для обычного пользователя, некоторые люди хотят большего — именно поэтому существуют замены командной строки, такие как консоль с открытым исходным кодом. К счастью для всех нас, у Microsoft был лучший ответ: PowerShell.

Оболочка и среда разработки

Существует Windows PowerShell в двух ипостасях: помимо эмулятора консоли с командной оболочкой есть интегрированная среда сценариев (Integrated Scripting Environment — ISE). Чтобы получить доступ к интерфейсу командной строки достаточно выбрать соответствующий ярлык в меню Windows или запустить powershell.exe из меню «Выполнить». На экране появится синее окошко, заметно отличающееся по возможностям от допотопного cmd.exe. Там есть автодополнение и другие фишки, привычные пользователям командных оболочек для Unix-систем.

Для работы с оболочкой нужно запомнить некоторые сочетания клавиш:

  • Стрелки вверх и вниз прокручивают историю для повтора ранее набранных команд;
  • Стрелка вправо в конце строки перенабирает предыдущую команду посимвольно;
  • Ctrl+Home удаляет набранный текст от позиции курсора до начала строки;
  • Ctrl+End удаляет текст от курсора до конца строки.

F7 показывает окно с набранными командами и позволяет выбрать одну из них. В консоли также работает выделение текста мышью, копипаст, позиционирование курсора, удаление, backspace — все как мы любим.

Windows PowerShell ISE является полноценной средой разработки с поддерживающим вкладки и подсветку синтаксиса редактором кода, конструктором команд, встроенным отладчиком и другими программистскими радостями. Если в редакторе среды разработки после имени команды написать знак дефис, вы получите в выпадающем списке все доступные параметры с указанием типа. Запустить PowerShell ISE можно либо через ярлык из системного меню, либо с помощью исполняемого файла powershell_ise.exe.

Читать еще:  Как узнать версию Bluetooth в Windows

CMD или PowerShell ?

Командная строка долгое время является неотъемлемой частью Windows, и за это время для нее было создано множество различных утилит. PowerShell задумывался в том числе и как альтернатива командной строке, однако сможет ли он полностью заменить ее ?

Для примера я взял наиболее распространенные утилиты командной строки, применяемые в администрировании, и попробовал подобрать им замену в PowerShell. Вот что из этого получилось.

На замену утилите ping в PowerShell пришел командлет Test-Connection, входящий в состав модуля Microsoft.PowerShell.Management. Для примера пропингуем сервер SRV3 командой:

Test-Connection -ComputerName SRV3

Можно указать для проверки сразу несколько серверов, например перечислив их через запятую:

Test-Connection -ComputerName SRV3, SRV4

или считав из файла:

Test-Connection -ComputerName (Get-Content serverlist.txt)

Еще командлет умеет запускать проверку сразу с нескольких точек. Например, для проверки сервера SRV4 с локального компьютера и с сервера SRV3 воспользуемся следующей командой:

Test-Connection -Source localhost, SRV3 -ComputerName SRV4

Параметр -Source появился только в PS 3.0. В некоторых случаях очень удобно, однако при его использовании может понадобится ввести учетные данные:

Test-Connection -Source localhost, SRV3 -ComputerName SRV4 -Credential Contosoadministrator

Примечание. Командлет использует класс Win32_PingStatus, поэтому для проверки соединения можно воспользоваться командой Get-WmiObject Win32_PingStatus, ее действие аналогично команде Test-Connection.

Tracert

Следующее средство, обычно применяемое после ping — это трассировка с помощью утилиты tracert. В PowerShell для этих целей можно задействовать командлет Test-NetConnection из модуля NetTCPIP. Не смотря на похожее название, по функционалу он довольно сильно отличается от предыдущего командлета, хотя включает в себя и его возможности. Кроме проверки TCP соединения вывод может включать в себя список IP интерфейсов, разрешение DNS-имен (DNS lookup), правила IPsec и проверку возможности установления соединения. В самом простом варианте команда выглядит так:

Test-NetConnection -ComputerName ya.ru

Для пошагового вывода в стиле tracert можно сделать так:

Test-NetConnection -ComputerName ya.ru -TraceRoute

Также можно указать определенный порт и сделать детализованный вывод:

Test-NetConnection -ComputerName ya.ru -Port 80 -InformationLevel Detailed

IPConfiig

Первое, для чего используют Ipconfig — это просмотр сетевых настроек. В PowerShell для этих целей можно воспользоваться командлетом Get-NetIPConfiguration. Так для подробного вывода настроек для всех сетевых интерфейсов (аналог ipconfig /all) введем команду:

Get-NetIPConfiguration -All -Detailed

Для операций с клиентом DNS воспользуется командлетами PowerShell из модуля DNSClient. Для очистки содержимого локального кеша DNS вместо ipconfig /flushdns выполним команду Clear-DnsClientCache, для перерегистрации вместо ipconfig /registerdns — команду Register-DnsClient. Вывести содержимое кеша (ipconfig /displaydns) можно командой Get-DnsClientCache. Также можно выводить не все содержимое кеша, а посмотреть только определенную запись, например:

Get-DnsClientCache -Entry www.bing.ru

Nslookup

Для проверки DNS имен вместо nslookup можно воспользоваться командлетом Resolve-DnsName, входящий в состав модуля DNSClient. Синтаксис у них похожий, например:

Resolve-DnsName -Name SRV3

Можно указать тип записи (A, PTR, SRV), указать, откуда брать данные и выбрать определенный DNS-сервер, отличный от дефолтного:

Resolve-DnsName -Name SRV3 -Type A -DNSOnly -Server 192.168.0.1

Netstat

Утилита Netstat — еще один инструмент сетевой диагностики, показывающий сетевые подключения. Заменим ее командлетом Get-NetTCPConnection. Следующая команда выведет все подключения к интернету, имеющие статус установленных (Established):

Get-NetTCPConnection -State Established -AppliedSettings Internet | ft -auto

Route

Для управления маршрутизацией вместо утилиты Route воспользуемся несколькими командлетами из модуля NetTCPIP. Для примера попробуем добавить новый постоянный маршрут до сети 172.16.0.0 с маской 255.255.0.0 и шлюзом 192.168.0.1 для интерфейса с номером 3. Вот так это можно сделать с помощью Route:

Route -p add 172.16.0.0 mask 255.255.0.0 192.168.0.1 -if 3

А вот так при использовании PowerShell:

New-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1

Для просмотра таблицы маршрутизации вместо route print возьмем командлет Get-NetRoute. Выведем все маршруты для протокола IPv4 командой:

Get-NetRoute -AddressFamily IPv4 | ft -auto

В PS 4.0 появился интересный командлет Find-NetRoute, с помощью которого можно вывести маршрут для одного конкретного IP-адреса, например:

Find-NetRoute -RemoteAddress 10.0.0.1

Для удаления маршрута (вместо route delete) также есть отдельный командлет Remove-NetRoute, например:

Читать еще:  Конвертируем FAT32 в NTFS из Windows без потери файло?

Remove-NetRoute -DestinationPrefix ″172.16.0.0/16″ -InterfaceIndex 3 -NextHop 192.168.0.1 -Confirm:$false

Для изменения уже созданного маршрута вместо route change можно воспользоваться связкой Remove-NetRoute&New-NetRoute.

Netsh

Утилита Netsh (Network shell) предназначена для выполнения различных задач по настройке сети. Поскольку функционал ее достаточно широк, для сравнения возьмем одну из типичных задач по настройке сетевого интерфейса. Предположим, нам необходимо проверить настройки сетевого интерфейса, и если включен DHCP — отключить его и настроить статическую адресацию. С помощью netsh это будет выглядеть следующим образом:

Netsh interface IPv4 show addresses
Netsh interface IP set address ″Ethernet″ static 192.168.0.11 255.255.255.0 192.168.0.1
Netsh interface IP add DNSServers ″Ethernet″ 8.8.8.8

И тоже самое, но уже с помощью PowerShell:

Get-NetIPAddress -InterfaceIndex 3 -AddressFamily IPv4
Set-NetIPInterface -InterfaceIndex 3 -Dhcp disabled
New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1
Set-DNSClientServerAddress -InterfaceIndex3 -ServerAddresses (″8.8.8.8″)

Что интересно, для изменения сетевых настроек придется их удалить и создать заново. Например IP-адрес можно изменить так:

Remove-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$false
New-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.12 -PrefixLength 24 -DefaultGateway 192.168.0.1 -Confirm:$false

Примечание. Для изменения IP-адреса логично было бы воспользоваться специально предназначенным для этого командлетом Set-NetIPAddress, но не тут-то было При попытке изменить настройки этот командлет стабильно выдает ошибку. Как выяснилось, этот командлет не может изменить сам IP-адрес, а только некоторые его свойства.

Gpupdate и Gpresult

Для обновления групповых политик вместо Gpupdate в модуле GroupPolicy есть командлет Invoke-GPUpdate. Синтаксис у них практически один и тот же, например принудительное обновление политик пользователя выполняется командой:

Gpupdate /target:user /force
Invoke-GPUpdate -Target user -force

Ну и посмотреть результирующие политики вместо Gpresult можно командлетом Get-GPResultantSetOfPolicy. Осуществить вывод результатов в HTML-файл можно командой:

Get-GPResultantSetOfPolicy -ReportType Html -Path C:gpo.html

CMD vs PowerShell

Как видите, PowerShell вполне в состоянии заменить большинство утилит командной строки. Однако остается еще один вопрос — зачем это нужно.

В достоинства PowerShell, на мой взгляд, можно записать более структурированный вывод результатов, которые к тому-же можно обрабатывать — фильтровать, сортировать и изменять формат вывода. Кроме того, результатом выполнения команд PowerShell являются объекты, которые можно сохранять в переменные, передавать по конвейеру и т.п. Это очень удобно при написании скриптов.

Из недостатков — большинство описанных в статье команд требуют PowerShell 3.0, а некоторые вообще есть только в четвертой версии. Также некоторые командлеты (напр. Set-NetIPAddress) работают криво не совсем так, как должны.

Ну а на стороне CMD проверенный временем функционал, который есть в любой версии Windows. Кроме того, для простых задач администрирования cmd использовать привычнее, а где-то и удобнее.

Итак, что же лучше — CMD или PowerShell ? Не знаю как вы, а я не готов однозначно ответить на этот вопрос. Впрочем, ничто не мешает нам пользоваться и тем и другим.

Как вернуть PowerShell в меню WinX

Если вам нравится использовать CMD поверх PowerShell, есть несколько способов вернуть PowerShell. Здесь я перечислю различные способы замены PowerShell на CMD.

Метод 1 (Использование свойств панели задач)

Чтобы заменить PowerShell на CMD в меню Windows:

  1. Щелкните правой кнопкой мыши на панели задач Windows 10 и выберите свойства.

2. На правой панели переключите кнопку рядом с Замените командную строку Windows PowerShell в меню, когда я щелкну правой кнопкой мыши кнопку «Пуск» или нажму Win + X, чтобы выключить.

Когда вы выходите из окна настроек, PowerShell будет заменен на CMD.

Power Move

Microsoft TechNet has a great collection of guides, examples, and links to code repositories (like GitHub). An excellent place to begin your journey. Recently, the new Windows Terminal app for Windows 10 was released that did confuse many users. However, Microsoft has made it clear that CMD is here stay. That makes a lot of sense seeing how many users still use CMD as their default command-line tool.

Next up: Looking for some CMD tips and tricks? Click on the link below to find a curated list of 11 cool CMD commands.

Last updated on 2 Sep, 2019
The above article may contain affiliate links which help support Guiding Tech. However, it does not affect our editorial integrity. The content remains unbiased and authentic.

Читать еще:  VirtualBox: изменить фиксированный диск на динамически?

Переключение из режима Server Core в GUI

В том случае, если сервер был установлен в режиме Windows Server 2012 Core, в установленных компонентах отсутствуют необходимые файлы для установки GUI (концепция минимизации занимаемого места на диске в Core режиме). По умолчанию, если нужные компоненты отсутствуют на диске, система пытается скачать их с сайта Windows Update. Если доступ в интернет у сервера отсутствует, нам придется указать альтернативные источник установки (с помощью команды powershell Install-WindowsFeature с параметром -Source).

Для установки графического интерфейса нам понадобится дистрибутив Windows Server 2012. Допустим, мы вставили (смонтировали iso образа) дистрибутив Windows Server 2012 в устройство, которому назначена буква D:.

Далее нужно определить индекс установленной версии Windows Server 2012 в установочном wim образе. Для этого наберите команду, отображающую информацию о содержимом установочного образа:

Т.к. на сервере установлен Windows Server 2012 Datacenter, нас интересует дистрибутив SERVERDATACENTER, индекс которого 4.

Далее нужно установить недостающие компоненты (Server GUI) из wim файла командой:

Процедура установки займет порядка 5-10 минут. В том случае если при установке будут наблюдаться проблемы, попробуйте отключить сетевые карты, чтобы Windows не пыталась скачать файлы с сайта Windows Update.

После выполнения команды сервер автоматически перезагрузится и загрузится уже в графическом режиме.

Графические компоненты Windows Server 2012 можно также установить и с помощью DISM, ту же самую операцию выполним с помощью двух команд:

В том случае, если сервер изначально был установлен в GUI режиме, который затем отключили, его можно вернуть командой:

Подсчет объектов

Командлет: Measure-Object

Для начала нужно определить число дисков в системе, перенаправив информацию о дисках командлету Measure-Object.

Тонкость в том, что нумерация дисков начинается с нуля, поэтому для перебора нужно отнять от их числа единицу. Чуть ниже вы увидите еще один способ.

Командлет: For

Число дисков можно задать в цикле перебора с помощью for, и у меня получилась такая вполне рабочая конструкция.

Номер диска у классов Win32_DiskDrive и Win32_DiskPartition обозначается разными свойствами — Index и DiskIndex соответственно. А остальное читается легко. Сначала выбирается диск 0 и выводится информация по нему, а затем – по его разделам.

Увидев этот код Вадимс сначала посоветовал работать с классом напрямую, чтобы использовать фильтр вместо Where-Object.

Этот подход надежнее и позволяет избежать лишнего этапа на конвейере. Но он работает только при обращении к классу напрямую, как в случае с разделами, но не проходит, если класс уже помещен в переменную ($DiskDrive). Можно избавиться от нее, но тогда получается два запроса к Win32_DiskDrive, что неэффективно с точки зрения производительности.

В результате Вадимс показал мне решение, вокруг да около которого я очень долго ходил. Он элегантно поместил класс WMI в массив (первая строка) и воспользовался его свойством Count для подсчета дисков.

PowerShell or cmd: Which should I choose

Clearly, there are many reasons why Windows PowerShell replaced the Command Prompt as the default in the Windows 10 operating system, and was preinstalled starting with Windows XP. But if you’re used to using cmd, you don’t need to feel any urgency in switching to PowerShell. In fact, most commands from cmd work fine in the PowerShell environment — Microsoft wanted to simplify the lives of system administrators, so it created command prompt aliases in PowerShell that enable it to interpret old DOS commands as new PowerShell commands.

To find out how old cmd commands map to the newer PowerShell cmdlets, use the Get-Alias command:

However, there is a good case to be made for making the leap to PowerShell. Everything you can do with cmd you can also do with PowerShell — and often it is more convenient, since there is a special environment to develop and test scripts. Additionally, PowerShell is a live language with a strong community ready and willing to help those new to scripting.

  • Keyboard Shortcuts for System Administrators

If you are a beginner and have questions about how to get started with Windows PowerShell, here is a PowerShell tutorial that will help you learn the basics of scripting and code creation:

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector