Что значит в powershell

от admin

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

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

Оглавление:

Писать код можно в любом текстовом редакторе или с использованием интегрированной среды разработки — проще всего взять Windows PowerShell ISE из комплекта поставки серверных операционных систем Microsoft. Нужно это только для достаточно сложных скриптов: короткие наборы команд проще выполнять в интерактивном режиме.

Комментарии

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

Переменные и их типы

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

image

Для инициализации переменной (присвоения ей значения) применяется оператор присваивания (символ =):

Объявить переменную можно с указанием ее типа в квадратных скобках (оператор приведения типов) перед именем или значением:

Важно понимать, что переменные в PowerShell — это полноценные объекты (классы) со свойствами и методами, типы которых основаны на имеющихся в .NET Core. Перечислим основные:

Тип (класс .NET) Описание Пример кода
[string]
System.String
строка Unicode $test = «тест»
$test = ‘тест’
[char]
System.Char
символ Unicode (16 бит) [char]$test = ‘c’
[bool]
System.Boolean
булевский тип (логическое значение True или False) [bool]$test = $true
[int]
System.Int32
тридцатидвухразрядное целое число (32 бита) [int]$test = 123456789
[long]
System.Int64
шестидесятичетырехразрядное целое число (64 бита) [long]$test = 12345678910
[single]
System.Single
число с плавающей точкой длиною в 32 бита [single]$test = 12345.6789
[double]
System.Double
число с плавающей точкой длиною в 64 бита (8 байт) [double]$test = 123456789.101112
[decimal]
System.Decimal
число с плавающей точкой длиною в 128 бит (обязательно указывать d на конце) [decimal]$test = 12345.6789d
[DateTime]
System.DateTime
дата и время $test = Get-Date
[array]
System.Object[]
массив, индекс элементов которого начинается с 0 $test_array = 1, 2, «тест», 3, 4
[hashtable]
System.Collections.Hashtable
хэш-таблицы — ассоциативные массивы с именованными ключами, построенные по принципу: @<ключ = «значение»> $test_hashtable = @

PowerShell поддерживает неявное преобразование типов, кроме того тип переменной может меняться на ходу (например, при помощи оператора присваивания), если он не указан принудительно — в этом случае интерпретатор выдаст ошибку. Определить тип переменной из предыдущего примера можно при помощи вызова метода GetType():

image

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

image

Для просмотра объявленных переменных и их значений можно использовать специальный командлет:

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

Системные переменные

Помимо объявленных пользователем существуют встроенные (системные) переменные, которые не удаляются после завершения текущего сеанса. Делятся они на два типа, при этом данные о состоянии PowerShell хранятся в автоматических переменных, которым нельзя самостоятельно присвоить произвольные значения. К их числу относится, например, $PWD:

image

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

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

image

Области видимости

Для переменных в PowerShell существует понятие области видимости (Scope). Действие глобальной области (Global) распространяется на весь текущий сеанс — в нее входят, например, системные переменные. Локальные (Local) переменные доступны только в области, где они были определены: скажем внутри функции. Есть еще понятие области действия сценария (Script), но для команд скрипта она по сути является локальной. По умолчанию при объявлении переменных им задается локальная область действия, а чтобы это изменить, нужна специальная конструкция вида: $Global: переменная = значение.

Переменные окружения (среды)

Из PowerShell доступен еще один псевдонакопитель Env:, с помощью которого можно обратиться к переменным среды. При запуске оболочки они копируются из родительского процесса (т.е. из инициировавшей текущий сеанс программы) и обычно их первоначальные значения совпадают со значениями в панели управления. Для просмотра переменных окружения используется командлет Get-ChildItem или его псевдонимы (алиасы): ls и dir.

image

Эти переменные представляют собой последовательности байтов (или символов, если угодно), интерпретация которых зависит только от использующей их программы. Командлеты *-Variable с переменными среды не работают. Чтобы обратиться к ним, придется использовать префикс диска:

image

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

Оператор Описание Пример кода
-eq Equal / Равно (аналог = или == в других языках) $test = 100
$test -eq 123
-ne Not equal / Не равно (аналог <> или !=) $test = 100
$test -ne 123
-gt Greater than / Больше (аналог >) $test = 100
$test -gt 123
-ge Greater than or equal / Больше или равно (аналог >=) $test = 100
$test -ge 123
-lt Less than / Меньше (аналог <) $test = 100
$test -lt 123
-le Less than or equal / Меньше или равно (аналог <=) $test = 100
$test -le 123

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

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

Помимо самого распространенного оператора = существуют и другие операторы присваивания: +=, -=, *=, /= и %=. Они изменяют значение перед присвоением. Аналогично ведут себя унарные операторы ++ и —, которые увеличивают или уменьшают значение переменной — они тоже относятся к операторам присваивания.

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

Для описания сложных условий одного только сравнения недостаточно. Записать любые логические выражения можно с помощью операторов: -and, -or, -xor, -not и. Работают они как и в других языках программирования, при этом можно использовать круглые скобки, чтобы задать порядок вычисления:

Условный переход

Операторы ветвления в PowerShell стандартные: IF(IF…ELSE, IF…ELSEIF…ELSE) и SWITCH. Рассмотрим их использование на примерах:

Циклы

В языке PowerShell есть несколько разновидностей циклов: WHILE, DO WHILE, DO UNTIL, FOR и FOREACH.

Цикл с предусловием работает, если/пока оно выполняется:

Циклы с постусловием отработают хотя бы один раз, потому что проверка условия производится после выполнения итерации. При этом DO WHILE работает, пока условие истинно, а DO UNTIL — пока оно ложно:

Количество итераций цикла FOR известно заранее:

В цикле FOREACH осуществляет перебор элементов массива или коллекции (хэш-таблицы):

Массивы

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

При инициализации массива его значения перечисляются через запятую (специальный оператор ,):

В большинстве случаев оператор @() можно опустить:

В этом случае массив из одного элемента инициализируется следующим образом

Для обращения к элементам массива используется начинающийся с нуля целочисленный индекс и оператор индекса (квадратные скобки):

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

image

Оператор .. (две точки — оператор диапазона) возвращает массив целых чисел на определенном верхней и нижней границей отрезке. Например, выражение 1..4 выводит массив из четырех элементов @(1, 2, 3, 4), а выражение 8..5 — массив @(8, 7, 6, 5).

image

С помощью оператора диапазона можно инициализировать массив ($test_array = 1..4) или получить срез (slice), т.е. последовательность элементов одного массива с индексами из другого. При этом отрицательное число -1 обозначает последний элемент массива, -2 — предпоследний и т.д.

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

Если попытаться обратиться к единственному несуществующему элементу массива, возвращается значение $null.

image

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

Где свойство $test_array.count — количество элементов массива.

Пример создания строго типизированного массива:

Хэш-таблицы

Еще один базовый тип переменных в языке PowerShell — хэш-таблицы, которые также называют ассоциативными массивами. Hashtable похожи на JSON object и строятся по принципу ключ-значение. В отличие от обычных массивов, доступ к их элементам осуществляется по именованным ключам, которые являются свойствами объекта (также можно использовать оператор индекса — квадратные скобки).

Пустая хэш-таблица объявляется с помощью служебного символа @ и операторных скобок:

При объявлении можно сразу создать ключи и присвоить им значения:

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

image

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

Функции

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

Функция всегда возвращает результат — это массив результатов всех ее стейтментов, если их более одного. Если стейтмент один, возвращается единственное значение соответствующего типа. Конструкция return $value добавляет элемент со значением $value к массиву результатов и прерывает выполнение statement list, а пустая функция возвращает $null.

Для примера создадим функцию возведения числа в квадрат:

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

Из-за способа передачи аргументов саму функцию иногда приходится заключать в скобки:

image

При описании функции можно присвоить аргументам значения по умолчанию:

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

Обработка ошибок

В PowerShell существует механизм Try…Catch…Finally, позволяющий обрабатывать исключительные ситуации. В блок Try помещается код, в котором может возникнуть ошибка, а в блок Catch — ее обработчик. Если ошибки не было, он не выполняется. Блок Finally выполняется после блока Try вне зависимости от возникновения ошибки, а блоков Catch может быть несколько для исключений различных типов. Само исключение записывается в не требующую объявления переменную по умолчанию ($_) и может быть легко извлечено. В примере ниже мы реализуем защиту от ввода некорректного значения:

image

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

Шпаргалка по PowerShell: Команды, операторы и многое другое

Шпаргалка по PowerShell Команды операторы и многое другое

Шпаргалка по PowerShell — это версия языка командной строки Windows, которая помогает вам легко выполнять и автоматизировать критически важные задачи в ваших системах. Но как выполнять эти задачи и максимально использовать PowerShell в своей системе Windows?

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

Шпаргалка по PowerShell

Начнем с краткого введения в команды Windows 10 PowerShell.

Основы PowerShell

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

Эта оболочка имеет следующие возможности.

  • Удобная история командной строки
  • Широкие возможности, такие как завершение табуляции и предсказание команд
  • Псевдонимы команд и параметров
  • Система изменения команд
  • Встроенная справочная система, подобная Unix man pages

Учитывая возможности любого языка сценариев, вы можете использовать PowerShell для автоматизации процессов и задач управления системой. Он позволяет создавать, тестировать и развертывать решения в средах CI/CD.

PowerShell построен на базе .NET Common Language Runtime (CLR), что означает, что все входные и выходные данные являются объектами .NET. Вам не придется разбирать текстовый вывод, чтобы получить из него информацию.

Язык сценариев PowerShell обладает следующими возможностями.

  • Функции, классы, объекты и модули
  • Простая система форматирования для обеспечения четкого вывода данных для повышения удобочитаемости
  • Встроенная поддержка различных форматов данных, таких как CSV, JSON и XML
  • Система типов для создания динамических типов

Теперь перейдем к некоторым полезным командам PowerShell.

Шпаргалка PowerShell по командам

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

Команда Описание
Эта команда позволяет получить поддержку с помощью PowerShell.
Эта команда предлагает вам список доступных PSDrives, таких как c, env, hklm, hkcu, alias и т.д.
В любом реестре дочерние ключи — это подключи текущего ключа. Чтобы получить необходимые сведения, можно воспользоваться следующей командой.
Выполните эту команду, чтобы рекурсивно перечислить все дочерние элементы текущего PSdrive, папки или ключа реестра.
Используйте эту команду для включения скрытых папок (каталогов).
Выполните любую из этих команд, чтобы получить список имен файлов и каталогов в текущей папке.
Используйте эту команду, чтобы получить количество записей в коллекции объектов, возвращенных командой Get-Children.
PSdrives

PSdrives — это коллекция объектов, сгруппированных вместе, чтобы к ним можно было получить доступ как к диску файловой системы. PSprovider» выполняет эту группировку.

По умолчанию сеанс PS может обращаться к нескольким PSdrives, включая c:, env:, alias: и HKLM:, где c: означает обычный диск c Windows; env: — это пространство переменных среды Windows; alias: — это коллекция псевдонимов команд; а HKLM — это ветка в реестре.

При любом сеансе PS пользователь попадает в свою домашнюю папку. Если вы хотите перейти из сеанса PS на другой диск PSdrive и получить информацию с этого диска, воспользуйтесь следующими командами:

Конвейеры

Cmdlets использует конвейеры для передачи объектов, но не потоков символов, как Unix. Символ конвейера — | (ASCII 124), за которым следует команда, обрабатывающая вывод, проходящий через конвейер. Конвейер состоит из следующих трех этапов.

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

Команда Описание
Легко устанавливает значение свойства ‘lastwritetime.year’ на текущую дату и время, не влияя на содержимое файла.
Предоставляет пустой результат
Изменяет старые имена файлов и расширения файлов на новые
Тривиальная команда переименования, вызывающая автоматическую переменную
Если у передаваемого объекта $_ нет свойства (name), вы получите ошибку, так как параметр $_.name является null
Отображает список имен всех файлов, присутствующих в текущей папке, отсортированных в алфавитном порядке.
Перемещает все файлы в подкаталог папки
Выдает сообщение об ошибке, что Move-Item не имеет входа
Alias (Алиас)

Cmdlets поддерживают несколько псевдонимов. В следующей таблице приведены некоторые псевдонимы и их описания:

Команда Описание
Добавляет значение к файлу
Поиск содержимого файла в массиве
Изменение папки, ключа или диска PS
Очищает консоль
Удаление файлов
Списки папок, ключей или дочерних элементов PSDrive
Отправляет массив в консоль, конвейер или перенаправляет его в файл
Обход каждого объекта в конвейере
Форматирует таблицу с выбранными свойствами для каждого объекта в каждом столбце
Форматирует свойства процесса по имени
Обеспечивает псевдоним командлета
Предоставляет вам команды только из текущей сессии
Извлечение всех членов объекта
Предоставляет свойства указанного элемента
Получает текущее значение для указанного свойства при использовании параметра name
Находит имена переменных сеансов
Создает новый файл, каталог, символическую ссылку, ключ реестра или запись реестра.
Выдает полный список всех запущенных процессов
Предоставляет местоположение текущего каталога или ключа реестра
Переименовывает старое имя элемента в новое имя
Удаляет указанный каталог, файлы или ключи реестра
Удаляет указанную переменную
Приостанавливает деятельность на определенный период времени
Операторы

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

Приоритет оператора

Приоритет Оператор Описание
1 () Круглые скобки
2 Для отрицательного числа или унарного оператора
3 *, /, % Для умножения и деления
4 +,- Для сложения и вычитания
5 -band, -bnot, -bor, -bxor, -shr, and -shl Для побитовых операций

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

Оператор Описание
= Устанавливает значение переменной на указанное значение
+= Увеличивает значение переменной на указанное значение или добавляет указанное значение к существующему значению
-= Уменьшает значение переменной на заданную величину
*= Умножает значение переменной на указанное значение или добавляет указанное значение к существующему значению
/= Делит значение переменной на заданное значение
%= Делит значение переменной на заданное значение, а затем присваивает переменной остаток (модуль).
++ Увеличивает значение переменной, присваиваемого свойства или элемента массива на 1.
Уменьшает значение переменной, присваиваемого свойства или элемента массива на 1.

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

Тип Оператор Сравнительный тест
Равенство -eq равно
-ne не равно
-gt больше, чем
-ge больше или равно
-lt меньше чем
-le меньше чем или равно
Соответствие -like строка соответствует шаблону подстановки
-notlike строка не соответствует шаблону
-match строка соответствует regex-шаблону
-notmatch строка не соответствует regex-шаблону
Замена -replace заменяет строки, соответствующие шаблону regex
Сдерживание -contains коллекция содержит значение
-notcontains коллекция не содержит значения
-in значение находится в коллекции
-notin значение отсутствует в коллекции
Тип -is оба объекта имеют одинаковый тип
-isnot объекты разного типа

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

Оператор перенаправления

Оператор Описание Синтаксис
> Отправить указанный поток в файл n>
>> Добавить указанный поток в файл n>>
>&1 Перенаправляет указанный поток на поток Success n>&1

Операторы типа

Другие операторы
Оператор Описание
() Оператор группировки Позволяет переопределить старшинство операторов в выражениях
&() Оператор подвыражения Выдает результат одного или нескольких утверждений
@( ) Оператор подвыражения массива Возвращает результаты одного или нескольких операторов в виде массивов.
& Фоновый оператор Конвейер перед & выполняется этой командой в задании Powershell.
[] Cast оператор Преобразует объекты к определенному типу.

Регулярные выражения

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

Метод Чувствительность к случаю
Select-String use -CaseSensitive switch
switch statement use the -casesensitive option
operators prefix with ‘c’ (-cmatch, -csplit, or -creplace)

Литералы символов

Регулярное выражение может быть литеральным символом или строкой.

Группы символов

Они позволяют сопоставить любое количество символов за один раз, в то время как [^character group] сопоставляет только символы, не входящие в группу.

Диапазон символов

Шаблон также может быть диапазоном символов. Символы могут быть алфавитными [A-Z], цифровыми [0-9] или даже [ —

] (все печатаемые символы) в формате ASCII.

Числа

Класс символов \d будет соответствовать любой десятичной цифре. И наоборот, \D будет соответствовать любой недесятичной цифре.

Словесный символ

Класс символов \w будет соответствовать любому символу слова [a-zA-Z_0-9]. Чтобы подобрать любой несловосочетаемый символ, используйте \W.

Подстановочный знак

Точка (.) является символом подстановки в регулярных выражениях. Он будет соответствовать любому символу, кроме новой строки (\n).

Пробел

Пробельные символы сопоставляются с помощью класса символов \s. Любой не пробельный символ сопоставляется с помощью \S. Буквальные символы пробела ‘ ‘ также могут быть использованы.

Экранирование символов

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

Следующие символы зарезервированы: []().\^$|?*+<>.

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

Регулярные выражения с оператором -replace позволяют динамически заменять текст с помощью захваченного текста.

<input> -replace <original>, <substitute>

Управление потоком

ForEach-Object
ForEach-Object — это командлет, который позволяет выполнять итерации по элементам в конвейере, например, с помощью однострочных команд PowerShell. ForEach-Object будет передавать объекты по конвейеру.

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

Если вы хотите передать две строки по значению в Get-Command для использования с параметром Module, используйте команду ForEach-Object:

For

Цикл «for» выполняет итерации, пока заданное условие истинно.

Do

В PowerShell существует два различных цикла «do». Do Until выполняется, пока заданное условие ложно.

Пример 1:

Пример 2:

While

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

Переменные

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

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

Автоматические переменные: Эти переменные хранят состояние PowerShell и создаются PowerShell. Только PowerShell может изменять их значения по мере необходимости для поддержания точности. Пользователи не могут изменять значение этих переменных. Например, переменная $PSHOME будет хранить путь к директории установки PowerShell.

Переменные предпочтений: Эти переменные хранят предпочтения пользователя для PowerShell и создаются PowerShell. Эти переменные заполнены значениями по умолчанию и могут быть изменены пользователями. Например, переменная $MaximumHistoryCount задает максимальное количество записей в истории сеансов.

Чтобы создать новую переменную, необходимо использовать оператор присваивания и присвоить переменной значение. Объявлять переменную перед ее использованием не нужно. Значение по умолчанию для всех переменных — $null.

Функция

Именование функции
Для именования функции используйте имя регистра Паскаля с утвержденным глаголом и существительным в единственном числе. Список утвержденных глаголов можно получить, выполнив Get-Verb:

Get-Verb | Sort-Object -Property Verb

Создание простой функции

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

Работа с модулями

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

Как использовать модуль
Чтобы использовать любой модуль, его необходимо сначала установить. Затем найдите команду, которая поставляется вместе с модулем, и используйте ее.

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

Скопируйте всю папку модуля в каталог Modules. Для копирования папки можно использовать любой метод, включая проводник Windows, Cmd.exe и PowerShell.

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

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

Выполните следующую команду, чтобы найти команды модуля:

Импортирование модуля

Выполните следующую команду с нужным именем модуля:

Удаление имени модуля

Вы можете выполнить следующую команду с нужным именем модуля:

Просмотр расположения модулей по умолчанию

Используйте следующую команду для просмотра расположения модулей по умолчанию:

Добавление местоположения модуля по умолчанию

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

Добавление местоположения модуля по умолчанию в Linux или macOS

Используйте следующее, чтобы выполнить ту же команду, что и выше, только в Linux или macOS:

Хеш-таблицы

Хеш-таблица — это сложная структура данных для хранения данных в виде пар ключ-значение. Мы также называем хэш-таблицу словарем или ассоциативным массивом. Чтобы понять, что такое хэш-таблица, рассмотрим серию IP-адресов и соответствующие имена компьютеров. В хэш-таблице эти данные хранятся в виде пар ключ-значение, где IP-адреса обозначают ключи, а имена компьютеров — соответствующие им значения.

Синтаксис хэш-таблицы выглядит следующим образом:

Синтаксис упорядоченного словаря выглядит следующим образом:

Создание хэш-таблиц

Если вы хотите создать хэш-таблицу, выполните следующие действия:

  • Начните хэш-таблицу со знака at (@) и заключите ее в фигурные скобки (<>).
  • Хэш-таблица должна содержать хотя бы одну пару ключ-значение, поэтому вводите данные после создания хэш-таблицы.
  • Отделите ключ от его значения с помощью знака равенства (=).
  • Разделяйте пары ключ/значение в хэш-таблице точкой с запятой (;).
  • Заключите пробел между ключами в кавычки. Значения должны быть допустимыми выражениями PowerShell. Также заключайте строки в кавычки, даже если между ними нет пробелов.
  • Сохраните хэш-таблицу как переменную, чтобы эффективно управлять ею.
  • При назначении упорядоченной хэш-таблицы переменной поместите атрибут [ordered] перед символом @. Если поместить его перед именем переменной, команда не выполнится.

Добавление и удаление ключей и значений

Чтобы добавить ключи и значения в хэш-таблицу, используйте следующий формат команды:

Например, вы можете добавить ключ «Time» со значением «Now» в хэш-таблицу с помощью следующего формата оператора:

Или вы можете удалить ключ с помощью этого выражения:

Асинхронная обработка событий

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

Команды PowerShell для обработки событий

Имя командлета обработки событий Описание
Register-ObjectEvent Этот командлет регистрирует подписку на события для событий, генерируемых объектами .NET
Register-WmiEvent Регистрирует подписку на события для событий, генерируемых объектами WMI
Register-EngineEvent Регистрирует подписку на события для событий, генерируемых самим PowerShell
Get-EventSubscriber Получает список зарегистрированных подписок на события в сессии
Unregister-Event Удаляет одну или несколько зарегистрированных подписок на события
Wait-Event Ожидает наступления события. Эта команда может ждать определенного события или любого события. Она также позволяет указать тайм-аут, ограничивающий время ожидания события. По умолчанию ожидание длится вечно.
Get-Event Получает ожидающие необработанные события из очереди событий
Remove-Event Удаляет ожидающее событие из очереди событий
New-Event Эта команда вызывается в сценарии, чтобы позволить сценарию добавлять свои собственные события в очередь событий
Шпаргалка по PowerShell: заключение

В итоге? Шпаргалка по PowerShell — это универсальный справочник по синтаксису и командам PowerShell. В этой шпаргалке по командам Windows PowerShell мы рассмотрели все основы, чтобы помочь даже новичкам сориентироваться в PowerShell.

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

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

Хотите расширить свои знания о командной строке Windows?

Часто задаваемые вопросы

1. Как получить список команд PowerShell?
Вы можете использовать команду get-command.

2. Сколько существует команд PowerShell?
В PowerShell существует более 200 команд.

3. Как изучить PowerShell для начинающих?
Вы можете воспользоваться вводным руководством Microsoft по PowerShell. Оно содержит простой язык и простые примеры для лучшего понимания.

4. Является ли Windows PowerShell тем же самым, что и командная строка?
В следующей таблице приведены основные различия между PowerShell и командной строкой:

PowerShell Командная строка
Введен в 2006 году Введен в 1981 году
Работает как с пакетными командами, так и с командами PowerShell Работает только с пакетными командами
Позволяет создавать псевдонимы для команд или сценариев Не поддерживает создание псевдонимов команд
Позволяет передавать вывод команды другим командам. не позволяет передавать вывод команды другим командам.
Вывод осуществляется в виде объекта Вывод — просто текст
Можно выполнять последовательность команд в рамках сценария Требуется, чтобы одна команда завершилась раньше другой
Имеет библиотеки для программирования, так как построен на .net framework. Отсутствие библиотек программирования
Бесшовная интеграция с WMI Требуется внешний плагин для взаимодействия с WMI
Поддерживает системы Linux Не поддерживает системы Linux
Выполняет все типы программ Запускает только программы консольного типа

5. Как сделать командную строку по умолчанию вместо PowerShell?

Откройте Настройки > Персонализация > Панель задач. Теперь установите опцию «Заменить Command Prompt на Windows PowerShell» в меню, когда я нажимаю правой кнопкой мыши на кнопку «Пуск» или нажимаю клавиши Windows + X» в положение «Выкл».

Руководство по Windows PowerShell для начинающих

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

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

Для запуска интерфейса командной строки введите powershell в меню «Выполнить» (WinKey + R). PowerShell ISE запускается с помощью команды «PowerShell ISE» в том же меню. ISE более предпочтительно, так как предоставляет более широкие возможности разработчику благодаря подсветке синтаксиса, функции автозаполнения кода и другим особенностям, присущим многим «большим» IDE.

Изображение Windows Power Shell ISE

Среда разработки Windows PowerShell ISE

Написание и запуск скриптов

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

Также существуют системные политики, ограничивающие выполнение скриптов. Можно проверить текущие параметры политики, введя команду Get-ExecutionPolicy . Результатом будет одно из следующих значений:

  • Restricted — выполнение скриптов запрещено. Стандартная конфигурация;
  • AllSigned — можно запускать скрипты, подписанные доверенным разработчиком; перед запуском скрипта PowerShell запросит у вас подтверждение;
  • RemoteSigned — можно запускать собственные скрипты или те, что подписаны доверенным разработчиком;
  • Unrestricted — можно запускать любые скрипты.

Для начала работы необходимо изменить настройку политики запуска на RemoteSigned, используя команду Set-ExecutionPolicy :

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

Командлеты

Командлеты — это команды с предопределённой функцией, подобные условным операторам в языках программирования. У них есть несколько ключевых особенностей:

  • существуют системные, пользовательские и опциональные командлеты;
  • результатом выполнения командлета будет объект или массив объектов;
  • командлеты могут обрабатывать данные и передавать их другим командлетам с помощью конвейеров;
  • командлеты нечувствительны к регистру, так что нет никакой разницы между Get-ADUser , get-aduser и gEt-AdUsEr ;
  • в качестве разделителя используется символ ; .

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

  • Get-Process — отобразить текущие процессы, запущенные на компьютере;
  • Get-Service — отобразить список служб и их статус;
  • Get-Content — отобразить содержимое указанного файла, например Get-Content C:\Windows\System32\drivers\etc\hosts .

При необходимости список всех доступных командлетов можно вывести с помощью Get-Help-Category. Запомните эту команду — она крайне важна для тех, кто изучает PowerShell с нуля, так как помогает быстрее начать ориентироваться в его возможностях.

Команда Get-Help-Category в PowerShell

Результат выполнения команды Get-Help-Category

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

Параметры

У каждого командлета есть несколько параметров, определяющих его работу. PowerShell ISE автоматически предлагает все доступные параметры с отображением их типа. Например, Get-Service-NameW* выводит список служб, у которых имя начинается с W . Если вы забыли, какие параметры у введённого командлета, воспользуйтесь Get-Member .

Например, Get-Process | Get-Member :

Команда Get-Member в PowerShell

Список параметров командлета Get-Process

Если вы не нашли того, что нужно, или не уверены в том, как правильно задаются параметры, можно даже запросить примеры с помощью параметра -Examples . Встроенное руководство по PowerShell покажет, для чего используются разные параметры:

Команда -Examples

Примеры использования командлета

Некоторые командлеты также могут вызываться с помощью алиасов. Например, вместо Get-Help можно просто написать Help — эта команда также вызовет встроенное руководство по PowerShell.

При написании больших скриптов или коллективной разработке можно пользоваться комментариями. Каждый комментарий начинается с символа # , а блок комментариев ограничивается комбинациями символов <# и #> в начале и в конце соответственно.

Конвейер

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

  • GetService | SortObject -property Status — сортировка запущенных служб по статусу;
  • “Hello World!” | Out-File C:\ps\test.txt — запись текста в файл.

Можно использовать несколько конвейеров. Например, следующий скрипт выводит список имён всех служб за исключением остановленных:

Get-Service | WHERE <$_.status -eq “Running”>| SELECT displayname

Заключение

Это руководство для тех, кто изучает PowerShell с нуля, поэтому здесь раскрыты только базовые понятия и приёмы. После его прочтения у вас должно появиться представление о том, что собой представляет этот инструмент. Также мы рассмотрели варианты изменения политики выполнения скриптов, что такое командлет, как они обмениваются данными с помощью конвейера и как получить свойства нужного объекта. Помните, что в случае затруднений можно воспользоваться командлетом Get-Help — это одна из самых важных команд для начинающих изучать PowerShell.

Если пользуетесь не только Windows, но и Linux, посмотрите статью про команды терминала Linux для начинающих. В ней рассказывается про работу с процессами и файлами, навигацию, каналы, xargs, awk и grep.

Что такое Windows powershell и для чего он нужен

Первые операционные системы не содержали никакого интерфейса взаимодействия с пользователем, кроме командной строки. MS-DOS, например, позволяла общаться с собой только так. Графический интерфейс пользователя требовал от машины значительно большей мощности, чем имелось у компьютеров того времени. Появление GUI, казалось бы, устранило потребность в консоли. Однако командная строка – лишь кажущееся излишество.

Поясним это на примере. Любую отдельную команду к ОС можно обернуть интерфейсом из окошек и элементов управления, наподобие флажков, списков выбора и кнопок. Но что делать, если команд таких несколько? То есть тогда, когда нужно последовательно выполнять команду за командой. Очевидно, графический интерфейс для такой задачи окажется сильно перегруженным. И тем более сложным, чем больше команд потребуется выполнить.

Интерфейс консоли

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

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

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

PowerShell на смену «батникам»

Со временем командные оболочки сильно эволюционировали. Процессору «батников» (.bat-файлов) DOS пришел на смену командный процессор 4DOS, в Windows происходили аналогичные изменения – перечень исполнимых инструкций значительно расширился, приобретая сходство с современными скриптовыми языками программирования.

Однако ориентация таких систем не изменилась – все они как были, так и оставались инструментами системного администратора или (в редких случаях) продвинутого пользователя.

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

Windows PowerShell

Осенью 2003-го года разработчиками Microsoft был анонсирован новый командный процессор под именем Windows PowerShell с радикально переработанной концепцией и синтаксисом. Причем движком для него выступала платформа .Net Framework, а это означало, ни много ни мало, доступ из скрипта к огромной копилке возможностей этого фреймворка. В PowerShell команды перестали быть простыми текстовыми инструкциями, а превратились в классы.

Net со всеми вытекающими из этого последствиями (что такое классы в современном программировании, думается, объяснять не нужно) и получили новое имя – «командлеты». Можно еще много рассуждать на тему отличий оболочки PowerShell от прочих скриптовых оболочек, но лучше предложить краткий перечень ее функций, чтобы вы поняли, что такое PS.

Читать:
Как написать sns маленькими буквами

Похожие статьи