# Adicional

## Estruturas Lógicas

### if, elseif, else

No PowerShell, os operadores condicionais permitem que o programa tome decisões e execute diferentes blocos de código com base em condições.

* A estrutura `if() {}` verifica a condição entre parênteses e executa o bloco de código se a condição for verdadeira.
* As palavras-chave `elseif{}` e `else{}` são usadas para adicionar verificações adicionais e ações alternativas.
* Os blocos `elseif` e `else` não são obrigatórios: é possível usar apenas `if`.

Exemplo:

```powershell
if ($number -gt 10) {
    Write-Output "Número maior que 10"
} elseif ($number -eq 10) {
    Write-Output "Número igual a 10"
} else {
    Write-Output "Número menor que 10"
}
```

Se a condição em `if` for verdadeira, os subsequentes `elseif` e `else` são ignorados.

É possível usar vários `elseif` em sequência para verificar várias opções.

O bloco `else` é executado quando todas as condições anteriores são falsas.

Mais informações podem ser encontradas no link:

{% embed url="<https://docs.microsoft.com/ru-ru/powershell/scripting/learn/deep-dives/everything-about-if?view=powershell-7.1>" %}

### switch

O switch é uma construção conveniente para verificar uma variável em vários valores e escolher o bloco de código correspondente.

```powershell
switch ($variable) {
    0 { Write-Output "Valor igual a 0" }
    1 { Write-Output "Valor igual a 1" }
    2 { Write-Output "Valor igual a 2" }
    default { Write-Output "Valor não corresponde a nenhuma das condições" }
}
```

* Para cada valor, um bloco de código é listado, que será executado se o valor da variável corresponder.
* O bloco `default` é opcional e é executado se nenhum dos valores corresponder.
* O `switch` é útil para múltiplas opções de escolha, reduzindo construções if aninhadas.

Mais informações podem ser encontradas no link:

{% embed url="<https://docs.microsoft.com/ru-ru/powershell/scripting/learn/deep-dives/everything-about-switch?view=powershell-7.1>" %}

## Verificação de $null

No PowerShell, para verificar a igualdade com $null, é recomendável sempre colocar $null à esquerda na expressão:

```powershell
$null -eq $value
```

Isso se deve às particularidades do tratamento de valores no PowerShell, para evitar erros inesperados caso $value não esteja definido.

Em expressões lógicas do PowerShell, é possível usar cmdlets e funções que serão avaliados como valores booleanos com base em sua lógica de verdade/falsidade. Por exemplo, a condição:

```powershell
if ($null_object) {
    $False
} else {
    $True
}
```

Considerará `$null_object` como uma condição falsa (se estiver vazio ou $null) e executará o bloco correspondente.

Também é possível atribuir valores a variáveis diretamente dentro da condição, o que é conveniente para atribuição e verificação simultâneas de $null. Por exemplo:

```powershell
if ($var = (function)) {
    $True
} else {
    $False
}
```

Aqui, a variável `$var` recebe o resultado da função e é imediatamente verificado se não é $null (ou vazio).

De forma semelhante, a verificação da variável em relação a si mesma:

```powershell
if ($var = $var) {
    $True
} else {
    $False
}
```

Mais informações podem ser encontradas no link:

{% embed url="<https://docs.microsoft.com/ru-ru/powershell/scripting/learn/deep-dives/everything-about-null?view=powershell-7.1>" %}

## Strings de Substituição

No PowerShell, existem várias maneiras de formar e concatenar strings.

### Aspas

As variáveis podem ser inseridas diretamente nas strings com diferentes tipos de aspas:

```powershell
$string = "’objeto’"
$string1 = "vendido"

"Teste’ $string com sucesso”” $string1”   # Resultado: Teste’ ‘objeto’ com sucesso” vendido

'Teste” '+$string+' com sucesso’’ '+$string1  # Resultado: Teste” ‘objeto’ com sucesso’ vendido
```

### HereString

É possível usar HereString para declarar uma string multilinha mantendo a formatação:

```powershell
@"
Teste+@’ $string com sucesso” $string1
"@
```

O resultado será estritamente correspondente ao que está contido dentro.

### F-strings

Também existem F-strings para formatação de strings com parâmetros:

```powershell
("Teste {0} com sucesso {1}" -f $string, $string1)
```

## PSCustomObject

PSCustomObject é um objeto PowerShell que armazena dados de forma semelhante a uma tabela hash, mas pode ser manipulado como um objeto, acessando os campos através de ponto.

Isso permite estruturar dados de forma conveniente, criar objetos com propriedades necessárias e realizar operações.

Mais informações sobre PSCustomObject podem ser encontradas no link:

{% embed url="<https://docs.microsoft.com/ru-ru/powershell/scripting/learn/deep-dives/everything-about-pscustomobject?view=powershell-7.1>" %}

## Credenciais

No PowerShell, existem mecanismos especiais para trabalhar com credenciais de forma segura, incluindo funções e parâmetros embutidos, bem como construções que garantem a notificação do usuário sobre alterações e permitem gerenciar o processo de execução (por exemplo, ShouldProcess).

Mais informações sobre ShouldProcess podem ser encontradas no link:

{% embed url="<https://docs.microsoft.com/ru-ru/powershell/scripting/learn/deep-dives/everything-about-shouldprocess?view=powershell-7.1>" %}

## Erro ao executar arquivos ps1

O erro ao executar arquivos .ps1 no PowerShell está relacionado à política de execução de scripts, que por padrão proíbe a execução de quaisquer scripts para proteger o sistema contra código malicioso.

A mensagem de erro é a seguinte:

```powershell
«Não é possível carregar o arquivo ... .ps1, pois a execução de scripts está desativada neste sistema».
```

A razão é que o Windows utiliza a Execution Policy — um conjunto de regras que define quais scripts podem ser executados. Por padrão, a política é `Restricted`, que bloqueia scripts.

Para verificar a política atual, use o comando:

```powershell
Get-ExecutionPolicy
```

Para permitir a execução de scripts:

1. Execute o PowerShell ou PowerShell ISE como administrador.
2. Execute o comando:

```powershell
Set-ExecutionPolicy Unrestricted
```

3. Confirme a alteração pressionando "Sim" (Yes).

Isso permitirá a execução de scripts com a extensão .ps1 sem restrições.

Para um controle mais rigoroso, é possível escolher outros níveis de política, como `RemoteSigned` ou `AllSigned`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/pt/sherpa-rpa/sherpa-designer/sherpa-designer-otvety-na-chasto-zadavaemye-voprosy/powershell/dopolnitelno.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
