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ê?

Atrevo-me 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

Inscreva-se na lista VIP e receba conteúdos exclusivos

Você pode gostar...

Sem Resultados

  1. Arthur Nycael disse:

    Thomas Rodrigues parabéns pelo artigo! Ficou bem explicado e de fácil entendimento.

    Ansioso para o próximo.
    Continue firme forte!

    Abraços.

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.