Базовые команды Powershell для сисадмина. Чем powershell отличается от cmd


Сравнение CMD и PowerShell

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

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

Ping

На замену утилите 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 Contoso\administrator

 

Примечание. Командлет использует класс 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, например:

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.1Set-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 ? Не знаю как вы, а я не готов однозначно ответить на этот вопрос. Впрочем, ничто не мешает нам пользоваться и тем и другим.

windowsnotes.ru

В чём разница между cmd и PowerShell Windows?Компьютер76

C появлением Windows 7 к возможностям системы добавилась ещё одна программная оболочка для работы чистыми командами, не оформленная в графический интерфейс. С момента появления к ней всё чаще приковывают внимание сами разработчики, а в Windows 10 она вообще предлагается командной консолью по умолчанию. С каждой последующей версией Windows PSH (Пи-Эс-Эйч) обрастает всё большими возможностями. И на фоне развития Windows разница между cmd и PowerShell (Пауэр Шел) становится всё принципиальнее.

почти не отличимы; внешне их можно сделать идентичными

Разница между cmd и PowerShell: не только в цветах.

Более могущественная, и столь же усложнённая. В один ряд с терминалом Линукс по своей многозадачности её ставить нельзя: мелко плавает. Но по сравнению с cmd она может гораздо больше, и это на фоне того факта, что практически всё, что может cmd, прокатит и в PowerShell. Однако для работы с shell придётся использовать уже отдельный вид команд, которые, дабы на русском не звучало косноязычно, переводчики назвали «командлетами». В отличие от cmd, в shell команды исполняются по нескольким каналам. Это значит, что выход одной команды (в смысле, командлета) может быть одновременно входом в другую. И всё потому, что командлеты  PowerShell — это вполне себе определённые объекты, представители конкретной структуры данных. Даже те командлеты, которые встречают в ответе shell на запрос пользователя. Выражаясь языком программистов, PSH — объектно-ориентированный, а cmd обрабатывает только символы или последовательность символов. Проще говоря, PowerShell позволяет работать с некоторыми программами изнутри, в режиме реального времени, интерактивно. Cmd, в сущности, может только запускать утилиты, которые в Windows уже существуют (почти все они в папке C:\Windows).

Более того, PowerShell — это вполне себе законченная среда для написания и исполнения скрипта. Так что можно создавать очень сложные и объёмные скрипты для управления системой, чем те, на какие была способна консоль cmd.

Основная разница между PowerShell и cmd в том, что последняя — это обновлённая версия «отжившей» в своё время программной оболочки DOS, а в первую, как видно, Windows вдыхает новую жизнь. Очевидно демонстрируя, что от DOS команд разработчики отказываться вообще не собираются. Сравнение с DOS уже неверно, та очень ограничена в своих возможностях; cmd существовала в Windows как «наследие DOS для избранных» или ремонтный, прямой вариант самых необходимых команд. А ввод в работу PowerShell — это как своеобразное предложение, если не покопаться во внутренностях системы, то поучаствовать в изучении её возможностей и способ заняться её модификацией вполне официально: интеграция в среду .Net тому подтверждение.

Разница между cmd и PowerShell: а зачем нужен Shell обычному пользователю?

Точнее, зачем нужнА. Да, чтобы переформировывать дисковое пространство или пинговать смартфон достаточно возможностей cmd. И тот факт, что shell-язык потребует более основательного подхода при использовании командлет, это выводит работу с этой оболочкой на более высокий уровень. Но абстрактность разводить не будем, а я постараюсь впоследствии разбавить статью конкретными примерами в ссылках. Согласитесь, всё зависит от конкретных задач. И нужно признаться, овладеть shell можно только после близкого знакомства с конкретными командлетами.

Знакомство с PowerShell.

Итак, на компьютерном языке Shell — это пользовательский интерфейс, который позволяет получить доступ к службам самой ОС-и. Этот shell может иметь и вариант консоли (как мы его знаем), а может иметь и более дружелюбный интерфейс — оформленный в окна с кнопочками, по которым можно тыц-кать мышкой (PowerShell ISE). Windows PowerShell работает именно с ОС от Microsoft последних версий, основан на среде .NET framework. Первая версия Windows PSH появилась почти сразу после выпуска Windows XP, в ноябре 2006 г. Его основное призвание — автоматизация ежедневных задач и процессов, запускаемых администратором системы.

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

Get-help

Справка как она есть. Русифицирована. Информацию о командах получаем отсюда.

Get-Command

Основные командлеты PSH. Сама по себе командлет вам не даст ничего, однако для начала можно было бы ознакомиться с её именем и исполнительным модулем. Например, если нужно увидеть командлеты, работающие с IP функциями или просто сетевые командлеты, мы можем попросить у get-command:

Get-Command –Name *IP*

Остановлюсь. Командлетов сотни, а может и тысячи. Понимая это, Microsoft ввела в работу целый сервис, который позволяет в режиме онлайн компоновать атрибуты команд в командлеты и проверять их работоспособность. Знакомьтесь: Windows PowerShell Command Builder.

Успехов.

Просмотров: 598

Похожее

computer76.ru

PowerShell или CMD?

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

Ping

На замену утилите 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 Contoso\administrator

Примечание. Командлет использует класс 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 DetailedIPConfiig

Первое, для чего используют 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.ruNslookup

Для проверки DNS имен вместо nslookup можно воспользоваться командлетом Resolve-DnsName, входящий в состав модуля DNSClient. Синтаксис у них похожий, например:Resolve-DnsName -Name SRV3Можно указать тип записи (A, PTR, SRV), указать, откуда брать данные и выбрать определенный DNS-сервер, отличный от дефолтного:Resolve-DnsName -Name SRV3 -Type A -DNSOnly -Server 192.168.0.1Netstat

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

Для управления маршрутизацией вместо утилиты 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, например: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 addressesNetsh interface IP set address ″Ethernet″ static 192.168.0.11 255.255.255.0 192.168.0.1Netsh interface IP add DNSServers ″Ethernet″ 8.8.8.8И тоже самое, но уже с помощью PowerShell:Get-NetIPAddress -InterfaceIndex 3 -AddressFamily IPv4Set-NetIPInterface -InterfaceIndex 3 -Dhcp disabledNew-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1Set-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:$falseNew-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 /forceInvoke-GPUpdate -Target user -forceНу и посмотреть результирующие политики вместо Gpresult можно командлетом Get-GPResultantSetOfPolicy. Осуществить вывод результатов в HTML-файл можно командой:Get-GPResultantSetOfPolicy -ReportType Html -Path C:\gpo.htmlPowerShell или CMD?

PowerShell вполне в состоянии заменить большинство утилит командной строки. Однако остается еще один вопрос — зачем это нужно.В достоинства PowerShell, можно записать более структурированный вывод результатов, которые к тому-же можно обрабатывать — фильтровать, сортировать и изменять формат вывода. Кроме того, результатом выполнения команд PowerShell являются объекты, которые можно сохранять в переменные, передавать по конвейеру и т.п. Это очень удобно при написании скриптов.Из недостатков — большинство описанных в статье команд требуют PowerShell 3.0, а некоторые вообще есть только в четвертой версии. Также некоторые командлеты (напр. Set-NetIPAddress) работают криво не совсем так, как должны.Ну а на стороне CMD проверенный временем функционал, который есть в любой версии Windows. Кроме того, для простых задач администрирования cmd использовать привычнее, а где-то и удобнее.

источник

Вконтакте

Одноклассники

Мой мир

Facebook

E-mail

www.itworkroom.com

справочник по командам и командлетам для администрирования AD / Блог компании Netwrix / Хабр

Администраторы Windows долгое время полагались на такие проверенные временем инструменты командной строки как PING, IPCONFIG и REPADMIN. И некоторые до сих пор ими пользуются, вместо того, чтобы обратить свое внимание на PowerShell. Ashley McGlone, Premier Field Engineer Active Directory and PowerShell (именно его улыбающееся лицо вы можете видеть на фото), создал замечательное 4-страничное руководство, которое соотносит хорошо известные CMD-утилиты для работы с Active Directory с соответствующими им PowerShell-командлетами. Например, вместо PING можно использовать PowerShell командлет Test-Connection, вместо NSLOOKUP — Resolve-DNSName, вместо GPUPDATE — Invoke-GPUpdate. Многие зададут вопрос, а почему это, собственно, стоит вообще переключаться на PowerShell командлеты? Автор руководства дает тому несколько обоснований:
  1. Инструменты командной строки выводят просто текст, который требует парсинга для дальнейшей работы с ним. PowerShell позволяет передать эти данные по конвейеру и работать с ними прямо в консоли или же вывести в файл.
  2. Доступность команды. Например, вы удаленно подключайтесь к серверу через RDP, то на нем может быть не установлен adminpak.msi или Windows Rerource Kit. А PowerShell есть на каждой машине Windows Sever 2008 R2 и выше.
  3. Однотипный синтаксис. Синтаксис у различных PowerShell командлетов схож.
  4. Большое количество командлетов на все случаи жизни.
Рассмотренные CMD-утилиты и соответствующие им PowerShell командлеты
В фокусе бесплатного руководства оказались следующие CMD-утилиты:
  1. REPADMIN
  2. DCPROMO
  3. CSVDE
  4. NETDOM
  5. NLTEST
  6. GPUPDATE
  7. GPRESULT
  8. DSGET
  9. DSQUERY
  10. DSADD
  11. DSMOD
  12. DSRM
  13. DSMOVE
  14. DSACLS
  15. DNSCMD
  16. NSLOOKUP
  17. PING
  18. IPCONFIG
  19. NETSTAT
Само руководство построено на следующей логике:CMD – Switch – PowerShell командлет – PowerShell модуль – Версия Windows Server.

Большое внимание уделено тем командлетам, которые были представлены в Windows Server 2012 и PowerShell v3.

Скачать его можно на technet.

habr.com

PowerShell против CMD - Как PowerShell Изменяется из командной строки

У нас есть все, что нужно знать о PowerShell против CMD, как они отличаются, но только существенное различие между ними.

Большинство из вас должны были использовать командную строку в какой-то момент времени - будь то просто ради попробовать эксперимент или фиксируя проблемы, как восстановление данных после получения пострадавших от вируса быстрого доступа. Но, как насчет PowerShell, которые появились позже? В чем разница между ЦМД и PowerShell.

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

Лады нет; мы получили все, что вам нужно знать о них обоих. Для того, чтобы держать вещи легко, мы не будем погружаться глубоко в корни, как они различны, но только существенная разница между Powershell и ЦМДОМ будет выделена в этой статье, чтобы помочь вам выбрать, какой из них использовать.

PowerShell против CMD: История

1. Командная строка

Командная строка является интерпретатором командной строки. Он существует в Windows, начиная с внедрения Windows 95. В то время, он не был назван - «Командная строка», но только «cmd.exe», которые позволяют пользователям взаимодействовать с операционной системой через определенные команды. И тогда с Windows NT, он был назван, как - «Командная строка».

Ну, в теории, это было почти так же, как COMMAND.COM (или известный как MS-DOS) с большим количеством улучшений на борту.

В то время как командная строка была технически оболочка, но это было много недостатков. Во-первых, оболочка не может помочь автоматизировать все аспекты функциональных возможностей графического интерфейса пользователя. Во-вторых, она не поддерживает создание сложных сценариев.

2. PowerShell

Для того, чтобы преодолеть недостатки командной строки, Microsoft приступила к разработке оболочки под названием монада, которая была гораздо более мощной, чем в командной строке (может выполнять целый ряд основных административных задач, которые CMD не могла).

Позже, в том же году - 2006 - он был переименован в Microsoft PowerShell. И, в последнее время (в 2016 году), то PowerShell было сделано с открытым исходным кодом с поддержкой кросс-платформенной.

PowerShell против CMD: Технические функции

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

Если вы понятия не имеете, что язык программирования - зная технические различия не поможет.

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

PowerShell позволяет также использовать - «Трубы» - что это просто способ легко облегчить передачу информации от одной программы к другой - это делает PowerShell еще более мощным.

Кроме того, как указано выше, с помощью PowerShell, можно создавать сложные сценарии, но это не произойдет в командной строке.

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

PowerShell против командной строки: Команды

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

PowerShell Документация

Командная строка документации

Если вы просто хотите знать, основное различие в их командах, то вот что:

Когда вы наблюдаете команду как кд / реж / переименовывать (одно слово команды), это командная строка для вас. Вот почему она по-прежнему является самым простым инструментом командной строки.

Тем не менее, с Powershell, вы получите команды, чтобы быть более выразительными (описание об их работе), как:

Set-Location / Get-дети / Переименовать-пункт

Windows PowerShell против командной строки: Какой из них следует использовать?

Учитывая, что PowerShell намного более продвинутая среда командной строки, она подходит только для системных администраторов Windows,.

Если вы знаете о создании сценариев, управления автоматизированными задачами администрирования в Windows, и вы хотите больше расширяемости делает что - то PowerShell для вас. Кроме того, если вы знаете о C # язык программирования, который будет отлично выполнять свою работу.

Однако, если вы не программист и не получили ни малейшего представления, что системные администраторы - вы должны придерживаться командной строки. Он не собирается быть устаревшими. В командной строке по-прежнему будет использоваться большим количеством пользователей (включая программистов) проводить менее продвинутые, но важные вещи - как очистка жесткого диска, превращая ваш диск из GPT в MBR, оправившись от ярлыка вируса и так далее.

Вы не хотели бы использовать PowerShell, если вы хотите, чтобы исправить незначительные проблемы или просто проверить свои данные звона.

ЧИТАТЬ

MBR против GPT - значение и разницу между GPT и MBR Когда Разбиение Диска

Заключение - PowerShell против CMD

Теперь, когда вы знаете о разнице между PowerShell и CMD, вы можете выбрать любые вы хотите в соответствии с заданием вы хотите достичь. Там нет ничего выше или ниже среди двух, все это сводится к тому, что хочет пользователь.

Тем не менее путать о том, как PowerShell отличается от командной строки?

Дайте нам знать ваши мысли в комментариях внизу.

ru.affdu.com

cmd - Доступны ли все команды CMD в PowerShell?

Те команды , которые встроены в cmd.exe (например, dir, type), не могут быть напрямую вызваны в сеансе PowerShell, но вы можете называть их через cmd /c ...; например:.

PS> cmd /c ver

Однако вы обнаружите, что большинство таких команд имеют более мощные копии PowerShell. Чтобы облегчить переход, некоторые команды PowerShell (называемые командлетами) имеют псевдонимы, названные для своих предшественников cmd.exe (например, dir сглаживается до Get-ChildItem; используйте Get-Command <name>, чтобы узнать, к какой команде относится данное имя).

Обратите внимание, что PowerShell также обеспечивает превосходные замены для внешних утилит; например, PowerShell Select-String является превосходной альтернативой findstr.exe. В отличие от встроенных команд cmd.exe вы можете вызывать такие внешние утилиты непосредственно из PowerShell.

Вы можете запустить where.exe <name>, чтобы определить, относится ли данное имя команды к встроенной команде cmd.exe или к внешней утилите: если она последняя, ​​ее полный путь печатается. (Этот метод работает как с cmd.exe, так и с PowerShell, но в PowerShell вы должны включить расширение .exe, потому что просто where означает что-то другое: это псевдоним командлета Where-Object.)

Во всех этих случаях важно понимать, что синтаксис PowerShell работает совсем по-другому и что передаваемые вами аргументы будут интерпретироваться сначала PowerShell:

  • Get-Help about_Parsing предоставляет обзор высокого уровня.

  • Примечательно, что PowerShell имеет гораздо больше метасимволов, чем cmd.exe (больше символов имеет особое синтаксическое значение).

  • Особый интерес при вызове cmd /c или вызове внешней утилиты - это символ PSN3 + stop-parsing, --%, который обрабатывает оставшуюся часть команды, как если бы она вызывалась из cmd.exe; например.: cmd /c --% echo %windir%

qaru.site

Базовые команды Powershell для сисадмина — ITшник ITшнику

Оригинал здесь, таг Powershell. Удивительно, но целиком ссылку вставить не удается o.O

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

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

Ping

На замену утилите 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 Contoso\administrator

 

Примечание. Командлет использует класс 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, например:

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 addressesNetsh interface IP set address ″Ethernet″ static 192.168.0.11 255.255.255.0 192.168.0.1Netsh interface IP add DNSServers ″Ethernet″ 8.8.8.8

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

Get-NetIPAddress -InterfaceIndex 3 -AddressFamily IPv4Set-NetIPInterface -InterfaceIndex 3 -Dhcp disabledNew-NetIPAddress -InterfaceIndex 3 -IPAddress 192.168.0.11 -PrefixLength 24 -DefaultGateway 192.168.0.1Set-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:$falseNew-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 /forceInvoke-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 ? Не знаю как вы, а я не готов однозначно ответить на этот вопрос. Впрочем, ничто не мешает нам пользоваться и тем и другим.

admin-to-admin.info