Automatização de tarefas com PowerShell

Como realizar a automatização de tarefas com o PowerShell

Por quê automatizar?

O powershell é um shell de linha de comando baseado no .NET que pode ser utilizado para gerenciamento e automatização de tarefas.

Cada vez mais, a automatização de tarefas, traz grandes benefícios para o dia a dia do administrador do ambiente.

Além de prevenir o erro humano, na execução de tarefas rotineiras, possibilita que seja redirecionado os esforços do profissional para tarefas mais nobres.

Nesse artigo, estarei demonstrando de forma clara, simples e objetiva, como automatizar uma tarefa.

Versão do Powershell

É importante mencionar que estou utilizando a versão 7.1.0 (versão estável mais recente até o momento). Se você utiliza uma versão anterior à 7.0.1 recomendo que você atualize.

Para conferir sua versão utilize o comando Get-Host

Link para download https://github.com/PowerShell/PowerShell/releases/tag/v7.1.0

Automatizar o quê?

Me atrevo a dizer que quase tudo pode ser automatizado quando aliamos algumas tecnologias. Quando utilizamos o Powershell em conjunto com o Active Directory, podemos facilitar em muito à implementação de mudanças no ambiente.

Um exemplo disso é quando um administrador de rede necessita alterar o padrão de hostnames de seu ambiente.

Como alterar o hostname automaticamente?

Cada administrador avalia quais parâmetros irá seguir para conduzir à mudança dos hostnames no seu ambiente. Nesse exemplo vamos ver como podemos automatizar o processo de troca de hostnames da rede através de um script.

Nosso script irá consultar o número de série de um equipamento em um arquivo.txt e retornará o patrimônio correspondente a esse numero de série.

Criando o arquivo .txt

É claro que automatizar uma tarefa assim envolve mais do que criar o script. No nosso exemplo, ter um arquivo .txt seguindo o padrão conforme abaixo (informações separadas por vírgula) será essencial.

Obs: Como estou usando uma VM, o número de série tem esse formato, no entanto, a princípio é o mesmo para qualquer equipamento.

Criando o script

Para segmentar o processo, dividi o script em funções.

A função Detect-Serial retorna o valor formatado do número de série do equipamento. Como assim?

Explicando a função:

A variavel $serialobject recebe o número de serie do equipamento através do cmdlet Get-CIMInstance win32_bios.

Format-list = Formata a saída do cmdlet como lista;

Out-String = Converte a saída para o tipo string.

No entanto, ao buscar o número de série do equipamento utilizando o comando Get-CIMInstance win32_bios não obtemos um retorno formatado. Observe:

Importante: É importante termos o $serial no tipo string e sem “espaços vazios” no momento de realizarmos a pesquisa no arquivo .txt.

Para realizar a formatação:

Acima eu retiro utilizo o parametro -replace, onde:

‘\s’ = representa os espaços em branco;

= É o que irá substituir os espaços em branco. No nosso exemplo deixamos sem nenhum valor, visto que não queremos substituir os espaços em branco por nenhum outro caractere.

Veja a saída:

Por fim, a variável $serial irá armazenar a substring da variável $serialobject a partir do “:”.

Resultado:

Com isso obtemos podemos realizar a pesquisa no arquivo .txt.

Pesquisando no TXT

Para pesquisar a informação no arquivo.txt e retornar o valor que queremos eu criei a função RetornaPatrimonio.

Explicando a função:

Para realizarmos a pesquisa no .txt utilizamos o Select-String.

-Path = O caminho onde o arquivo está;

-Pattern = O que deseja procurar. No meu caso eu desejava procurar o resultado da função Detect-Serial.

Resultado:

OBS: Conforme explicado anteriormente, é necessário formatar a saída do prompt.

Formatando a saída:

Dessa vez a substring quer será selecionada segue um padrão diferente. A variável $number recebe uma substring de $numberobj a partir da última ‘,’.

Vemos assim que o valor que a variável $number recebe é o 000200. O arquivo numeros_serie.txt mostra então, que o número de patrimônio correspondente ao serial da máquina é 000200.

Importante: Nesse processo, cada administrador deve avaliar as saídas do prompt para efetuar uma formatação precisa. Isso irá ajudar na execução correta do script.

Alterando o nome

Para isso criarei duas funções. A função SetCredential e a função AlterarNome.

Conforme vamos ver, é necessário termos uma credencial do domínio para que a alteração do nome seja feita.

A função SetCredential

A função SetCredential atribui a uma variável $credential um novo objeto da classe PSCredential que irá armazenar as credenciais.

Os parâmetros para se criar esse objeto são “dominio\usuario, senha”. Porém, o powershell não aceita que uma senha seja adicionada sem criptografia, por isso, é necessário utilizar a função ConvertTo-SecureString. Com isso, a senha fica criptografada no sistema.

Importante: Por mais que o powershell realize a criptografia, sua senha ainda estará exposta no código fonte do script. Portanto, é importante prestar atenção para que o usuário utilizado na execução do script somente tenha permissões para o que for necessário.

A função AlterarNome

Antes de alterar o hostname, eu atribuo à variavel $NovoNomeComputer o padrão de nomenclatura que desejo. No caso ‘PCLAB’ + O numéro de patrimônio.

Por fim, utilizando o cmdlet Rename-Computer eu altero o nome da máquina.

-ComputerName = hostname atual;

-NewName = novo hostname;

-LocalCredential ou DomainCredential = As credenciais utilizadas para validar a ação.

Por fim, agendamos uma reinicialização após 30 minutos.

Executando o script

Após salvar o arquivo em formato .ps1, será necessário executar seguindo alguns padrões específicos.

Para isso, criei um arquivo .bat que chama o script Powershell (que dei o nome de hostname.ps1).

Veja abaixo:

Importante: o arquivo .bat deve ser executado com permissões de administrador.

É fundamental utilizarmos o paramêtro -ExecutionPolicy Bypass para que o script consiga ser executado.

Outro detalhe no arquivo acima é: a primeira linha executa o script utilizando o Powershell versão 5.1 enquanto a segunda linha o executa usando a versão 7.1. Fica a critério do administrador do ambiente qual versão será utilizada.

Melhore o processo!

As possibilidades do Powershell vai bem, além disso. Como disse, é uma demonstração básica de como automatizar um processo.

Somente no nosso exemplo, podemos pensar em várias formas de melhorar nosso código, como:

  • Criar um arquivo de log para identificarmos possíveis erros,
  • Estruturas condicionais para deixar o script ‘mais inteligente’,

e assim por diante.

Portanto, pense em suas necessidades e mãos à obra!

Conclusão

Com esse script, simples e objetivo, conseguimos ter uma base de como automatizar o processo de alteração de hostnames em um ambiente Windows.

Através de pesquisa em um arquivo .txt, identificamos informações necessárias para compor o novo hostname do computador e então fazer á alteração de forma automatizada em sua rede.

Referências

https://docs.microsoft.com/en-us

Publicado por Thomas Rodrigues

Comecei na área de tecnologia em 2014 quando fiz meu primeiro curso. Desde então venho trabalhando com isso. Mais tarde cursei Redes de computadores no Senac e me formei em 2017 como Tecnólogo em Analise e Desenvolvimento de Sistemas. No inicio de 2019 comecei a trabalhar na EMC Computadores e participei de um projeto de migração do SO de um de nossos clientes, AngloGold Ashanti. Desde que conclui o projeto tenho trabalhado em diversos clientes e criando experiencia no suporte ao usuário e em analise de redes de computadores. Além disso, sou especializado em soluções de hardware da Dell e atualmente aprendendo inglês.

Um comentário em “Automatização de tarefas com PowerShell

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: