Обучение PowerShell

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


1. Основы PowerShell и сравнение с C#

PowerShell обладает богатым набором средств для работы с объектами и их методами. Он позволяет работать со всеми классами и методами Framework. Отличие заключается в синтексисе.

Например для C# строка для получения информации о языке и настройках региона можно выполнить команду:

System.Globalization.CultureInfo.GetCultureInfo("ru-RU")

В PowerShell такая команда будет выглядеть так:

[System.Globalization.CultureInfo]::GetCultureInfo("ru-RU")

2. Расширение предпроцессора Sherpa RPA для PowerShell

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

Работа с операторами сравнения и шаблонами:

  • *-c.. — различает большие и маленькие буквы;

  • -eq или == — проверяет, равны ли два значения;

  • -ne или != или <> — проверяет, не равны ли два значения;

  • -gt — проверяет, больше ли первое число второго;

  • -ge — проверяет, больше или равно ли первое число второму;

  • -lt — проверяет, меньше ли первое число второго;

  • -le — проверяет, меньше или равно ли первое число второму;

  • -like — проверяет, содержит ли текст определённое слово или шаблон. Можно использовать ? и * для поиска по шаблонам (например, *.txt — все файлы с расширением .txt);

  • -notlike "#find text#" — проверяет, что текст НЕ содержит определённое слово или шаблон;

  • -match "#pattern#" — использует регулярные выражения для поиска сложных шаблонов в тексте;

  • -is [type] — проверяет, какой у объекта тип (например, строка, число);

  • -isnot [type] — проверяет, что объект НЕ этого типа.

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

3. Работа с коллекциями и базовыми операциями

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

($Mail.Attachments | Where-Object {$_.DisplayName -Contains "текст"}).Length > 0

Данный пример показывает, как отфильтровать вложения по имени и проверить, есть ли такие вложения.

4. Объявление переменных и приведение типов

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

  • преобразование типа к первому аргументу:

    • '1' + 1 дает '11' — строковое сложение, поскольку первый аргумент является строкой, то и число преобразуется в строку, а после - происходит объединение;

    • 1 + '1' дает 2 — числовое сложение, потому что в этом случае происходит преобразование второго аргумента к числовому типу, и оба слагаемых становятся числами;

  • "5/7/07" -as [DateTime] и [datetime]"5/7/07" — способы преобразовать строку с датой (например, "5/7/07") в специальный тип данных "Дата и время";

  • [Convert]::ToDateTime("5/7/07") — еще один способ преобразовать строку с датой (например, "5/7/07") в специальный тип данных "Дата и время";

  • (1+12).ToString() — выражение, в результате которого выполняется математическая операция, а затем результат меняет тип данных на строку: '13' ;

  • Ctrl+Space — команда, которая автоматически дополняет код или показывает полезные подсказки для продолжения написания скрипта;

  • $null — "пустое значение" (null), его используют, чтобы указать, что переменная или результат отсутствует;

  • [string]::IsNullOrEmpty() — команда, которая проверяет, является ли строка пустой или равной null. Если да, она возвращается true, иначе — false.

PowerShell поддерживает работу с любыми типами данных, аналогично C#:

  • создайте переменную $MyListInList с типом Object (для хранения любого типа данных);

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

$script:MyListInList = New-Object Collections.Generic.List[Collections.Generic.List[string]];

  • добавьте два пустых списка в список. Первый список: $MyListInList.Add((New-Object Collections.Generic.List[string])); Второй список: $MyListInList.Add((New-Object Collections.Generic.List[string]));

  • добавьте данные во вложенные списки, например, строку "myval1" в первый список и "myval2" во второй: $MyListInList[0].Add("myval1"); $MyListInList[1].Add("myval2");

Обратите внимание, что в системе может быть включена опция "Локальные и глобальные переменные":

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

5. Область видимости переменных внутри блока "Выполнить выражение"

Когда вы пишете команды внутри блока, (например, в блоке "Выполнить выражение") и включена опция “Локальные и глобальные переменные”, то переменные, созданные там, по умолчанию считаются "локальными" (видны только внутри этого блока).

Например, переменная $test2, созданная внутри такого блока, не будет доступна за его пределами:

Если вы хотите, чтобы переменная $test2 была доступна и после выполнения этого блока (например, из другого места вашего скрипта), нужно явно указать, что она принадлежит области "скрипта" (весь скрипт, а не только блок). Для этого используйте запись:

if ($test -eq 100) { $script:test2 = 100 }

Обратите внимание на $script: , данное выражение говорит о том, что переменная $test2 создана в области видимости всего скрипта, и к ней можно обращаться за пределами блока.

Когда вы читаете значение переменной, PowerShell сначала ищет её внутри блока (локально). Если там ее нет, то в области скрипта. Но если вы хотите задать значение переменной и сделать её доступной вне блока, обязательно укажите область $script:

6. Использование локальной и удаленной консоли PowerShell в Дизайнере Sherpa RPA для проверки выражений и отладки сценариев

Когда вы работаете со сценариями в Sherpa RPA, иногда бывает нужно проверить команды или отладить их работу. Для этого можно использовать два вида консоли PowerShell:

6.1. Локальная консоль PowerShell

В нижней центральной панели Sherpa Designer вы можете открыть консоль, нажав на вкладку "Консоль". Это позволит вам вводить команды и видеть результаты их выполнения.

  • Выполнение команд: В текстовом поле вы можете вводить команды PowerShell, например, вы можете проверить значения переменных, используя выражения, такие как $myVariable, и получать информацию о типах данных с помощью команды Get-Member.

  • Очистка и перезагрузка: Вы можете очистить консоль с помощью кнопки "Очистить" или перезагрузить консоль с помощью кнопки "Перезагрузить консоль", чтобы сбросить текущее состояние.

  • Отладка: Если вы находитесь в режиме отладки, вы можете использовать консоль для проверки значений переменных в любой момент выполнения сценария. Локальная консоль — это встроенная консоль, которая запускается прямо в окне Sherpa RPA. Позволяет быстро проверить отдельные команды или выражения. Хорошо подходит для тестирования и отладки небольших участков кода.

6.2. Удаленная консоль PowerShell

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

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

Соответственно, управление в консоли происходит через два потока: локальный (“L”) и удаленный (“R”). При запуске и постановке Робота на паузу автоматически активируется удаленная консоль (в Роботе). Также возможно переключение между этими потоками, для этого требуется нажать на соответствующую кнопку: “L” или “R”, пока Робот стоит на паузе:

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

  • Проверка значений переменных: Введите имя переменной, например, $myVariable, чтобы увидеть ее текущее значение.

  • Выполнение выражений: Вы можете выполнять более сложные выражения, такие как $myArray | Where-Object { $_ -eq "value" }, чтобы фильтровать массивы.

  • Отладка функций: Если у вас есть функции, вы можете вызывать их из консоли, чтобы проверить их работу, например, MyFunction -Parameter $myParameter.

7. Создание собственных блоков в редакторе блоков Sherpa RPA

Если вы хотите использовать свои собственные функции в Sherpa RPA, для вас есть возможность создать свои блоки.

Пример, как это делается с помощью PowerShell и внешней библиотеки (.dll файл):

  • Подключение внешней библиотеки:

Add-Type -Path "e:\123\1\TestDialog.dll"

  • Создание объекта класса из библиотеки:

$mycls = [TestDialog.Class1]::new();

  • Вызов методов диалога:

$mycls.MyDialog1($MyText);

  • Запуск статического метода MyDialog2, в который передается переменная $MyText :

[TestDialog.Class1]::MyDialog2($MyText);

  • Работа с таблицами данных:

$dt = $dt.DefaultView.ToTable($false, "Column1", "Column2")

Формируется таблица данных с колонками "Column1" и "Column2".

Last updated