Интегрированная среда сценариев windows powershell что это

Рассказываем о работе с Windows PowerShell. Какие основные команды используются и чем отличается от CMD.exe

Рассказываем про Windows PowerShell — технологию для автоматизации рутинных задач, пришедшую на смену bat-файлам.

Работа с консолью Microsoft Windows

Ранее мы рассматривали командные интерпретаторы COMMAND.CMD и CMD.EXE, обеспечивающие автоматизацию задач в семействе операционных систем Microsoft Windows. Фактически данные интерпретаторы не получали обновлений с начала 2000-х годов и существуют в современных операционных системах для обеспечения совместимости.

Подробнее о bat-файлах →

Хотя современные операционные системы предлагают богатый на функции графический интерфейс, ряд однотипных задач быстрее решается через консоль. Более того, серверные редакции ОС не предоставляют графический интерфейс по умолчанию, поэтому интерпретатор командной строки является неотъемлемой частью практически любой операционной системы.

Помимо отсутствия обновлений, CMD.EXE имеет ограниченный функционал. Он не позволяет писать сложную логику и полностью отказаться от использования графического интерфейса. Корпорация Microsoft пыталась решить эти проблемы с помощью инструмента под названием Microsoft Script Host, который имел интеграцию со скриптовыми языками JScript и VBScript.

Однако Microsoft Script Host имел ряд собственных проблем:

  • плохо интегрировался с командной оболочкой операционной системы,
  • сопровождался скудной документацией,
  • разные версии Windows имели командные интерпретаторы с разным набором команд,
  • инструмент становился отличным вектором для атак.

Все это побуждало Microsoft сделать командный интерпретатор с нуля.

В 2003 году корпорация Microsoft начала разработку нового инструмента — Microsoft Shell (MSH), или Monad. Спустя три года и три бета-версии Monad была официально выпущена под новым названием Windows PowerShell 1.0 на Windows XP и Windows Vista. По ходу развития командная оболочка меняла свои названия на PowerShell Core и PowerShell.

При создании PowerShell разработчики задались целью создать инструмент, который позволил бы с легкостью использовать множество разнородных интерфейсов, предоставляемых операционной системой. Новый инструмент должен быть консистентным и легким для администратора, несмотря на количество технологий «под капотом». Например, PowerShell предоставляет доступ к API .NET-фреймворка, но не требует от администратора знания .NET.

Как и любой командный интерпретатор, PowerShell умеет запускать исполняемые файлы и имеет встроенные команды. Однако у PowerShell встроенные команды имеют название «командлет», появившееся от английского cmdlet.

Что такое командлет?

В основе взаимодействия с PowerShell лежат объекты, а не текст, как у CMD.EXE и командных интерпретаторов в *nix-системах. Такой подход меняет взгляд на организацию встроенных команд.

Командлет — это встроенная команда в PowerShell, выполняющая одну задачу и реализованная на .NET. Имя командлета соответствует правилу Глагол-Существительное, которое можно читать как Действие-Объект.

Самый важный командлет, о котором необходимо узнать в первую очередь, — Get-Help. Он отображает справочную информацию о PowerShell и командлетах.

# Получить общую справку по PowerShell
Get-Help

# Получить справку по командлету Get-Content
Get-Help Get-Content

# Получить справку по командлету Get-Help
Get-Help Get-Help

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

Get-Help Get-Help
get-help get-help
GET-HELP GET-HELP
GeT-hElP gEt-HeLp

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

В первой версии PowerShell все командлеты были реализованы на .NET, но начиная с версии 2.0 появилась возможность писать командлеты с использованием синтаксиса PowerShell.

Основы программы PowerShell

Перейдем к практике. PowerShell является кроссплатформенным инструментом и может быть запущена на Linux и macOS, но в данной статье будет рассматриваться только «родное» окружение — Windows.

Как запустить?

Программа в меню

Запуск PowerShell можно произвести из меню поиска около кнопки Пуск, набрав powershell.

PowerShell в меню

Аналогично можно запустить PowerShell через диалоговое окно Выполнить…, которое открывается через сочетание клавиш Windows + R.

Если по каким-то причинам у вас не установлен PowerShell, то необходимо сделать это, следуя инструкции в базе знаний Microsoft.

Установка PowerShell

В случае успеха откроется синее окно. Windows PowerShell готов к вашим командам.

Синтаксис

Синтаксис PowerShell похож на синтаксис других командных интерпретаторов. Сначала команда, а затем аргументы команды. Несколько команд в одной строке разделяются точкой с запятой. Рассмотрим на примере.

Get-Help Get-Command -Online

Данная команда откроет в браузере вкладку с описанием командлета Get-Command в базе знаний Microsoft. Разберем подробнее:

  • Get-Help – команда, в данном случае командлет,
  • Get-Command – первый позиционный аргумент, который передается командлету,
  • -Online – ключ, то есть именованный аргумент.

Обратите внимание, что в CMD.EXE именованные аргументы, то есть ключи, для встроенных команд начинались с символа слэш (/). У командлетов аргументы начинаются со знака минус. Использование знака / в PowerShell недопустимо и будет интерпретировано как ошибка.

Хотя PowerShell во многом похож на CMD.EXE, он имеет несколько существенных отличий. Во-первых, обращение к переменным производится через символ доллар, а не через знак процента. Во-вторых, PowerShell позволяет определять функции. Например:

function Get-Version {
    $PSVersionTable.PSVersion
}

Данный код объявит функцию Get-Version, которая обращается к системной переменной (объекту) PSVersionTable и возвращает значение поля PSVersion. Проще говоря, выводит версию PowerShell.

Именование командлетов может быть неочевидным для администраторов с опытом работы с другими командными интерпретаторами. Поэтому рассмотрим основные команды Windows PowerShell.

Основные команды языка Windows PowerShell

В следующей таблице перечислены основные команды PowerShell и их аналоги в *nix-подобных системах и CMD.EXE. В версии PowerShell 7 количество командлетов превышает полторы тысячи!

Командлет (псевдоним) Команда в *nix Команда в CMD.exe Описание
Get-Location (pwd) pwd Выводит путь до текущего каталога
Set-Location (cd) cd cd Меняет текущий каталог
Get-ChildItem (ls) ls dir Выводит содержимое текущего каталога
Get-ChildItem find find Производит поиск файлов по заданным критериям
Copy-Item (cp) cp cp Копирует файл
Remove-Item (rm) rm rm Удаляет файл
New-Item (mkdir) mkdir mkdir Создает каталог
New-Item touch Создает пустой файл
Get-Content (cat) cat Выводит файлы
Get-Content tail Выводит последние 10 строк
Where-Object grep Производит фильтрацию
Create-Volume
Format-Volume
mkfs Форматирует раздел
Test-Connection ping ping.exe Отправляет ICMP-запросы, «пингует»
Get-Help (man) man help Показывает справку

После работы в консоли *nix командлет для популярного действия, смены каталога, выглядит громоздко и непривычно. К счастью, командлеты имеют псевдонимы (алиасы), которые могут не следовать правилу именования командлетов. Список известных псевдонимов можно получить с помощью командлета Get-Alias.

Хотя таблица, представленная выше, значительно облегчит назначение командлетов, не стоит ожидать от командлетов поведения как в *nix-системах. Так, например, в PowerShell командлет Get-Content создан для вывода содержимого одного файла на экран, в то время как на *nix-системах утилита cat изначально использовалась для конкатенации (процесса соединения) нескольких файлов с последующим выводом на экран.

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

Утилита ping

Отдельно хочется отметить командлет Test-Connection, который делает то же самое, что утилита ping, но не имеет такого алиса. Разница между утилитой и командлетом в формате вывода: утилита выводит текст, а командлет возвращает объект, который можно использовать в конвейерах.

Конвейер PowerShell: особенности и параметры

По своей задумке конвейеры в PowerShell не отличаются от конвейеров в *nix-системах: они перенаправляют вывод одной команды на ввод другой. Как отмечалось ранее, в PowerShell происходит взаимодействие не с текстом, а с объектами. При выводе на экран объект трансформируется в таблицу, чтобы человеку было удобнее читать, но не всегда таблица выводит все поля объекта.

Особенность конвейеров PowerShell заключается в том, что конвейер передает результат не целиком, а по одному объекту. Командлет Test-Connection выводит четыре объекта: по одному на каждый ICMP-запрос. Если подключить командлет к конвейеру, то можно увидеть подтверждение этому тезису. Воспользуемся командлетом Select-Object, чтобы выбрать колонку со временем запроса.

Test-Connection selectel.ru | Select-Object ‘Time(ms)’

После запуска данной команды можно наблюдать, как с некоторой задержкой печатаются пустые строки по одной.

Test-connection

Но как же так? Дело в том, что отображение объекта при выводе на экран не всегда соответствует имени поля в объекте. Чтобы получить полный список полей в объекте, необходимо вызвать командлет Get-Member.

PS C:Userssun> Test-connection selectel.ru | Get-Member


   TypeName: System.Management.ManagementObject#rootcimv2Win32_PingStatus

Name                           MemberType     Definition
----                           ----------     ----------
PSComputerName                 AliasProperty  PSComputerName = __SERVER
Address                        Property       string Address {get;set;}
BufferSize                     Property       uint32 BufferSize {get;set;}
NoFragmentation                Property       bool NoFragmentation {get;set;}
PrimaryAddressResolutionStatus Property       uint32 PrimaryAddressResolutionStatus {get;set;}
ProtocolAddress                Property       string ProtocolAddress {get;set;}
ProtocolAddressResolved        Property       string ProtocolAddressResolved {get;set;}
RecordRoute                    Property       uint32 RecordRoute {get;set;}
ReplyInconsistency             Property       bool ReplyInconsistency {get;set;}
ReplySize                      Property       uint32 ReplySize {get;set;}
ResolveAddressNames            Property       bool ResolveAddressNames {get;set;}
ResponseTime                   Property       uint32 ResponseTime {get;set;}
ResponseTimeToLive             Property       uint32 ResponseTimeToLive {get;set;}
RouteRecord                    Property       string[] RouteRecord {get;set;}
RouteRecordResolved            Property       string[] RouteRecordResolved {get;set;}
SourceRoute                    Property       string SourceRoute {get;set;}
SourceRouteType                Property       uint32 SourceRouteType {get;set;}
StatusCode                     Property       uint32 StatusCode {get;set;}
Timeout                        Property       uint32 Timeout {get;set;}
TimeStampRecord                Property       uint32[] TimeStampRecord {get;set;}
TimeStampRecordAddress         Property       string[] TimeStampRecordAddress {get;set;}
TimeStampRecordAddressResolved Property       string[] TimeStampRecordAddressResolved {get;set;}
TimestampRoute                 Property       uint32 TimestampRoute {get;set;}
TimeToLive                     Property       uint32 TimeToLive {get;set;}
TypeofService                  Property       uint32 TypeofService {get;set;}
__CLASS                        Property       string __CLASS {get;set;}
__DERIVATION                   Property       string[] __DERIVATION {get;set;}
__DYNASTY                      Property       string __DYNASTY {get;set;}
__GENUS                        Property       int __GENUS {get;set;}
__NAMESPACE                    Property       string __NAMESPACE {get;set;}
__PATH                         Property       string __PATH {get;set;}
__PROPERTY_COUNT               Property       int __PROPERTY_COUNT {get;set;}
__RELPATH                      Property       string __RELPATH {get;set;}
__SERVER                       Property       string __SERVER {get;set;}
__SUPERCLASS                   Property       string __SUPERCLASS {get;set;}
ConvertFromDateTime            ScriptMethod   System.Object ConvertFromDateTime();
ConvertToDateTime              ScriptMethod   System.Object ConvertToDateTime();
IPV4Address                    ScriptProperty System.Object IPV4Address {get=$iphost = [System.Net.Dns]:...
IPV6Address                    ScriptProperty System.Object IPV6Address {get=$iphost = [System.Net.Dns]:...

Можно визуально оценить список и найти поле ResponseTime. Также в начале указан тип данного объекта, Win32_PingStatus, информацию о котором можно поискать в базе знаний Microsoft. В документации не только перечислены поля, но и их назначение. Таким образом, конечный вид конвейера будет таким:

Test-connection selectel.ru | Select-Object ResponseTime

Хотя PowerShell побуждает к интерактивной работе, его основное предназначение — автоматизировать рутинные задачи. Значит, необходимо писать скрипты.

Используйте PowerShell в работе с выделенным сервером

Соберите сервер в конфигураторе под свои задачи. Или выберите из более 100 готовых.

Подобрать

Интегрированная среда разработки

Среда разработки

Если вы запускали PowerShell через поиск, вероятно, вы могли заметить приложение Windows PowerShell ISE.

PowerShell-скрипты — это текстовые файлы с расширением .ps1.

Windows PowerShell ISE — это интегрированная среда сценариев PowerShell, включающая в себя:

  • редактор PowerShell-скриптов с автодополнением,
  • окно для интерактивного выполнения командлетов в скрипте,
  • список доступных командлетов с поиском.
Перечень команд
Справка Test-Connection

Обратите внимание, что модуль ISE предоставляет графический интерфейс для генерации аргументов командлета. Помимо генерации команд, в функции модуля также входит вызов «справочника» по командлетам, аналогичного Get-Help, только в графическом интерфейсе.

После написания своего первого PowerShell-скрипта вы столкнетесь с некоторыми ограничениями. Во-первых, файл с расширением ps1 нельзя запустить «двойным кликом» по файлу. Необходимо открыть контекстное меню с помощью правой клавиши мыши и выбрать Запустить с помощью PowerShell.

Во-вторых, скрипт не запустится со следующей ошибкой:

Невозможно загрузить файл C:UserssunDocumentsHelloWorld.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/
?LinkID=135170.
    + CategoryInfo          : Ошибка безопасности: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

По умолчанию запуск PowerShell-скриптов ограничен соответствующей политикой безопасности. Посмотреть текущее значение политики безопасности можно с помощью командлет Get-ExecutionPolicy:

PS C:Userssun> Get-ExecutionPolicy
Restricted

Список возможных значений:

  • Restricted — запуск запрещен,
  • AllSigned — разрешен только запуск подписанных доверенным разработчиком скриптов,
  • RemoteSigned — разрешен запуск подписанных и собственных скриптов,
  • Unrestricted — разрешен запуск любых скриптов.

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

Set-ExecutionPolicy RemoteSigned

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

Выполнение задач в фоне

Консоль PowerShell

PowerShell позволяет выполнять задачи в фоновом режиме, эту функциональность обеспечивают командлеты с существительным Job:

  • Start-Job —  запустить команду или командлет в фоновом режиме,
  • Get-Job — показать состояние фоновых команд,
  • Wait-Job — дождаться завершения выполнения фоновой команды,
  • Receive-Job — получить результат выполнения команды.

Командлет Start-Job возвращает информацию о запущенном фоновом задании. Идентификатор, обозначенный в поле Id, является уникальным для сессии PowerShell.

Настройка удаленного выполнения

PowerShell позволяет реализовать удаленное выполнение командлетов, скриптов, но только на платформе Windows. Для включения возможности удаленного управления необходимо выполнить командлет Enable-PSRemoting с правами администратора.

Командлет Enter-PSSession запустит удаленную интерактивную сессию, а Invoke-Command выполнит команду на одном или нескольких удаленных компьютерах.

PowerShell – актуальные версии программы

PowerShell — мощный инструмент, пришедший на смену пакетным файлам. Он более функциональный и современный, а документация и различные руководства Windows PowerShell по работе делают его подходящим как для начинающих, так и продолжающих пользователей. В тексте мы составили описание PowerShell,  — рассмотрели основные возможности программы, понятия, связанные с ней, синтаксис PowerShell и структуру языка.

На момент написания статьи актуальная версия PowerShell — 7.2. Используйте этот текст в качестве краткого справочника по Windows PowerShell, администрирование систем со скриптами в этой программе будет довольно простым. 

Интегрированная среда сценариев Windows PowerShell Integrated Scripting Environment (ISE) — это поставляемая с пакетом PowerShell оболочка разработки, дополненная отладчиком и редактором сценариев. Продукт предоставляет богатые возможности, однако его потенциал используется не в полной мере. После того как мы остановимся на причинах ограниченного использования PowerShell ISE, я рассмотрю вопрос о том, как получить от этого продукта максимальную отдачу

. Но первым делом позвольте мне указать на две вещи, которые будут недоступны вам как пользователю PowerShell ISE.

  • Вы не сможете запускать и даже устанавливать PowerShell ISE в системе Windows Server 2008 Server Core, так как для работы ISE требуются недоступные в данном случае графические интерфейсы прикладного программирования.
  • Вы не сможете выполнять интерактивные консольные приложения в среде ISE, поскольку она не включает в себя консольные интерфейсы прикладного программирования. Впрочем, вы можете задействовать консольные приложения в неинтерактивном режиме или запускать внешний экземпляр такого приложения.

Почему среда PowerShell ISE используется не в полном объеме?

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

Вторая причина ограниченного использования рассматриваемого продукта сводится к тому, что в системе Server 2008 по умолчанию устанавливается лишь консольная версия PowerShell. При этом среда PowerShell ISE не устанавливается: для ее работы требуется платформа Microsoft.NET Framework 3.5.1, которая в данном случае не развернута. Если установка платформы. NET Framework 3.5.1 не составляет для вас труда, вы можете установить среду PowerShell ISE без перезагрузки системы. Делается это так. Из серверной консоли откройте Server Manager, затем меню Features и выделите пункт Add Feature. В списке программ выберите Windows PowerShell Integrated Scripting Environment и нажмите кнопку Install. Windows предложит вам подтвердить свое желание и установить одновременно. NET Framework 3.5.1. Нажмите Yes и продолжайте выполнение процедуры установки.

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

Import-Module ServerManager
Add-windowsFeature PowerShell-ISe

Все удобства графического интерфейса

Непосредственное преимущество, получаемое пользователем при работе с PowerShell ISE, проистекает из общих возможностей этого продукта как оболочки. Вы получаете доступ ко многим комбинациям «горячих» клавиш и другим средствам, стандартным для графических приложений. Так, нажав комбинацию клавиш Ctrl+A, вы сможете выделить все содержимое окна, с помощью комбинации Ctrl+C — скопировать выделенный фрагмент, нажав клавиши Ctrl+X — вырезать его, а посредством комбинации клавиш Ctrl+V — вставить этот фрагмент в нужное место. Конечно, упомянутые функции не относятся к разряду новаторских технологий, но они раз за разом дают пользователю возможность экономить время и силы. С полным списком используемых в среде PowerShell ISE клавиатурных команд быстрого вызова можно ознакомиться по адресу tinyurl.com/3odjda4.

Еще важнее доступность этого графического приложения. И хотя пользователи, привыкшие работать с подобными программами, вполне могут оставить упомянутые достоинства без внимания, отметим, что PowerShell ISE обеспечивает:

  • наглядность — пользователь может видеть многие процессы обработки на панели инструментов;
  • подсказки — графические изображения на значках, а также ярлыки, используемые для оформления меню, указывают на назначение соответствующих элементов;
  • компактность — процесс активации элементов занимает всего лишь несколько миллисекунд.

Еще одна полезная, на мой взгляд, функция — это возможность одновременной работы с несколькими открытыми сеансами и сценариями в одном экземпляре программы. Пользователь может запускать в одном окне до восьми сеансов PowerShell и большое число сценариев. Насколько большое — не могу сказать; мне приходилось одновременно открывать до 300 коротких сценариев. На первый взгляд может показаться, что упор на графический интерфейс противоречит самому методу PowerShell. В действительности же никакого противоречия нет.

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

Удаленный сеанс без хлопот

Одна из возможностей версии PowerShell 2.0 — организация удаленных сеансов. Шаг за шагом среда PowerShell ISE руководит действиями пользователя, устанавливающего интерактивный сеанс связи с удаленной системой. Прежде всего, в меню File выберите пункт New Remote PowerShell Tab (или нажмите комбинацию клавиш Ctrl+Shift+R). Система отобразит приглашение, показанное на экране 1. Введите необходимую информацию, нажмите кнопку Connect, и на экране появится стандартное диалоговое окно для введения учетных данных.

Организация интерактивного сеанса PowerShell на удаленной системе
Экран 1. Организация интерактивного сеанса PowerShell на удаленной системе

Альтернативный способ организации интерактивного сеанса PowerShell на удаленной системе состоит в применении команды EnterPSSession. Впрочем, я полагаю, что лучше воспользоваться меню File; так я экономлю некоторое время и ограждаю себя от массы хлопот. Поэтому вариант с выбором пункта New Remote PowerShell Tab стал для меня одним из предпочтительных методов работы.

Компактный инструмент

Я до сих пор предпочитаю пользоваться двумя хорошо мне знакомыми текстовыми редакторами (разработанным компанией SAPIEN Technologies пакетом PrimalScript и продуктом TextPad компании Helios Software Solutions), но если вы не остановили выбор ни на одном из редакторов, имейте в виду, что среда PowerShell ISE оставляет далеко позади известную программу Notepad, даже если речь идет о редактировании файлов, не являющихся сценариями.

При работе со сценариями и модулями PowerShell среда ISE обеспечивает заполнение команд и имен переменных нажатием клавиши Tab, а также выделение цветом синтаксических конструкций в различного рода маркерах (таких, как команды, имена параметров, ключевые слова). В оболочке можно также открывать любые текстовые файлы, что я считаю целесообразным на клиентских сайтах, поскольку ISE допускает применение регулярных выражений при выполнении операций поиска и замены, как показано на экране 2. Параметры Match case и Whole word используются как с применением регулярных выражений, так и без них.

Использование регулярных выражений в операциях поиска и замены
Экран 2. Использование регулярных выражений в операциях поиска и замены

Удобная отладка

Не приходится сомневаться в том, что PowerShell ISE действительно упрощает процесс отладки. Вот как выполняется отладка сценария в оболочке ISE. В PowerShell ISE откройте сценарий, который хотите отладить. Перед началом отладки сценарий необходимо сохранить. При работе с новым, еще не сохраненным сценарием .ps1 отладочные средства PowerShell ISE отключены.

Далее перейдите к той строке кода, где вы хотели бы приостановить его выполнение, и в меню Debug выберите пункт Toggle Breakpoint (или нажмите клавишу F9). При установке точек прерывания имейте в виду следующее.

  • Установка точек прерывания на пустых строках не допускается. Интерпретатор сценариев PowerShell игнорирует пустые строки, так что в любом случае такая точка прерывания не будет обработана.
  • Установка точек прерывания на строках комментариев возможна. Однако если за строкой комментария, содержащей точку прерывания, строк кода больше нет, точка прерывания не окажет влияния на работу сценария, поскольку выполнение сценариев PowerShell завершается с выполнением последней исполняемой строки кода. В данном случае оболочка PowerShell ISE отобразит предупреждение WARNING: Breakpoint 3 will not be hit или аналогичное сообщение.

Установив точки прерывания, в меню Debug выделите пункт Run/Continue (или нажмите клавишу F5). Оболочка ISE выполнит сценарий до первой установленной вами точки прерывания, после чего выполнение кода будет приостановлено. Далее вы сможете просмотреть текущие значения переменных, наводя на них курсор мыши в редакторе сценариев, а также отображать стек вызовов (то есть список блоков сценария, в которые вступил код). Для этого в меню Debug нужно выделить пункт Display Call Stack. Чтобы продолжить выполнение сценария, снова откройте меню Debug и выберите пункт Run/Continue (или нажмите клавишу F5). В любой момент вы можете остановить отладчик вручную, выбрав в меню Debug пункт Stop (или нажав комбинацию клавиш Shift+F5).

С помощью данного отладчика также можно обрабатывать сценарии с обязательными параметрами командной строки. После установки в сценарии точки прерывания вместо того, чтобы открывать меню Debug или нажимать клавишу F5, просто введите с клавиатуры имя сценария и необходимые параметры. Сценарий будет автоматически запущен в отладчике.

Расширяемость

В оболочке PowerShell ISE реализована еще одна полезная возможность, представляющая особый интерес для опытных пользователей: вы можете обратиться к ISE как к объекту PowerShell с помощью переменной $psISE, а затем расширить или оптимизировать ISE.

Листинг содержит несколько примеров того, как можно примерять переменную $psISE. Код во фрагменте A использует ее для расширения меню Addons. Это меню скрыто от пользователя до тех пор, пока не будут введены данные по оптимизации. В рассматриваемом случае добавляются отображаемое имя, блок сценария и клавиши быстрого вызова.

Как показывает код во фрагменте B, переменную $psISE вы можете использовать для сохранения всех выходных данных с вкладки PowerShell, на которой вы находитесь. Кроме того, с помощью этой переменной можно задавать применяемый оболочкой ISE по умолчанию размер и семейство шрифтов, как показано во фрагменте C. Это пример индивидуализации параметров, которую некоторые пользователи хотели бы осуществить в сценарии профиля PowerShell.

Более подробную информацию о том, как оптимизировать оболочку PowerShell ISE, можно найти в теме Windows PowerShell Integrated Scripting Environment (ISE) Help справочного файла PowerShell ISE.

Вопрос предпочтений

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

Листинг. Код для обращения к оболочке PowerShell ISE с помощью переменной $psISE

Начало фрагмента A
# Формирование дополнительного меню с помощью переменной $psISe.
# Вызов меню $Addons с целью сокращения объема текста, вводимого с клавиатуры.
$Addons = $psISe. CurrentPowerShellTab.AddonsMenu.SubMenus
# Очистка.
$Addons. Clear ()
# Добавление отображаемого имени, блока сценария и комбинации клавиш.
$Addons.Add ("Ping Google",{ping www.google.com},"Alt+P")
$Addons.Add ("Traceroute", {tracert $(read-host "Traceroute target:")},"Alt+T")
Конец фрагмента A
Начало фрагмента B
# Сохранение результатов текущего сеанса в файле с помощью переменной $psISe.
$psISe.CurrentPowerShellTab. output. Text |
set-content c:tmpout.txt
Конец фрагмента B
Начало фрагмента C
# Модификация шрифта отображения с помощью переменной $psISe.
# Можно использовать в файле Microsoft.PowerShellISe_profile.ps1.
$psISe.options. FontName = "Consolas"
$psISe.options. FontSize = 12
Конец фрагмента C

Алекс Ангелопулос (aka@mvps.org) — старший ИТ-консультант, специализируется на технологиях автоматизации административных задач

В данной статье мы рассмотрим такую технологию от компании Microsoft как Windows PowerShell, мы поговорим о том, что такое PowerShell, что такое командлеты и конвейер, как писать сценарии и модули, а также затронем другие не менее важные и полезные возможности Windows PowerShell.

Основы Windows PowerShell для начинающих

Содержание

  1. Что способствовало появлению Windows PowerShell?
  2. Что такое Windows PowerShell?
  3. Версии Windows PowerShell
  4. Язык PowerShell
  5. Оболочка Windows PowerShell
  6. Командлеты в PowerShell
  7. Конвейер в PowerShell
  8. Фоновое исполнение заданий
  9. Удаленное управление на PowerShell
  10. Сценарии, функции и модули в Windows PowerShell
  11. Интегрированная среда сценариев Windows PowerShell (ISE)

До появления PowerShell существовали (и существуют) следующие инструменты для автоматизации и администрирования сервисов: командная строка Windows и Windows Script Host. Но у этих технологий есть недостатки.

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

Большинство программных продуктов имеет консольный интерфейс, т.е. мы можем управлять программой, используя командную строку, при этом экономя ресурсы за счет отсутствия затрат на работу графического интерфейса. Компания Microsoft для серверной операционной системы Windows Server даже выпускает редакции без графического интерфейса (Server Core, в Windows Server 2019), но всего этого недостаточно, так как возможности командной строки ограничены, т.е. написать какую-то сложную логику для автоматизации чего-либо мы не сможем, а если и сможем, то на это нам потребуется время и знания.

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

Технология Windows Script Host позволяет выполнять все административные задачи, что и командная строка, включая их автоматизацию путем написания WSH скриптов, но здесь мы уже можем использовать полноценные языки программирования (VBScript и JScript), т.е. можно реализовывать сложную логику и алгоритмы. К тому же с помощью WSH мы управляем программными продуктами через объектный интерфейс, другими словами Windows Script Host намного «круче» чем командная строка. Но данная технология также не стала тем идеальным инструментом администрирования и автоматизации этого администрирования для системных администраторов, так как Windows Script Host требовал знаний вышеперечисленных языков программирования, что для системных администраторов на самом деле лишнее. Администраторам нужно всего лишь простой инструмент администрирования с возможностью запрограммировать какие-то действия, а углубляться в объектные модели программных продуктов на языках программирования VBScript и JScript им не хочется.

В итоге компании Microsoft необходимо было разработать такой инструмент администрирования для системных администраторов, который бы на 100 процентов удовлетворял все потребности сисадминов как в плане возможностей администрирования и автоматизации, так и в плане удобства и простоты использования, таким образом, появился Windows PowerShell.

Заметка! Курсы по SQL для начинающих на примере Microsoft SQL Server.

Что такое Windows PowerShell?

Скриншот 1

Windows PowerShell – это язык сценариев и командная оболочка Windows, которые разработаны для администрирования и конфигурирования операционных систем Windows.

PowerShell разработан на основе среды CRL и платформы .NET Framework и в отличие от командной строки, которая принимает и возвращает текст, Windows PowerShell работает с объектами. У каждого объекта в PowerShell есть свойства и методы, которые можно использовать для управления этими объектами.

В Windows PowerShell Microsoft разработала концепцию командлетов (cmdlets), которая представляет собой систему именования команд «Глагол-Существительное». Данная система позволяет системным администраторам быстрей освоить и упростить работу с PowerShell.

С помощью Windows PowerShell можно:

  • Получать доступ к файловой системе;
  • Управлять реестром;
  • Управлять службами;
  • Управлять процессами;
  • Настраивать операционную систему;
  • Устанавливать программное обеспечение;
  • Устанавливать роли и компоненты сервера;
  • Осуществлять администрирование и конфигурирование ролей и компонентов сервера;
  • Писать и использовать сценарии для автоматизации управления и администрирования;
  • Выполнять другие задачи системных администраторов.

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

Также для удобства многие часто используемые команды и утилиты в PowerShell имеют синонимы (Alias), например cls — это синоним командлета Clear-Host, dir синоним Get-ChildItem (полный список синонимов можно посмотреть путем запуска командлета Get-Alias).

Для упрощения поиска нужной команды в PowerShell есть специальный командлет Get-Command, с помощью которого можно осуществлять поиск, как по глаголу, так и по существительному. Все команды в Windows PowerShell сгруппированы в модули (например, Hyper-V, NetTCPIP), что также упрощает поиск нужной команды.

После того как нужная команда найдена, можно посмотреть инструкцию по работе с этой командой, т.е. справку, для этих целей есть специальный командлет Get-Help, например следующая команда покажет справку по командлету Get-Command:

  
   Get-Help Get-Command

Справка в Windows PowerShell может быть краткой, детальной (параметр -Detailed), полной (параметр -Full), а также можно выводить только примеры (параметр — Examples). Следующая команда покажет только примеры использования командлета Get-Command:

  
   Get-Help Get-Command -Examples

Справка PowerShell обновляемая, т.е. ее можно обновить командой Update-Help.

Заметка! Бесплатная система мониторинга IT инфраструктуры.

Версии Windows PowerShell

Первая версия PowerShell 1.0 появилась 14 ноября 2006 года и выпускалась в виде отдельного дистрибутива, который можно было установить на следующие версии операционных систем Windows: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 и Windows Vista.

В Windows Server 2008 PowerShell 1.0 поставлялся в виде компонента, который также нужно было устанавливать.

Начиная с Windows 7 и Windows Server 2008 R2, PowerShell поставляется как неотъемлемый компонент системы (т.е. предустановленный, устанавливать его не надо). Ниже представлена таблица соответствия версии PowerShell и версии операционной системы Windows (т.е. какая версия PowerShell по умолчанию установлена в той или иной версии Windows):

Версия PowerShell Версии Windows
PowerShell 2.0 Windows 7, Windows Server 2008 R2
PowerShell 3.0 Windows 8, Windows Server 2012
PowerShell 4.0 Windows 8.1, Windows Server 2012 R2
PowerShell 5.0 Windows 10, Windows Server 2016

С каждой новой версией PowerShell становится все более мощным инструментом администрирования, для сравнения в первой PowerShell было около 130 командлетов, а в PowerShell 5.0 их уже более 600!

Узнать текущую версию PowerShell можно с помощью свойства PSVersion встроенной переменной $PSVersionTable, например, выполните следующую команду:

  
   $PSVersionTable.PSVersion

Или запустите командлет

  
   Get-Variable -Name PSVersionTable –ValueOnly

где, значение PSVersion и будет версией PowerShell.

Язык PowerShell

PowerShell – это объектно-ориентированный скриптовой язык программирования.

Он используется для написания команд управления всеми компонентами операционной системы Windows в оболочке Windows PowerShell, а также для написания сценариев автоматизации задач администрирования в интегрированной среде сценариев Windows PowerShell (ISE). Язык PowerShell хоть и создан для задач администрирования, он является полноценным скриптовым языком программирования, так как имеет программные конструкции, которые присутствуют в каждом языке программирования, такие как: условия, циклы, обработка ошибок, работа с переменными, объектами, массивами.

Язык PowerShell имеет единый синтаксис написания команд и структуру именования этих команд по принципу «Глагол-Существительное», что делает данный язык интуитивно понятным как для программистов, так и для системных администраторов.

Более подробно о программировании на данном языке можете посмотреть в материале — Программирование на языке PowerShell.

Оболочка Windows PowerShell

Оболочка Windows PowerShell – это среда выполнения команд и сценариев на языке PowerShell.

Данная оболочка имеет те же возможности что и командная строка такие как: хранение истории выполнения команд, настройка внешнего вида оболочки, завершение выполнения команд сочетанием клавиш Ctrl+C, а также много других возможностей, которых нет в оболочке командной строки, например такая замечательная возможность как «подсветка синтаксиса» (появилась в PowerShell 5.0).

Запустить оболочку PowerShell можно несколькими способами, например:

  • Из командной строки, набрав PowerShell;
  • Через диалоговое окно «Выполнить» (сочетание клавиш Win+R), также набрав PowerShell;
  • В Windows 7 — Пуск->Все программы ->Стандартные ->Windows PowerShell -> Windows PowerShell;
  • В Windows 8.1 или Windows Server 2012 R2 — Пуск->Все программы ->Служебные ->Windows PowerShell;
  • В Windows 10 или Windows Server 2016 — Пуск->Все программы -> Каталог Windows PowerShell (в группе W) -> Windows PowerShell.

Пример запуска PowerShell в Windows Server 2016

Скриншот 2

Заметка! ТОП 7 популярных языков программирования.

Скриншот оболочки PowerShell в Windows Server 2016

Скриншот 3

Командлеты в PowerShell

Командлет (cmdlet) – это команда Windows PowerShell, с помощью которой можно осуществлять взаимодействие с объектами операционной системы с целью их управления.

Данные команды являются частью языка PowerShell. Командлеты построены по принципу «Глагол-Существительное», разделенные дефисом (-); другими словами, мы сначала указываем, что делать, а через дефис — над чем. Например, командлет Get-Help, где Get — это глагол, означающий «Получить», а Help — существительное «Помощь» в контексте PowerShell «Показать – Справку». Командлеты PowerShell возвращают результаты в виде объектов, что является одним из главных отличий от командной строки Windows, в которой команды возвращают только текст на экран.

Кроме командлетов на получение данных (Get), существуют и такие типы командлетов как:

  • Add – добавление данных;
  • Clear – очистить;
  • Enable – включить;
  • Disable – выключить;
  • New – создать;
  • Remove – удалить;
  • Set – задать;
  • Start — запустить;
  • Stop – остановить;
  • Export – экспортировать;
  • Import – импортировать;
  • И еще много других.

Полный список командлетов в Windows PowerShell можно посмотреть с помощью специального командлета Get-Command. Например, запустите его с параметром -CommandType cmdlet, в итоге на экране у Вас отобразится список командлетов.

  
   Get-Command -CommandType cmdlet

Как Вы уже поняли, у командлетов есть параметры, с помощью которых мы можем конкретизировать действия командлета. Параметры бывают обязательные и необязательные, например, у командлета Get-Command обязательных параметров нет.

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

Скриншот 4

Команда

Курс по SQL для начинающих

  
   Get-Command -Verb Restart

Для поиска командлета по существительному необходимо использовать параметр Noun. Например, ниже мы получили список командлетов, которые работают со службами.

Скриншот 5

Команда

  
   Get-Command -Noun Service

Если Вы не нашли нужный командлет по полному названию можете использовать маску в формате *Текст*.

Конвейер в PowerShell

Одной из главных возможностей Windows PowerShell является возможность использования конвейера при выполнении команд.

Конвейер – это передача результата работы командлета через вертикальную черту (|) другому командлету.

При этом, как Вы помните, в PowerShell командлеты работают с объектами и возвращают объекты, соответственно по конвейеру передаются также объекты.

С помощью конвейера можно выполнять сложные задачи простым и удобным способом без необходимости написания сложных алгоритмов и сценариев.

Например, давайте узнаем название самого большого файла в каталоге «C:WindowsSystem32» (простой пример конвейера).

Скриншот 6

Команда

  
   Get-ChildItem -Path "C:WindowsSystem32" -File | Sort-Object length -Descending | Select-Object -First 1

Где,

  • Get-ChildItem – командлет получения объектов в указанном каталоге;
  • Sort-Object – командлет для сортировки объектов, в нашем случае мы сортируем по размеру файла (length -Descending);
  • Select-Object – командлет выбора нужных свойств объекта, в нашем случае мы выводим стандартные поля и только самый первый объект, т.е. большой файл (параметр -First 1).

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

Фоновое исполнение заданий

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

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

В Windows PowerShell для работы с фоновыми заданиями есть следующие командлеты:

  • Start-Job – запустить фоновую задачу;
  • Stop-Job – остановить фоновую задачу
  • Get-Job – посмотреть список фоновых задач;
  • Receive-Job – посмотреть результат выполнения фоновой задачи;
  • Remove-Job – удалить фоновую задачу;
  • Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.

Для запуска в фоновом режиме необходимо написать команду Start-Job, а в фигурных скобках {} команду или набор команд, которые необходимо выполнить в фоновом режиме.

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

Запуск задачи в фоновом режиме

  
   Start-Job {Get-Service}

Смотрим на список задач запущенных в фоновом режиме

  
   Get-Job

Отображаем результат работы задания Job1

  
   Receive-Job Job1

Скриншот 7

Как видим, у нас появилась задача со статусом «Completed», т.е. она уже выполнилась (просто Get-Service отрабатывает быстро).

Для того чтобы посмотреть результат работы фоновой задачи, т.е. командлета Get-Service, мы выполнили команду Receive-Job и передали ей имя задания (можно и значение идентификатора). В результате у нас отобразился список служб.

Заметка! Рейтинг популярности антивирусов для домашних компьютеров.

Удаленное управление на PowerShell

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

Существует несколько способов удаленного управления:

  • С помощью параметра –ComputerName (есть у многих команд). Другими словами Вы передаете имя компьютера, на котором необходимо выполнить команду, в качестве параметра. Способ обладает недостатком, так как ограничивается выполнением одной команды;
  • С помощью сессий. Командлет Enter-PSSession (интерактивный сеанс). Таким способом Вы подключаетесь к удаленному компьютеру и все команды, которые Вы будете набирать в оболочке PowerShell, будут выполняться на удаленном компьютере так же, как если бы Вы набирали команды непосредственно на удаленном компьютере. Способ также обладает недостатком, так как сеанс ограничивается одним компьютером;
  • С помощью командлета Invoke-Command. С помощью данного способа можно выполнять команды или сценарии как на одном компьютере, так и на нескольких.

Например, чтобы подключиться к удаленному компьютеру (в примере ниже ServerName) интерактивным сеансом выполните следующую команду:

  
   Enter-PSSession ServerName

Сценарии, функции и модули в Windows PowerShell

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

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

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

Важно!

По умолчанию выполнение сценариев в Windows запрещено! Для того чтобы посмотреть политику выполнения сценариев выполните командлет Get-ExecutionPolicy. В результате он вернет действующую политику, например:

  • Restricted – блокируется выполнение любых сценариев (значение по умолчанию);
  • AllSigned – разрешено выполнение сценариев, которые имеют цифровую подпись;
  • RemoteSigned – разрешено выполнение локальных сценариев, все скачанные сценарии должны иметь цифровую подпись;
  • Unrestricted — разрешено выполнение любых сценариев (не рекомендуется, так как небезопасно!).

Для разрешения выполнения сценариев необходимо использовать командлет Set-ExecutionPolicy с одним из вышеперечисленных параметров.

Например, для разрешения выполнения локальных сценариев выполним следующую команду, и согласимся с внесением изменений, нажав Y.

  
   Set-ExecutionPolicy RemoteSigned

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

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

Для этого необходимо указать ключевое слово Function и затем в фигурных скобках {} написать алгоритм работы этой функции, т.е. набор команд (например, какая-нибудь часто используемая процедура: создать пользователя с определенными правами, очистить определенные каталоги и так далее). Потом необходимо сохранить все это в сценарий, но только уже с расширением .psm1, так как этот файл будет являться уже модулем.

Это еще не все, этот файл необходимо поместить в каталог, в котором PowerShell ищет модули. Таких каталогов несколько (специальный каталог в профиле пользователя, каталог, где установлен PowerShell), их можно посмотреть в переменных окружения PowerShell. Для этого выполните следующую команду

  
   Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

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

Интегрированная среда сценариев Windows PowerShell (ISE)

Для того чтобы было удобно писать сценарии, функции и соответственно модули, компания Microsoft разработала специальную графическую программу Integrated Scripting Environment.

Integrated Scripting Environment (ISE) – интегрированная среда сценариев.

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

Запустить ее можно следующим образом:

  • В Windows 7 — Пуск->Все программы ->Стандартные ->Windows PowerShell -> Windows PowerShell ISE;
  • В Windows 10 или Windows Server 2016 — Пуск->Все программы -> Каталог Windows PowerShell (в группе W) -> Windows PowerShell ISE.

Примечание! ISE не будет работать на системе Windows Server, установленной в варианте Server Core.

Скриншот интегрированной среды сценариев PowerShell (ISE) в Windows Server 2016

Скриншот 8

Заметка! ТОП 5 популярных систем управления базами данных (СУБД).

На этом у меня все, надеюсь, материал был Вам полезен! Удачи!

Powershell – Обзор

Windows PowerShell – это оболочка командной строки и язык сценариев, разработанный специально для системного администрирования. Его аналог в Linux называется Bash Scripting. Основанная на .NET Framework, Windows PowerShell помогает ИТ-специалистам контролировать и автоматизировать администрирование операционной системы Windows и приложений, работающих в среде Windows Server.

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

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

PowerShell ISE

Интегрированная среда сценариев Windows PowerShell (ISE) является хост-приложением для Windows PowerShell. В Windows PowerShell ISE вы можете запускать команды и писать, тестировать и отлаживать сценарии в одном графическом пользовательском интерфейсе на основе Windows с многострочным редактированием, завершением табуляции, окрашиванием синтаксиса, выборочным выполнением, контекстно-зависимой справкой и поддержкой прав на языки.

Вы можете использовать пункты меню и сочетания клавиш для выполнения многих тех же задач, которые вы выполняете в консоли Windows PowerShell. Например, при отладке сценария в Windows PowerShell ISE для установки точки останова строки в скрипте щелкните правой кнопкой мыши строку кода и выберите « Переключить точку останова» .

Основные команды PowerShell

Существует много команд PowerShell, и очень трудно ввести все эти команды в этом учебном пособии. Мы сосредоточимся на некоторых из наиболее важных, а также основных команд PowerShell.

Первый шаг – перейти к команде Get-Help, которая объясняет, как дать команду и ее параметр.

Получить справку

Powershell – настройка среды

Значок PowerShell можно найти на панели задач и в меню «Пуск». Просто нажав на значок, он откроется.

Значок PowerShell

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

PowerShell Ready

Версия PowerShell

Последняя версия PowerShell – 5.0, и для проверки того, что установлено на нашем сервере, мы вводим следующую команду – : $ PSVersionTable, как показано на следующем снимке экрана, и с экрана мы также знаем, что у нас есть PSVersion 4.0

PSVersionTable

Чтобы обновить до последней версии, где есть больше командлетов, мы должны загрузить Windows Management Framework 5.0 по следующей ссылке – https://www.microsoft.com/en-us/download/details.aspx?id=50395 и установить ее. ,

Windows Management Framework

PowerShell ISE

Интегрированная среда сценариев Windows PowerShell (ISE) является хост-приложением для Windows PowerShell. В Windows PowerShell ISE вы можете запускать команды и писать, тестировать и отлаживать сценарии в одном графическом пользовательском интерфейсе на основе Windows с многострочным редактированием, завершением табуляции, окрашиванием синтаксиса, выборочным выполнением, контекстно-зависимой справкой и поддержкой прав на языки.

Вы можете использовать пункты меню и сочетания клавиш для выполнения многих тех же задач, которые вы выполняете в консоли Windows PowerShell. Например, при отладке сценария в Windows PowerShell ISE для установки точки останова строки в скрипте щелкните правой кнопкой мыши строку кода и выберите « Переключить точку останова» .

Чтобы открыть его, просто зайдите в Пуск – Поиск, а затем введите – PowerShell, как показано на следующем снимке экрана.

Поиск PowerShell

Затем нажмите на Windows PowerShell ISE. Или нажмите стрелку вниз, как показано на следующем снимке экрана.

PowerShell ISE

В нем будут перечислены все приложения, установленные на сервере, а затем щелкните Windows PowerShell ISE.

Windows PowerShell ISE

Следующая таблица будет открыта –

Следующая таблица

Он состоит из трех разделов, включая: консоль PowerShell с номером 1, затем файл сценариев № 2, а третий – это командный модуль, в котором вы можете найти модуль.

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

Создание сценария

Основные команды PowerShell

Существует много команд PowerShell, и очень трудно ввести все эти команды в этом учебном пособии. Мы сосредоточимся на некоторых из наиболее важных, а также основных команд PowerShell.

Первый шаг – перейти к команде Get-Help, которая объясняет, как дать команду и ее параметр.

Получить справку

Чтобы получить список обновлений

  • Get-HotFix и установить исправление следующим образом
  • Get-HotFix -id kb2741530

Обновления

Powershell – командлеты

Командлет или «Команда let» – это облегченная команда, используемая в среде Windows PowerShell. Среда выполнения Windows PowerShell вызывает эти командлеты из командной строки. Вы можете создавать и вызывать их программно через API Windows PowerShell.

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

Командлеты сильно отличаются от команд в других средах командной оболочки следующими способами:

  • Командлеты являются объектами класса .NET Framework; а не только автономные исполняемые файлы.

  • Командлеты могут быть легко созданы из всего лишь десятка строк кода.

  • Синтаксический анализ, представление ошибок и выходное форматирование не обрабатываются командлетами. Это выполняется средой выполнения Windows PowerShell.

  • Процесс командлетов работает с объектами, не находящимися в текстовом потоке, и объекты могут быть переданы в качестве вывода для конвейерной обработки.

  • Командлеты основаны на записях, так как обрабатывают один объект за раз.

Командлеты являются объектами класса .NET Framework; а не только автономные исполняемые файлы.

Командлеты могут быть легко созданы из всего лишь десятка строк кода.

Синтаксический анализ, представление ошибок и выходное форматирование не обрабатываются командлетами. Это выполняется средой выполнения Windows PowerShell.

Процесс командлетов работает с объектами, не находящимися в текстовом потоке, и объекты могут быть переданы в качестве вывода для конвейерной обработки.

Командлеты основаны на записях, так как обрабатывают один объект за раз.

Получать помощь

Первый шаг – перейти к команде Get-Help, которая объясняет, как дать команду и ее параметр.

Получить справку

Powershell – операции с файлами и папками

Ниже приведены примеры сценариев powershell для файлов и папок.

Sr.No. Операция и описание
1 Создание папок

Пример сценария, показывающий, как создавать папки с использованием сценариев PowerShell.

2 Создание файлов

Пример сценария, показывающий, как создавать файлы с использованием сценариев PowerShell.

3 Копирование папок

Пример сценария, показывающий, как копировать файлы с использованием сценариев PowerShell.

4 Копирование файлов

Пример сценария, показывающий, как создавать файлы с использованием сценариев PowerShell.

5 Удаление папок

Пример сценария, показывающий, как удалять папки с использованием сценариев PowerShell.

6 Удаление файлов

Пример сценария, показывающий, как удалять файлы с помощью сценариев PowerShell.

7 Перемещение папок

Пример сценария, чтобы показать, как перемещать папки (папки) с помощью сценариев PowerShell.

8 Перемещение файлов

Пример сценария, показывающий, как перемещать файлы с использованием сценариев PowerShell.

9 Переименовать папки

Пример сценария, показывающий, как переименовать папку (и) с помощью сценариев PowerShell.

10 Переименовать файлы

Пример сценария, чтобы показать, как переименовать файл (ы) с помощью сценариев PowerShell.

11 Получение предмета

Пример сценария, чтобы показать, как получить элемент (ы) с помощью сценариев PowerShell.

12 Проверить наличие папки

Пример Script, чтобы показать, как проверить существование папки с помощью скриптов PowerShell.

13 Проверить наличие файла

Пример Script, чтобы показать, как проверить существование файла с помощью скриптов PowerShell.

Пример сценария, показывающий, как создавать папки с использованием сценариев PowerShell.

Пример сценария, показывающий, как создавать файлы с использованием сценариев PowerShell.

Пример сценария, показывающий, как копировать файлы с использованием сценариев PowerShell.

Пример сценария, показывающий, как создавать файлы с использованием сценариев PowerShell.

Пример сценария, показывающий, как удалять папки с использованием сценариев PowerShell.

Пример сценария, показывающий, как удалять файлы с помощью сценариев PowerShell.

Пример сценария, чтобы показать, как перемещать папки (папки) с помощью сценариев PowerShell.

Пример сценария, показывающий, как перемещать файлы с использованием сценариев PowerShell.

Пример сценария, показывающий, как переименовать папку (и) с помощью сценариев PowerShell.

Пример сценария, чтобы показать, как переименовать файл (ы) с помощью сценариев PowerShell.

Пример сценария, чтобы показать, как получить элемент (ы) с помощью сценариев PowerShell.

Пример Script, чтобы показать, как проверить существование папки с помощью скриптов PowerShell.

Пример Script, чтобы показать, как проверить существование файла с помощью скриптов PowerShell.

Powershell – Операции с датой и временем

Ниже приведены примеры сценариев powershell для системной даты и времени.

Sr.No. Операция и описание
1 Получить системную дату

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

2 Установить системную дату

Пример скрипта, чтобы показать, как установить системную дату с помощью скриптов PowerShell.

3 Получить системное время

Пример скрипта, чтобы показать, как получить системное время, используя скрипты PowerShell.

4 Установить системное время

Пример скрипта, чтобы показать, как установить системное время с помощью скриптов PowerShell.

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

Пример скрипта, чтобы показать, как установить системную дату с помощью скриптов PowerShell.

Пример скрипта, чтобы показать, как получить системное время, используя скрипты PowerShell.

Пример скрипта, чтобы показать, как установить системное время с помощью скриптов PowerShell.

Powershell – операции ввода-вывода файлов

Ниже приведены примеры сценариев PowerShell для создания и чтения различных типов файлов.

Sr.No. Операция и описание
1 Создать текстовый файл

Пример сценария, показывающий, как создать текстовый файл с использованием сценариев PowerShell.

2 Читать текстовый файл

Пример сценария, чтобы показать, как читать текстовый файл с помощью сценариев PowerShell.

3 Создать XML-файл

Пример сценария, показывающий, как создать файл XML с использованием сценариев PowerShell.

4 Читать XML-файл

Пример сценария, показывающий, как читать XML-файл с помощью сценариев PowerShell.

5 Создать CSV-файл

Пример сценария, показывающий, как создать файл CSV с использованием сценариев PowerShell.

6 Читать файл CSV

Пример сценария, показывающий, как читать файл CSV с помощью сценариев PowerShell.

7 Создать HTML-файл

Пример сценария, показывающий, как создать файл HTML с использованием сценариев PowerShell.

8 Читать HTML-файл

Пример Script, чтобы показать, как читать HTML-файл, используя скрипты PowerShell.

9 Стирание содержимого файла

Пример сценария, показывающий, как удалить содержимое файла с помощью сценариев PowerShell.

10 Добавить текстовые данные

Пример сценария, показывающий, как добавлять текст к содержимому файла с помощью сценариев PowerShell.

Пример сценария, показывающий, как создать текстовый файл с использованием сценариев PowerShell.

Пример сценария, чтобы показать, как читать текстовый файл с помощью сценариев PowerShell.

Пример сценария, показывающий, как создать файл XML с использованием сценариев PowerShell.

Пример сценария, показывающий, как читать XML-файл с помощью сценариев PowerShell.

Пример сценария, показывающий, как создать файл CSV с использованием сценариев PowerShell.

Пример сценария, показывающий, как читать файл CSV с помощью сценариев PowerShell.

Пример сценария, показывающий, как создать файл HTML с использованием сценариев PowerShell.

Пример Script, чтобы показать, как читать HTML-файл, используя скрипты PowerShell.

Пример сценария, показывающий, как удалить содержимое файла с помощью сценариев PowerShell.

Пример сценария, показывающий, как добавлять текст к содержимому файла с помощью сценариев PowerShell.

Powershell – продвинутые командлеты

Командлеты

Командлет или «Команда let» – это облегченная команда, используемая в среде Windows PowerShell. Среда выполнения Windows PowerShell вызывает эти командлеты из командной строки. Вы можете создавать и вызывать их программно через API Windows PowerShell. Ниже приведен расширенный пример использования командлетов.

Sr.No. Тип и описание командлета
1 Командлет Get-Unique

Пример программы для демонстрации командлета Get-Unique.

2

Командлет Group-Object

Пример программы для демонстрации командлета Group-Object.

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

Пример программы для демонстрации командлета Measure-Object.

4 Командлет Compare-Object

Пример программы для демонстрации командлета Compare-Object.

5 Командлет Format-List

Пример программы для демонстрации командлета Format-List.

6 Широкий формат командлета

Пример программы для демонстрации командлета Format-Wide.

7 Командлет Where-Object

Пример программы для демонстрации командлета Where-Object.

8 Командлет Get-ChildItem

Пример программы для демонстрации командлета Get-ChildItem.

9 Командлет ForEach-Object

Пример программы для демонстрации командлета ForEach-Object.

10 Командлет Start-Sleep

Пример программы для демонстрации командлета Start-Sleep.

11 Командлет Read-Host

Пример программы для демонстрации командлета Read-Host.

12 Командлет Select-Object

Пример программы для демонстрации командлета Select-Object.

13 Командлет Sort-Object

Пример программы для демонстрации командлета Sort-Object.

14 Командлет предупреждения о записи

Пример программы для демонстрации командлета Write-Warning.

15 Командлет Write-Host

Пример программы для демонстрации командлета Write-Host.

16 Командлет Invoke-Item

Пример программы для демонстрации командлета Invoke-Item.

17 Командлет Invoke-Expression

Пример программы для демонстрации командлета Invoke-Expression.

18 Командлет Measure-Command

Пример программы для демонстрации командлета Measure-Command.

19 Командлет Invoke-History

Пример программы для демонстрации командлета Invoke-History.

20 Командлет Add-History

Пример программы для демонстрации командлета Add-History.

21 Командлет Get-History

Пример программы для демонстрации командлета Get-History.

22 Командлет Get-Culture

Пример программы для демонстрации командлета Get-Culture.

Пример программы для демонстрации командлета Get-Unique.

Командлет Group-Object

Пример программы для демонстрации командлета Group-Object.

Пример программы для демонстрации командлета Measure-Object.

Пример программы для демонстрации командлета Compare-Object.

Пример программы для демонстрации командлета Format-List.

Пример программы для демонстрации командлета Format-Wide.

Пример программы для демонстрации командлета Where-Object.

Пример программы для демонстрации командлета Get-ChildItem.

Пример программы для демонстрации командлета ForEach-Object.

Пример программы для демонстрации командлета Start-Sleep.

Пример программы для демонстрации командлета Read-Host.

Пример программы для демонстрации командлета Select-Object.

Пример программы для демонстрации командлета Sort-Object.

Пример программы для демонстрации командлета Write-Warning.

Пример программы для демонстрации командлета Write-Host.

Пример программы для демонстрации командлета Invoke-Item.

Пример программы для демонстрации командлета Invoke-Expression.

Пример программы для демонстрации командлета Measure-Command.

Пример программы для демонстрации командлета Invoke-History.

Пример программы для демонстрации командлета Add-History.

Пример программы для демонстрации командлета Get-History.

Пример программы для демонстрации командлета Get-Culture.

Powershell – Сценарии

Windows PowerShell – это оболочка командной строки и язык сценариев, разработанный специально для системного администрирования. Его аналог в Linux называется Bash Scripting. Основанная на .NET Framework, Windows PowerShell помогает ИТ-специалистам контролировать и автоматизировать администрирование операционной системы Windows и приложений, работающих в среде Windows Server.

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

Кроме того, Windows PowerShell имеет расширенный синтаксический анализатор выражений и полностью разработанный язык сценариев. Таким образом, простыми словами вы можете выполнить все задачи, которые вы делаете с графическим интерфейсом и многое другое. Windows PowerShell Scripting – это полностью разработанный язык сценариев, имеющий богатый анализатор выражений /

Характеристики

  • Командлеты – Командлеты выполняют общие задачи системного администрирования, например, управление реестром, службами, процессами, журналами событий и использование инструментария управления Windows (WMI).

  • Ориентация на задачи – язык сценариев PowerShell основан на задачах и обеспечивает поддержку существующих сценариев и инструментов командной строки.

  • Согласованный дизайн – поскольку командлеты и хранилища системных данных используют общий синтаксис и имеют общие соглашения об именах, обмен данными становится простым. Вывод одного командлета может быть передан другому командлету без каких-либо манипуляций.

  • Простота использования – упрощенная навигация на основе команд позволяет пользователям перемещаться по реестру и другим хранилищам данных, аналогичным навигации по файловой системе.

  • Основанный на объектах – PowerShell обладает мощными возможностями манипулирования объектами. Объекты могут быть отправлены в другие инструменты или базы данных напрямую.

  • Расширяемый интерфейс. – PowerShell можно настраивать, поскольку независимые поставщики программного обеспечения и корпоративные разработчики могут создавать собственные инструменты и утилиты, используя PowerShell для администрирования своего программного обеспечения.

Командлеты – Командлеты выполняют общие задачи системного администрирования, например, управление реестром, службами, процессами, журналами событий и использование инструментария управления Windows (WMI).

Ориентация на задачи – язык сценариев PowerShell основан на задачах и обеспечивает поддержку существующих сценариев и инструментов командной строки.

Согласованный дизайн – поскольку командлеты и хранилища системных данных используют общий синтаксис и имеют общие соглашения об именах, обмен данными становится простым. Вывод одного командлета может быть передан другому командлету без каких-либо манипуляций.

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

Основанный на объектах – PowerShell обладает мощными возможностями манипулирования объектами. Объекты могут быть отправлены в другие инструменты или базы данных напрямую.

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

переменные

Переменные PowerShell являются именованными объектами. Поскольку PowerShell работает с объектами, эти переменные используются для работы с объектами.

Создание переменной

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

Введите следующую команду в консоли PowerShell ISE. Предполагая, что вы находитесь в папке D: test.

$location = Get-Location

Здесь мы создали переменную $ location и присвоили ей вывод командлета Get-Location. Теперь он содержит текущее местоположение.

Используя переменную

Введите следующую команду в консоли PowerShell ISE.

 $location

Выход

Вы можете увидеть следующий вывод в консоли PowerShell.

Path                                                                                    
----                                                                                    
D:test                                                                                 

Получение информации о переменной

Командлет Get-Member может указать тип используемой переменной. Смотрите пример ниже.

 $location | Get-Member

Выход

Вы можете увидеть следующий вывод в консоли PowerShell.

   TypeName: System.Management.Automation.PathInfo

Name          MemberType   Definition                                               
----          ----------   ----------                                               
Equals        Method       bool Equals(System.Object obj)                           
GetHashCode   Method       int GetHashCode()                                        
GetType       Method       type GetType()                                           
ToString      Method       string ToString()                                        
Drive         Property     System.Management.Automation.PSDriveInfo Drive {get;}    
Path          Property     System.String Path {get;}                                
Provider      Property     System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath  Property     System.String ProviderPath {get;}

Powershell – специальные переменные

PowerShell Специальные переменные хранят информацию о PowerShell. Они также называются автоматическими переменными. Ниже приведен список автоматических переменных –

оператор Описание
$$ Представляет последний токен в последней строке, полученной сеансом.
$? Представляет статус выполнения последней операции. Он содержит ИСТИНА, если последняя операция прошла успешно, и ЛОЖЬ, если она не удалась.
$ ^ Представляет первый токен в последней строке, полученной сеансом.
$ _ То же, что $ PSItem. Содержит текущий объект в объекте конвейера. Вы можете использовать эту переменную в командах, которые выполняют действие для каждого объекта или для выбранных объектов в конвейере.
$ ARGS Представляет массив необъявленных параметров и / или значений параметров, которые передаются в функцию, сценарий или блок сценария.
$ ConsoleFileName Представляет путь к файлу консоли (.psc1), который последний раз использовался в сеансе.
$ ERROR Представляет массив объектов ошибок, которые представляют самые последние ошибки.
$ EVENT Представляет объект PSEventArgs, представляющий обрабатываемое событие.
$ EventArgs Представляет объект, представляющий первый аргумент события, который является производным от EventArgs события, которое обрабатывается.
$ EventSubscriber Представляет объект PSEventSubscriber, который представляет подписчика на событие, которое обрабатывается.
$ ExecutionContext Представляет объект EngineIntrinsics, который представляет контекст выполнения хоста PowerShell.
$ FALSE Представляет ЛОЖЬ. Вы можете использовать эту переменную для представления FALSE в командах и сценариях вместо использования строки «false».
$ FOREACH Представляет перечислитель (не результирующие значения) цикла ForEach. Вы можете использовать свойства и методы перечислителей для значения переменной $ ForEach.
$ HOME Представляет полный путь к домашнему каталогу пользователя.
$ HOST Представляет объект, представляющий текущее хост-приложение для PowerShell.
$ ВХОД Представляет перечислитель, который перечисляет все входные данные, которые передаются в функцию.
$ LASTEXITCODE Представляет код завершения последней программы для Windows, которая была запущена.
$ МАТЧИ Переменная $ Matches работает с операторами -match и -notmatch.
$ MYINVOCATION $ MyInvocation заполняется только для скриптов, функций и блоков скриптов. Свойства PSScriptRoot и PSCommandPath автоматической переменной $ MyInvocation содержат информацию о вызывающем или вызывающем скрипте, а не о текущем скрипте.
$ NESTEDPROMPTLEVEL Представляет текущий уровень подсказки.
$ NULL $ null – это автоматическая переменная, которая содержит NULL или пустое значение. Вы можете использовать эту переменную для представления отсутствующего или неопределенного значения в командах и сценариях.
$ PID Представляет идентификатор процесса (PID) процесса, в котором размещается текущий сеанс PowerShell.
$ PROFILE Представляет полный путь профиля PowerShell для текущего пользователя и текущего хост-приложения.
$ PSCMDLET Представляет объект, представляющий командлет или расширенную функцию, которая выполняется.
$ PSCOMMANDPATH Представляет полный путь и имя файла запускаемого сценария.
$ PSCULTURE Представляет имя культуры, используемой в настоящее время в операционной системе.
$ PSDebugContext Во время отладки эта переменная содержит информацию о среде отладки. В противном случае он содержит значение NULL.
$ PSHOME Представляет полный путь к каталогу установки для PowerShell.
$ PSITEM То же, что $ _. Содержит текущий объект в объекте конвейера.
$ PSSCRIPTROOT Представляет каталог, из которого выполняется скрипт.
$ PSSENDERINFO Представляет информацию о пользователе, запустившем сеанс PSSession, включая идентификатор пользователя и часовой пояс исходного компьютера.
$ PSUICulture Представляет имя культуры пользовательского интерфейса (UI), которая в настоящее время используется в операционной системе.
$ PSVERSIONTABLE Представляет доступную только для чтения хэш-таблицу, в которой отображаются сведения о версии PowerShell, запущенной в текущем сеансе.
$ SENDER Представляет объект, который сгенерировал это событие.
$ SHELLID Представляет идентификатор текущей оболочки.
$ StackTrace Представляет трассировку стека для самой последней ошибки.
$ ЭТА В блоке сценария, который определяет свойство сценария или метод сценария, переменная $ This ссылается на расширяемый объект.
$ ИСТИНА Представляет ИСТИНА. Вы можете использовать эту переменную для представления ИСТИНА в командах и скриптах.

Powershell – операторы

PowerShell предоставляет богатый набор операторов для работы с переменными. Мы можем разделить все операторы PowerShell на следующие группы:

  • Арифметические Операторы
  • Операторы присваивания
  • Операторы сравнения
  • Логические Операторы
  • Перенаправленные операторы
  • Разлитые и присоединяющиеся операторы
  • Операторы типа
  • Унарные операторы

Арифметические операторы

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

Предположим, что целочисленная переменная A содержит 10, а переменная B содержит 20, тогда –

Показать примеры

оператор Описание пример
+ (Дополнение) Добавляет значения по обе стороны от оператора. А + Б даст 30
– (вычитание) Вычитает правый операнд из левого операнда. A – B даст -10
* (Умножение) Умножает значения по обе стороны от оператора. А * Б даст 200
/ (Отдел) Делит левый операнд на правый операнд. Б / у даст 2
% (Модуль) Делит левый операнд на правый операнд и возвращает остаток. B% A даст 0

Операторы сравнения

Ниже приведены операторы присваивания, поддерживаемые языком PowerShell.

Предположим, что целочисленная переменная A содержит 10, а переменная B содержит 20, тогда –

Показать примеры

оператор Описание пример
экв (равно) Сравнивает два значения, чтобы быть равными или нет. A -eq B даст ложь
ne (не равно) Сравнивает два значения, чтобы быть не равным. A -ne B даст истинное
GT (больше чем) Сравнивает первое значение с большим, чем второе. B -GT даст верный
ge (больше или равно) Сравнивает первое значение, которое больше или равно второму. B -ge A даст истинное
л (меньше чем) Сравнивает первое значение с меньшим, чем второе. Б-л д даст ложь
ле (меньше или равно) Сравнивает первое значение с меньшим или равным второму. B -le A даст ложное

Операторы присваивания

Ниже приведены операторы присваивания, поддерживаемые языком PowerShell.

Показать примеры

оператор Описание пример
знак равно Простой оператор присваивания. Назначает значения от правых операндов к левому операнду. C = A + B назначит значение A + B в C
+ = Добавить И оператор присваивания. Он добавляет правый операнд к левому операнду и присваивает результат левому операнду. C + = A эквивалентно C = C + A
знак равно Вычитание И оператор присваивания. Вычитает правый операнд из левого операнда и присваивает результат левому операнду. C – = A эквивалентно C = C – A

Логические операторы

В следующей таблице перечислены логические операторы –

Предположим, что булевы переменные A верны, а переменная B ложна, тогда –

Показать примеры

оператор Описание пример
И (логическое и) Называется логический оператор И. Если оба операнда отличны от нуля, условие становится истинным. (A -AND B) является ложным
ИЛИ (логический или) Вызывается логическим оператором ИЛИ. Если любой из двух операндов отличен от нуля, условие становится истинным. (A -OR B) верно
НЕ (логично, нет) Вызывается логическим оператором НЕ. Используйте для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. -НЕТ (А-И Б) верно

Разные операторы

Ниже приведены различные важные операторы, поддерживаемые языком PowerShell.

Показать примеры

оператор Описание пример
> (Перенаправленный оператор) Перенаправленный оператор. Назначает вывод для печати на перенаправленный файл / устройство вывода. dir> test.log напечатает список каталогов в файле test.log

Powershell – Looping

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

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

Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз, и в большинстве языков программирования ниже приводится общая форма инструкции цикла.

Петлевая архитектура

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

Sr.No. Цикл и описание
1 для цикла

Выполнить последовательность операторов несколько раз и сократить код, который управляет переменной цикла.

2 цикл forEach

Улучшено для цикла. Это в основном используется для обхода коллекции элементов, включая массивы.

3 в то время как цикл

Повторяет оператор или группу операторов, пока данное условие выполняется. Он проверяет условие перед выполнением тела цикла.

4 делать … пока цикл

Как оператор while, за исключением того, что он проверяет условие в конце тела цикла.

Выполнить последовательность операторов несколько раз и сократить код, который управляет переменной цикла.

Улучшено для цикла. Это в основном используется для обхода коллекции элементов, включая массивы.

Повторяет оператор или группу операторов, пока данное условие выполняется. Он проверяет условие перед выполнением тела цикла.

Как оператор while, за исключением того, что он проверяет условие в конце тела цикла.

Powershell – Условия

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

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

Принятие решения

Язык сценариев PowerShell предоставляет следующие типы операторов принятия решений. Нажмите на следующие ссылки, чтобы проверить их детали.

Sr.No. Заявление и описание
1 если заявление

Оператор if состоит из логического выражения, за которым следует одно или несколько операторов.

2 если … еще заявление

За оператором if может следовать необязательный оператор else , который выполняется, когда логическое выражение имеет значение false.

3 вложенный оператор if

Вы можете использовать один оператор if или elseif внутри другого оператора if или elseif .

4 заявление о переключении

Оператор switch позволяет проверять переменную на соответствие списку значений.

Оператор if состоит из логического выражения, за которым следует одно или несколько операторов.

За оператором if может следовать необязательный оператор else , который выполняется, когда логическое выражение имеет значение false.

Вы можете использовать один оператор if или elseif внутри другого оператора if или elseif .

Оператор switch позволяет проверять переменную на соответствие списку значений.

Powershell – Array

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

Вместо того, чтобы объявлять отдельные переменные, такие как number0, number1, … и number99, вы объявляете одну переменную массива, такую ​​как числа, и используете числа [0], числа [1] и …, числа [99] для представления отдельные переменные.

В этом руководстве рассказывается, как объявлять переменные массива, создавать массивы и обрабатывать массивы с использованием индексированных переменных.

Объявление переменных массива

Чтобы использовать массив в программе, вы должны объявить переменную для ссылки на массив и указать тип массива, на который может ссылаться переменная. Вот синтаксис для объявления переменной массива –

Синтаксис

$A = 1, 2, 3, 4
or
$A = 1..4  

Примечание. По умолчанию тип объектов массива – System.Object. Метод GetType () возвращает тип массива. Тип можно передать.

пример

Следующие фрагменты кода являются примерами этого синтаксиса –

[int32[]]$intA = 1500,2230,3350,4000

$A = 1, 2, 3, 4
$A.getType()

Это даст следующий результат –

Выход

IsPublic    IsSerial    Name                        BaseType                     
--------    --------    ----                        --------                     
True        True        Object[]                    System.Array 

Доступ к элементам массива осуществляется через индекс . Индексы массива основаны на 0; то есть они начинаются с 0 до arrayRefVar.length-1 .

пример

Следующий оператор объявляет переменную массива myList, создает массив из 10 элементов двойного типа и присваивает его ссылку на myList –

$myList = 5.6, 4.5, 3.3, 13.2, 4.0, 34.33, 34.0, 45.45, 99.993, 11123

Следующая картинка представляет массив myList. Здесь myList содержит десять двойных значений и индексы от 0 до 9.

Array myList

Обработка массивов

При обработке элементов массива мы часто используем цикл for или цикл foreach, поскольку все элементы в массиве относятся к одному типу, а размер массива известен.

пример

Вот полный пример, показывающий, как создавать, инициализировать и обрабатывать массивы –

$myList = 5.6, 4.5, 3.3, 13.2, 4.0, 34.33, 34.0, 45.45, 99.993, 11123

write-host("Print all the array elements")
$myList

write-host("Get the length of array")
$myList.Length

write-host("Get Second element of array")
$myList[1]

write-host("Get partial array")
$subList = $myList[1..3]

write-host("print subList")
$subList

write-host("using for loop")
for ($i = 0; $i -le ($myList.length - 1); $i += 1) {
   $myList[$i]
}

write-host("using forEach Loop")
foreach ($element in $myList) {
   $element
}

write-host("using while Loop")
$i = 0
while($i -lt 4) {
   $myList[$i];
   $i++
}

write-host("Assign values")
$myList[1] = 10
$myList

Это даст следующий результат –

Выход

Print all the array elements
5.6
4.5
3.3
13.2
4
34.33
34
45.45
99.993
11123
Get the length of array
10
Get Second element of array
4.5
Get partial array
print subList
4.5
3.3
13.2
using for loop
5.6
4.5
3.3
13.2
4
34.33
34
45.45
99.993
11123
using forEach Loop
5.6
4.5
3.3
13.2
4
34.33
34
45.45
99.993
11123
using while Loop
5.6
4.5
3.3
13.2
Assign values
5.6
10
3.3
13.2
4
34.33
34
45.45
99.993
11123

Примеры методов массивов

Вот полный пример, показывающий операции над массивами с использованием его методов

$myList = @(0..4)

write-host("Print array")
$myList

$myList = @(0..4)

write-host("Assign values")
$myList[1]  = 10
$myList

Это даст следующий результат –

Выход

Clear array
Print array
0
1
2
3
4
Assign values
0
10
2
3
4

Powershell – Hashtables

Hashtable хранит пары ключ / значение в хеш-таблице. При использовании Hashtable вы указываете объект, который используется в качестве ключа, и значение, которое вы хотите связать с этим ключом. Обычно мы использовали строку или числа в качестве ключей.

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

Объявление хеш-переменных

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

Синтаксис

$hash = @{ ID = 1; Shape = "Square"; Color = "Blue"}
or
$hash = @{} 

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

пример

Следующие фрагменты кода являются примерами этого синтаксиса –

$hash = [ordered]@{ ID = 1; Shape = "Square"; Color = "Blue"}

Распечатать хеш-таблицу.

$hash

Выход

Name                           Value    
----                           -----                                                    
ID                             1                                                        
Color                          Blue                                                     
Shape                          Square 

Доступ к значениям хеш-таблицы осуществляется через ключи .

> $hash["ID"]
 1

Обработка Hashtable

Точечная нотация может использоваться для доступа к ключам или значениям хеш-таблиц.

> $hash.keys
ID
Color
Shape

> $hash.values
1
Blue
Square

пример

Вот полный пример, показывающий, как создавать, инициализировать и обрабатывать хеш-таблицу –

$hash = @{ ID = 1; Shape = "Square"; Color = "Blue"}

write-host("Print all hashtable keys")
$hash.keys

write-host("Print all hashtable values")
$hash.values

write-host("Get ID")
$hash["ID"]

write-host("Get Shape")
$hash.Number

write-host("print Size")
$hash.Count

write-host("Add key-value")
$hash["Updated"] = "Now"

write-host("Add key-value")
$hash.Add("Created","Now")

write-host("print Size")
$hash.Count

write-host("Remove key-value")
$hash.Remove("Updated")

write-host("print Size")
$hash.Count

write-host("sort by key")
$hash.GetEnumerator() | Sort-Object -Property key

Это даст следующий результат –

Выход

Print all hashtable keys
ID
Color
Shape
Print all hashtable values
1
Blue
Square
Get ID
1
Get Shape
print Size
3
Add key-value
Add key-value
print Size
5
Remove key-value
print Size
4
sort by key

Name                           Value                                                                                                   
----                           -----                                                                                                   
Color                          Blue                                                                                                    
Created                        Now                                                                                                     
ID                             1                                                                                                       
Shape                          
Square    

Powershell – регулярное выражение

Регулярное выражение – это специальная последовательность символов, которая помогает вам сопоставлять или находить другие строки или наборы строк, используя специальный синтаксис, содержащийся в шаблоне. Их можно использовать для поиска, редактирования или манипулирования текстом и данными.

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

Подвыражение Матчи
^ Соответствует началу строки.
$ Соответствует концу строки.
, Соответствует любому отдельному символу, кроме новой строки. Использование опции m позволяет ему соответствовать и новой строке.
[…] Соответствует любому отдельному символу в скобках.
[^ …] Соответствует любому отдельному символу не в скобках.
A Начало всей строки.
г Конец всей строки.
Z Конец всей строки, кроме допустимого конечного конца строки.
ре * Соответствует 0 или более вхождений предыдущего выражения.
ре + Соответствует 1 или более из предыдущей вещи.
повторно? Соответствует 0 или 1 вхождению предыдущего выражения.
re {n} Совпадает ровно с числом вхождений предыдущего выражения.
re {n,} Соответствует n или более вхождений предыдущего выражения.
re {n, m} Соответствует не менее n и не более m вхождений предыдущего выражения.
| б Соответствует либо a, либо b.
(Ре) Группирует регулярные выражения и запоминает сопоставленный текст.
(?: re) Группирует регулярные выражения без запоминания сопоставленного текста.
(?> re) Соответствует независимому образцу без возврата.
ш Соответствует слову символов.
W Соответствует несловесным символам.
s Соответствует пробелу. Эквивалентно [ t n r f].
S Соответствует непробельному пространству.
d Соответствует цифрам. Эквивалентно [0-9].
D Совпадает с нецифрами.
A Соответствует началу строки.
Z Соответствует концу строки. Если новая строка существует, она совпадает непосредственно перед новой строкой.
г Соответствует концу строки.
Г Соответствует точке, где закончился последний матч.
п Обратная ссылка для захвата номера группы “n”.
б Соответствует границам слов вне скобок. Соответствует возврату (0x08) внутри скобок.
B Соответствует границам без слов.
n, t и т. д. Сопоставляет переводы строк, возврат каретки, вкладки и т. Д.
Q Побег (цитата) всех символов до E.
E Завершает цитирование, начинающееся с Q.

Вот полные примеры, показывающие, как использовать регулярные выражения в PowerShell;

Sr.No. Соответствие и описание
1 Совпадение персонажей

Пример поддерживаемых символов регулярного выражения.

2 Соответствие классов персонажей

Пример поддерживаемых классов символов.

3 Квантификаторы совпадений

Пример поддерживаемых квантификаторов.

Пример поддерживаемых символов регулярного выражения.

Пример поддерживаемых классов символов.

Пример поддерживаемых квантификаторов.

Powershell – Backtick

Оператор Backtick (`) также называется оператором переноса слов. Это позволяет команде записываться в несколько строк. Он также может использоваться для новой строки (`n) или табуляции (` t) в предложениях. Смотрите примеры ниже –

Пример 1

Get-Service * | Sort-Object ServiceType `
| Format-Table Name, ServiceType, Status -AutoSize

Это станет

Get-Service * | Sort-Object ServiceType | Format-Table Name, ServiceType, Status -AutoSize

Проверьте вывод как

Name                                                   ServiceType  Status
----                                                   -----------  ------
MSSQLServerADHelper100                             Win32OwnProcess Stopped
ntrtscan                                           Win32OwnProcess Running
...

Пример 2

Использование новой строки и табуляции.

> Write-host "Title Subtitle"
Title Subtitle

> Write-host "Title `nSubtitle"
Title 
Subtitle

> Write-host "Title `tSubtitle"
Title   Subtitle

Powershell – Кронштейны

Powershell поддерживает три типа кронштейнов.

  • Скобки в скобках. – ()

  • Брекеты-скобки. – {}

  • Квадратные скобки. – []

Скобки в скобках. – ()

Брекеты-скобки. – {}

Квадратные скобки. – []

Скобки в скобках

Этот тип скобок используется для

  • передавать аргументы

  • приложить несколько инструкций

  • разрешить неоднозначность

  • создать массив

передавать аргументы

приложить несколько инструкций

разрешить неоднозначность

создать массив

пример

> $array = @("item1", "item2", "item3")
 
> foreach ($element in $array) { $element }
item1
item2
item3

Скобки скобки

Этот тип скобок используется для

  • приложить заявления

  • блокировать команды

приложить заявления

блокировать команды

пример

$x = 10

if($x -le 20){
   write-host("This is if statement")
}

Это даст следующий результат –

Выход

This is if statement.

Квадратные скобки

Этот тип скобок используется для

  • доступ к массиву

  • доступ к хеш-таблицам

  • фильтр с использованием регулярного выражения

доступ к массиву

доступ к хеш-таблицам

фильтр с использованием регулярного выражения

пример

> $array = @("item1", "item2", "item3")
 
> for($i = 0; $i -lt $array.length; $i++){ $array[$i] }
item1
item2
item3
 
>Get-Process [r-s]*
 Handles    NPM(K)     PM(K)    WS(K)   VM(M)   CPU(s)     Id    ProcessName
-------    ------     -----     -----   -----   ------     --    -----------  
    320        72     27300     33764    227     3.95    4028    SCNotification 
   2298        77     57792     48712    308             2884    SearchIndexer
   ...

Powershell – Alias

Псевдоним PowerShell – это другое имя командлета или любого элемента команды.

Создание псевдонима

Используйте командлет New-Alias для создания псевдонима. В приведенном ниже примере мы создали справку по псевдониму для командлета Get-Help.

 New-Alias -Name help -Value Get-Help  

Теперь вызовите псевдоним.

 help Get-WmiObject -Detailed  

Вы увидите следующий вывод.

NAME
   Get-WmiObject
    
SYNOPSIS
   Gets instances of Windows Management Instrumentation (WMI) classes or information about the available classes.    
    
SYNTAX
   Get-WmiObject [
...

Получение псевдонима

Используйте командлет get-alias , чтобы получить все псевдонимы, присутствующие в текущем сеансе powershell.

 Get-Alias

Вы увидите следующий вывод.

Исторически утилиты командной строки в Unix-системах развиты лучше чем в Windows, однако с появлением нового решения ситуация изменилась.

Windows PowerShell позволяет системным администраторам автоматизировать большинство рутинных задач. С ее помощью можно менять настройки, останавливать и запускать сервисы, а также производить обслуживание большинства установленных приложений. Воспринимать синее окошко как еще один интерпретатор команд было бы неправильно. Такой подход не отражает сути предложенных корпорацией Microsoft инноваций. На самом деле возможности Windows PowerShell гораздо шире: в небольшом цикле статей мы попробуем разобраться, чем решение Microsoft отличается от более привычных нам средств.

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности

Основные возможности 

Разумеется Windows PowerShell — это в первую очередь командная оболочка с языком сценариев, изначально созданная на основе платформы .NET Framework, а позднее — на .NET Core. В отличие от принимающих и возвращающих текстовые данные оболочек, Windows PowerShell работает с классами .NET, у которых есть свойства и методы. PowerShell позволяет выполнять обычные команды, а также дает доступ к объектам COM, WMI и ADSI. В ней используются различные хранилища, вроде файловой системы или реестра Windows, для доступа к которым созданы т.н. поставщики (providers). Стоит отметить возможность встраивания исполняемых компонентов PowerShell в другие приложения для реализации различных операций, в т.ч. через графический интерфейс. Верно и обратное: многие приложения для Windows предоставляют доступ к своим интерфейсам управления через PowerShell. 

Windows PowerShell позволяет:

  • Менять настройки операционной системы;
  • Управлять службами и процессами;
  • Настраивать роли и компоненты сервера;
  • Устанавливать программное обеспечение;
  • Управлять установленным ПО через специальные интерфейсы;
  • Встраивать исполняемые компоненты в сторонние программы;
  • Создавать сценарии для автоматизации задач администрирования;
  • Работать с файловой системой, реестром Windows, хранилищем сертификатов и т.д.

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

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

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности

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

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

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

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

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности

Командлеты 

В Windows PowerShell появились т.н. командлеты (cmdlets). Это специализированные классы .NET, в которые заложена разнообразная функциональность. Именуются они по принципу «Действие-Объект» (или «Глагол-Существительное, если вам так больше нравится), а разделенная дефисом связка напоминает сказуемое и подлежащее в предложениях естественных языков. Например, Get-Help буквально означает «Получить-Помощь» или в контексте PowerShell: «Показать-Справку». По сути это аналог команды man в Unix-системах и мануалы в PowerShell нужно запрашивать именно так, а не вызывая командлеты с ключом —help или /?.. Не стоит забывать и об онлайн-документации по PowerShell: у Microsoft она достаточно подробная.

Помимо Get в командлетах для обозначения действий используются и другие глаголы (и не только глаголы, строго говоря). В списке ниже мы приведем несколько примеров:

Add — добавить;
Clear — очистить;
Enable — включить;
Disable — выключить;
New — создать;
Remove — удалить;
Set — задать;
Start — запустить;
Stop — остановить;
Export — экспортировать;
Import — импортировать.

Есть системные, пользовательские и опциональные командлеты: в результате выполнения все они возвращают объект или массив объектов. К регистру они не чувствительны, т.е. с точки зрения интерпретатора команд нет разницы между Get-Help и get-help. Для разделения используется символ ‘;’, но ставить его обязательно только если в одной строке выполняется несколько командлетов. 

Командлеты Windows PowerShell группируются в модули (NetTCPIP, Hyper-V и т.д.), а для поиска по объекту и действию существует командлет Get-Command. Показать справку по нему можно так:

Get-Help Get-Command

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности

По умолчанию команда отображает краткую справку, но в командлеты при необходимости передаются параметры (аргументы). С их помощью можно, например, получить детальную (параметр -Detailed) или полную (параметр -Full) справку, а также вывести на экран примеры (параметр -Examples):

Get-Help Get-Command -Examples

Справка в Windows PowerShell обновляется командлетом Update-Help. Если строка команд получается слишком длинной, аргументы командлета можно перенести на следующую, написав служебный символ ‘`’ и нажав Enter — просто закончить писать команду на одной строке и продолжить на другой не получится.

Ниже приведем несколько примеров распространенных командлетов: 

Get-Process — показать запущенные в системе процессы;
Get-Service — показать службы и их статус;
Get-Content — вывести содержимое файла.

Для часто используемых командлетов и внешних утилит в Windows PowerShell есть короткие синонимы — алиасы (от англ. Alias). Например, dir — алиас Get-ChildItem. Есть в списке синонимов и аналоги команд из Unix-систем (ls, ps и т.д.), а командлет Get-Help вызывается командой help. Полный список синонимов можно посмотреть с помощью командлета Get-Alias:

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности

Сценарии, функции, модули и язык PowerShell

Скрипты Windows PowerShell хранятся в виде обычных текстовых файлов с расширением .ps1. Запустить их двойным кликом нельзя: нужно правой кнопкой мыши вызвать контекстное меню и выбрать пункт «Запустить в PowerShell». Из консоли придется либо указать полный путь к скрипту, либо перейти в соответствующий каталог и написать имя файла. Запуск сценариев также ограничен системной политикой, а для проверки текущих настроек можно использовать командлет Get-ExecutionPolicy, который выдаст одно из следующих значений:

Restricted — запуск сценариев запрещен (по умолчанию);
AllSigned — разрешен только запуск подписанных доверенным разработчиком сценариев;
RemoteSigned — разрешен запуск подписанных и собственных сценариев;
Unrestricted — разрешен запуск любых сценариев.

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

Set-ExecutionPolicy RemoteSigned

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
PowerShell для этого придется запустить от имени администратора, хотя с помощью специального параметра можно изменить политику и для текущего пользователя.

Пишутся скрипты на объектно-ориентированном языке программирования, команды которого именуются по тому же принципу, что и рассмотренные ранее командлеты: «Действие-Объект» («Глагол-Существительное»). Основное его предназначение — автоматизация задач администрирования, но это полноценный интерпретируемый язык, в котором есть все необходимые конструкции: условный переход, циклы, переменные, массивы, объекты, обработка ошибок и т.д. Для написания сценариев годится любой текстовый редактор, но удобнее всего запустить Windows PowerShell ISE.

В скрипт можно передавать параметры, делать их обязательными, а также задавать значения по умолчанию. Кроме того Windows PowerShell позволяет создать функции и вызывать их точно так же, как и командлеты: для этого используется конструкция Function и фигурные скобки. Сценарий с функциями называется модулем и имеет расширение .psm1. Модули должны храниться в каталогах, определенных в переменных окружения PowerShell. Посмотреть их можно при помощи следующей команды:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

Конвейеры

В последнем примере мы применили знакомую пользователям оболочек для Unix-систем конструкцию. В Windows PowerShell вертикальная черта также позволяет передать выход одной команды на вход другой, но в реализации конвейера есть и существенная разница: речь здесь идет уже не о наборе символов или каком-то тексте. Встроенные командлеты или пользовательские функции возвращают объекты или массивы объектов, а также могут получать их на входе. Как в Bourne shell и его многочисленных последователях, в PowerShell с помощью конвейера упрощается выполнение сложных задач.

Простейший пример конвейера выглядит так:

Get-Service | Sort-Object -property Status

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
Сначала выполняется командлет Get-Service, а потом все полученные им службы передаются на сортировку по свойству Status командлету Sort-Object. В какой именно аргумент передается результат работы предыдущего участка конвейера, зависит от его типа — обычно это InputObject. Подробнее этот вопрос будет рассматриваться в посвященной языку программирования PowerShell статье. 

При желании цепочку можно продолжить и передать результат работы Sort-Object еще одному командлету (выполняться они будут слева направо). Кстати, пользователям Windows доступна и привычная всем юниксоидам конструкция для постраничного вывода: 

Get-Service | Sort-Object -property Status | more

Запуск задач в фоновом режиме 

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

Start-Job — запуск фоновой задачи;
Stop-Job — остановка фоновой задачи;
Get-Job — просмотр списка фоновых задач;
Receive-Job — просмотр результата выполнения фоновой задачи;
Remove-Job — удаление фоновой задачи;
Wait-Job — перевод фоновой задачи обратно в консоль.

Для запуска фоновой задачи мы используем командлет Start-Job и в фигурных скобках указываем команду или набор команд:

Start-Job {Get-Service}

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
Фоновыми задачами в Windows PowerShell можно манипулировать, зная их имена. Для начала научимся их отображать:

Get-Job

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
Теперь покажем результат работы задания Job1:

Receive-Job Job1 | more

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
Всё довольно просто.

Удаленное выполнение команд

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

  • У многих командлетов есть параметр -ComputerName, но таким способом не получится, например, создать конвейер;
  • Командлет Enter-PSSession позволяет создать на удаленной машине интерактивный сеанс; 
  • С помощью командлета Invoke-Command можно выполнять команды или сценарии на одном или нескольких удаленных компьютерах.

Версии PowerShell

С момента первого релиза в 2006 году PowerShell серьезно изменился. Инструмент доступен для множества систем, работающих на разных аппаратных платформах (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux и OS X. Последний релиз 6.2 выпущен 10 января 2018 года. Написанные для более ранних версий скрипты с высокой вероятностью будут работать в более поздних, а вот с обратным переносом могут возникнуть проблемы, поскольку за годы развития в PowerShell появилось большое количество новых командлетов. Узнать версию установленной на компьютере командной оболочки можно с помощью свойства PSVersion встроенной переменной $PSVersionTable:

$PSVersionTable.PSVersion

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
Также можно воспользоваться командлетом:

Get-Variable -Name PSVersionTable –ValueOnly

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности
То же самое делается и с помощью командлета Get-Host. На самом деле вариантов множество, но для их применения нужно изучить язык программирования PowerShell, чем мы и займемся в следующей статье

Итоги 

Корпорации Microsoft удалось создать действительно мощную командную оболочку с удобной интегрированной средой для разработки скриптов. От привычных нам по миру Unix средств ее отличает глубокая интеграция с операционными системами семейства Windows, а также с программным обеспечением для них и платформой .NET Core. PowerShell можно назвать объектно ориентированной оболочкой, потому что командлеты и пользовательские функции возвращают объекты или массивы объектов и могут получать их на входе. Думаем, этим инструментом должны владеть все администраторы серверов на Windows: прошло время, когда они могли обойтись без командной строки. Продвинутая консольная оболочка особенно необходима на наших недорогих VPS, работающих под управлением Windows Server Core, но это уже совсем другая история.

Что такое Windows PowerShell и с чем его едят? Часть 1: основные возможности

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

Какие темы стоит в первую очередь затронуть в следующих статьях цикла?

  • 53,2%Программирование в PowerShell123

  • 42,4%Функции и модули PowerShell98

  • 22,1%Как подписывать собственные скрипты?51

  • 12,1%Работа с хранилищами через поставщиков (providers)28

  • 57,6%Автоматизация администрирования компьютеров с помощью PowerShell133

  • 30,7%Управление программным обеспечением и встраивание исполняемых компонентов PowerShell в сторонние продукты71

Проголосовал 231 пользователь. Воздержались 37 пользователей.

Источник: habr.com

Понравилась статья? Поделить с друзьями:
  • Интегрированная среда разработки по для microsoft windows
  • Интегрирование драйверов windows в дистрибутив windows
  • Интеграция с оболочкой windows winrar это как
  • Интеграция рабочего стола windows в windows
  • Интеграция обновлений в дистрибутив windows 10 dism