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' + 1resulta 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 em2— 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, retornatrue, caso contrário —false.
O PowerShell suporta trabalhar com qualquer tipo de dado, semelhante ao C#:
- crie uma variável
$MyListInListcom o tipoObject(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:
.png)
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.
.png)
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.
.png)
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:
- escolher
.png)
- 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:
ВидеоMegaShotComo usar as dicas do IntelliSense no console do Sherpa Designer é demonstrado no seguinte vídeo:
ВидеоMegaShot7. 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".