Treinamento PowerShell#

PowerShell é uma poderosa linguagem de script e um shell de comando versátil, amplamente utilizado para automatizar e simplificar tarefas no ambiente Windows. As expressões nas propriedades dos blocos do Sherpa Designer são escritas em uma linguagem PowerShell modificada e os próprios blocos (seu código interno) são escritos na linguagem PowerShell. Para o uso No-Code do Sherpa Designer, o conhecimento da linguagem PowerShell não é necessário. No entanto, para uma abordagem Low-Code, é desejável adquirir alguns conhecimentos básicos dessa linguagem, o que permitirá criar diagramas mais concisos e resolver tarefas não padronizadas.


1. Fundamentos do PowerShell e comparação com C# e VB#

O PowerShell possui um rico conjunto de ferramentas para trabalhar com objetos e seus métodos. Ele permite trabalhar com todas as classes e métodos do Microsoft .NET Framework. A diferença entre o uso do PowerShell e outras linguagens de programação .NET, como C# e VB, está na sintaxe.

Por exemplo, para C#, a linha para obter informações sobre a cultura e configurações regionais pode ser executada com o comando:

var cultureInfo = System.Globalization.CultureInfo.GetCultureInfo("ru-RU")

No PowerShell, esse comando seria assim:

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

Em Visual Basic .NET:

Dim cultureInfo As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("ru-RU")

ou

Dim cultureInfo As New System.Globalization.CultureInfo("ru-RU")

2. Operadores de comparação no PowerShell#

A interação eficaz com dados no PowerShell baseia-se no uso de operadores de comparação. Essas ferramentas estão integradas ao Sherpa RPA, expandindo as capacidades de automação.

Trabalhando com operadores de comparação e padrões:

  • *-c.. — diferencia maiúsculas de minúsculas;
  • -eq — verifica se dois valores são iguais;
  • -ne — verifica se dois valores não são iguais;
  • -gt — verifica se o primeiro número é maior que o segundo;
  • -ge — verifica se o primeiro número é maior ou igual ao segundo;
  • -lt — verifica se o primeiro número é menor que o segundo;
  • -le — verifica se o primeiro número é menor ou igual ao segundo;
  • -like — verifica se o texto contém uma determinada palavra ou padrão. Pode-se usar ? e * para busca por padrões (por exemplo, *.txt — todos os arquivos com a extensão .txt);
  • -notlike "#find text#" — verifica se o texto NÃO contém uma determinada palavra ou padrão;
  • -match "#pattern#" — utiliza expressões regulares para buscar padrões complexos no texto;
  • -is [type] — verifica qual é o tipo do objeto (por exemplo, string, número);
  • -isnot [type] — verifica se o objeto NÃO é desse tipo.

Esses operadores ajudam a criar scripts mais claros e convenientes para análise e processamento de dados.

3. Trabalhando com coleções e operações básicas#

O PowerShell é excelente para trabalhar com várias estruturas de dados, como arrays, listas, dicionários, tabelas de dados e strings. Por exemplo, para filtrar anexos em uma mensagem:

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

Este exemplo mostra como filtrar anexos pelo nome e verificar se existem tais anexos.

4. Declaração de variáveis e conversão de tipos#

Exemplos de expressões e comandos para trabalhar com variáveis e conversão de tipos:

  • conversão de tipo para o primeiro argumento:
    • '1' + 1 resulta em '11' — concatenação de strings, pois o primeiro argumento é uma string, então o número é convertido em string, e depois ocorre a união;
    • 1 + '1' resulta em 2 — soma numérica, porque neste caso ocorre a conversão do segundo argumento para o tipo numérico, e ambos os termos se tornam números;
  • "5/7/07" -as [DateTime] e [datetime]"5/7/07" — formas de converter uma string com data (por exemplo, "5/7/07") em um tipo de dado especial "Data e Hora";
  • [Convert]::ToDateTime("5/7/07") — mais uma forma de converter uma string com data (por exemplo, "5/7/07") em um tipo de dado especial "Data e Hora";
  • (1+12).ToString() — expressão que executa uma operação matemática e, em seguida, altera o tipo de dado para string: '13' ;
  • Ctrl+Space — comando que completa automaticamente o código ou mostra dicas úteis para continuar escrevendo o script;
  • $null — "valor nulo", usado para indicar que uma variável ou resultado está ausente;
  • [string]::IsNullOrEmpty() — comando que verifica se uma string está vazia ou é igual a null. Se sim, retorna true, caso contrário — false.

O PowerShell suporta trabalhar com qualquer tipo de dado, semelhante ao C#:

  • crie uma variável $MyListInList com o tipo Object (para armazenar qualquer tipo de dado);
  • use o comando apresentado abaixo para criar uma lista:

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

  • adicione duas listas vazias à lista.

Primeira lista:

$MyListInList.Add((New-Object Collections.Generic.List[string]));

Segunda lista:

$MyListInList.Add((New-Object Collections.Generic.List[string]));

  • adicione dados às listas aninhadas, por exemplo, a string "myval1" na primeira lista e "myval2" na segunda:

$MyListInList[0].Add("myval1"); $MyListInList[1].Add("myval2");

Observe que a opção "Variáveis locais e globais" pode estar ativada no sistema:

Se essa opção estiver ativada, as variáveis criadas dentro de um bloco são consideradas "locais" por padrão e visíveis apenas dentro desse bloco. Se a opção "Todas as variáveis são globais" estiver ativada, as variáveis podem ser acessadas e utilizadas em qualquer parte do programa ou script, independentemente do bloco de código ou função em que foram criadas.

5. Escopo de variáveis dentro do bloco "Executar expressão"#

Quando você escreve comandos dentro de um bloco (por exemplo, no bloco "Executar expressão") e a opção "Variáveis locais e globais" está ativada, as variáveis criadas lá são consideradas "locais" por padrão (visíveis apenas dentro desse bloco).

Por exemplo, a variável $test2, criada dentro de tal bloco, não estará disponível fora dele:

Se você quiser que a variável $test2 esteja disponível mesmo após a execução desse bloco (por exemplo, de outro lugar do seu script), você deve especificar explicitamente que ela pertence ao escopo "script" (todo o script, e não apenas o bloco). Para isso, use a notação:

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

Observe o $script: , essa expressão indica que a variável $test2 foi criada no escopo de todo o script, e pode ser acessada fora do bloco.

Quando você lê o valor de uma variável, o PowerShell primeiro a procura dentro do bloco (localmente). Se não estiver lá, procura no escopo do script. Mas se você quiser definir o valor de uma variável e torná-la acessível fora do bloco, certifique-se de especificar o escopo $script:

6. Uso do console PowerShell local e remoto no Designer Sherpa RPA para verificar expressões e depurar scripts#

Quando você trabalha com scripts no Sherpa RPA, às vezes é necessário verificar comandos ou depurar seu funcionamento. Para isso, você pode usar o console.

Na parte inferior central do Sherpa Designer, você pode abrir o console clicando na aba "Console". Isso permitirá que você insira comandos e veja os resultados de sua execução. Você pode limpar o console usando o botão "Limpar" ou reiniciar o console usando o botão "Reiniciar console" para redefinir o estado atual.```markdown Limpeza e reinicialização: Você pode limpar o console usando o botão "Limpar" ou reiniciar o console usando o botão "Reiniciar console" para redefinir o estado atual.

O console local é um console embutido que é executado diretamente na janela do Sherpa RPA. Permite verificar rapidamente comandos ou expressões individuais. É bem adequado para testar e depurar pequenos trechos de código.

Quando o Robô ainda não está em execução, apenas o console local está disponível. O console local permite verificar comandos, expressões e condições:

Se você iniciar o Robô em modo de depuração e pausá-lo, terá a oportunidade de trabalhar com o console remoto (este é o contexto do próprio Robô, todos os comandos são executados em sua pilha PowerShell), o que permite visualizar as variáveis atuais do Robô, alterá-las e verificar expressões com base nos dados inseridos. Para pausar o Robô, o Usuário deve:

  • definir pontos de interrupção. Para isso, ele deve clicar com o botão direito no bloco desejado e:

    • escolher na lista suspensa;
    • clicar no bloco desejado e pressionar F9 no teclado;
    • clicar no botão "Ponto de interrupção" no menu "Depuração": .

    O bloco será destacado com uma moldura vermelha:

  • pressionar o botão . O Robô será interrompido no bloco do diagrama onde o ponto de interrupção foi definido;
  • inserir o nome da variável (ou outro comando para trabalhar com o console remoto):

Assim, o controle no console ocorre através de dois fluxos: local (“L”) e remoto (“R”). Ao iniciar e pausar o Robô, o console remoto (no Robô) é ativado automaticamente. Também é possível alternar entre esses fluxos, para isso é necessário pressionar o botão correspondente: “L” ou “R”, enquanto o Robô estiver pausado:

Exemplos de uso:

  • Verificação de valores de variáveis: Digite o nome da variável, por exemplo, $myVariable, para ver seu valor atual.
  • Métodos e propriedades disponíveis para esta variável: Digite o nome da variável, por exemplo, $myVariable, em seguida, digite um ponto . e pressione Ctrl+Space.
  • Execução de expressões: Você pode executar expressões mais complexas, como $myArray | Where-Object { $_ -eq "value" }, para filtrar arrays.
  • Depuração de funções: Se você tiver funções, pode chamá-las do console para verificar seu funcionamento, por exemplo, MyFunction -Parameter $myParameter.

O trabalho no console é demonstrado no seguinte vídeo:

ВидеоMegaShot

Como usar as dicas do IntelliSense no console do Sherpa Designer é demonstrado no seguinte vídeo:

ВидеоMegaShot

7. Criando seus próprios blocos no editor de blocos do Sherpa RPA#

Se você deseja usar suas próprias funções no Sherpa RPA, há a possibilidade de criar seus blocos.

Exemplo de como fazer isso com PowerShell e uma biblioteca externa (arquivo .dll):

  • Conectando uma biblioteca externa:

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

  • Criando um objeto de classe da biblioteca:

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

  • Chamando métodos de diálogo:

$mycls.MyDialog1($MyText);

  • Executando o método estático MyDialog2, que recebe a variável $MyText :

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

  • Trabalhando com tabelas de dados:

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

Uma tabela de dados é formada com as colunas "Column1" e "Column2".