Trabalhando com informações do sistema
Tags: powershell, beginners, tutorial
Published: 2021-01-21 23:40:25

Seguindo com o nosso [post anterior](https://dev.to/msplatam/comecando-com-powershell-2kne), vamos agora antes de criar a pasta, validar se ela já não existe no sistema para evitar duplicações e erros.

Para fazer isso precisamos receber informações do sistema e valida-las, sendo mais especifico, precisamos saber quais pastas existem e verificar se a que queremos criar está entre elas. Esse cenário é muito comum, quando temos um script que ira continuamente ser executado ou se queremos validar uma instalação. 

Em nosso script, vamos adicionar antes da criação da pasta, uma etapa de validação onde utilizaremos uma função do Powershell chamada **Test-Path**, ou se traduzirmos **Testar-Caminho**. 
Com essa função, informando um caminho, validamos se o mesmo existe ou não. 

Notamos o como ela é especifica e muito simples de usar, gostaria de aproveitar esse momento para compartilhar algo sobre a linguagem. Costumo dizer que sempre que pensamos em algo que muitas pessoas utilizariam e que faz sentido, é muito provável que já tenhamos uma função pronta para esse procedimento, valendo sempre muito a pena pesquisar sobre antes de tentar criar manualmente algo que faça o mesmo procedimento.

Fora a função, precisamos tratar o seu retorno, uma vez que com ela apenas saberemos se o caminho existe ou não, por meio do retorno **True(verdadeiro) ou False(falso)**.
Para isso, vamos usar a estrutura **IF-ELSE**, onde passamos uma parâmetro que queremos validar. Nesse caso, utilizaremos isso de uma forma bem simples, mas conversaremos melhor sobre.

Traduzindo isso em código:
{% gist https://gist.github.com/IGDEXE/f4887dd06897e113838a2ef04ba0b703 %}

Para testar vamos tentar criar a mesma pasta duas vezes, no lado esquerdo temos a primeira tentativa e no direito a segunda.
![Retorno Comando](https://dev-to-uploads.s3.amazonaws.com/i/8pfotwpyo72khfivj9a7.png)
Como podemos ver, nossa validação está funcionando e o sistema não tenta criar uma pasta já existente. 

Com essas pequenas adições, conseguimos aprimorar nosso script de criação de pastas e aumentar nosso leque de possibilidades dentro do Powershell. mas será que podemos fazer isso pelo caminho mais longo? Sem utilizar o **Test-Path**?
E a resposta é sim, embora não recomende. 

Como o objetivo aqui é aprender, vamos pensar em como podemos fazer isso, mesmo não fazendo muito sentido, uma vez que aumentaríamos sem precisar a complexidade de nosso código e isso nunca é indicado, já que aumenta as chances de termos problemas. 

Vamos pensar um pouco no que nossa função faz: 
1. Recebe um caminho
2. Verifica quais pastas existem dentro do caminho base
3. Valida se existe alguma pasta com o mesmo nome da nossa
4. Retorna verdadeiro ou falso

Para validar esse algoritmo, vamos criar um outro script com esse conceito adicionado a nossa criação de pastas:
{% gist https://gist.github.com/IGDEXE/2c5f1a252421e4802aa10cc4d686d4be %}

Não seria possível concluirmos esse modo difícil com o conhecimento que explicamos até aqui, mas futuramente vamos conversar mais sobre **Foreach**, já que ele vai ser muito útil para nossas automações.

Nosso caminho difícil pode gerar problemas, uma vez que tentando validar se nossa pasta já existe, não estamos trabalhando com um cenário onde nosso caminho não existe.
Será que existe uma forma simples de tratar erros em nosso código? 
E a resposta inicial é... **TRY-CATCH**, ou como gosto de chamar, o próximo tópico que conversaremos nessa serie haha