Olá pessoal, tudo bem? Espero que sim!

Continuando nossa jornada de introdução ao Powershell, hoje vamos falar de um recurso muito interessante e útil voltado a simplificação e otimização de seus scripts: Pipeline.

O que é o Pipeline do Powershell

O Powershell tem uma peculiaridade entre as demais linguagens de programação anteriores a ele, que é a forma estruturada como trabalha com os seus objetos. Quando falamos em Pipeline, basicamente estamos abordando o conceito de linha de produção onde o resultado de um processo ou objeto anterior provê dados para o próximo processo ou objeto até que o resultado esperado seja obtido.

Sobre conceito, a Microsoft cita:

Pipelines são possivelmente o conceito mais valioso usado nas interfaces de linha de comando. Quando usada corretamente, pipelines reduzem o esforço do uso de comandos complexos facilitam a visualização do fluxo de trabalho dos comandos.

Como utilizar o Pipeline

No Powershell, o Pipeline é representado por “|” e tem como principal funcionalidade repassar as propriedades de saída de um comando inicial para o próximo comando.

Sintaxe: <comando> | <comando>

Exemplo 1:

Como puderam observar no exemplo 1, utilizei o cmdlet Get-Item para retornar as propriedades do arquivo.txt, o Pipeline seguido do cmdlet Out-GridView. Como resultado, obtivemos as propriedades tabuladas obtidas através do cmdlet Get-Item em uma janela separada do shell.

Exemplo 2:

No exemplo 2, utilizei novamente o cmdlet Get-Item para retornar as propriedades do arquivo.txt, o Pipeline e em seguida o alias Select (referênciando o cmdlet Select-Object) indicando a propriedade oculta FullName que deve ser retornada.

Obs: Falaremos de Propriedades de Objetos em um próximo post.

Exemplo 3:

No exemplo 3, utilizei mais uma vez o cmdlet Get-Item para retornar as propriedades do arquivo arquivo.txt, o Pipeline e em seguida o cmdlet Rename-Item sem especificar o caminho do arquivo origem e apenas indicando o novo nome do arquivo. Com isto, a propriedade oculta FullName, que representa o caminho completo do arquivo.txt, obtida através do comando Get-Item foi repassada para o parâmetro Path do cmdlet Rename-Item, dispensando a definição desta propriedade necessária para o cmdlet renomear o arquivo corretamente.

Aplicabilidade do Pipeline

Faz todo sentido pensar que o Pipeline é uma forma de continuar a execução de uma cadeia de comandos sem precisar atribuir novamente valores explícitos ou declarados em variáveis.

Como vimos no último post, As variáveis são muito úteis para armazenar valores que se repetem ao decorrer do script, mas nem sempre faz sentido utilizá-las, principalmente quando a saída de um valor de propriedade de objeto pode ser utilizada como entrada de um novo objeto. Mas por quê? Simplesmente pelo consumo de recursos do Sistema Operacional. Quando armazenamos um valor a uma variável, estamos alocando aquele valor em cache na memória para ser utilizado durante toda aquela sessão do shell.

Observe o seguinte script:

Neste script, utilizamos variáveis para definir as propriedades do novoarquivo.txt, bem como o nome antigo, novo nome e o novo local onde ele será movido. Quando executarmos, o script alocará os dados armazenados nas variáveis na memória onde estarão disponíveis até a conclusão da sua execução.

Podemos abordar o script de outra forma:

Desta vez, utilizamos os mesmos comandos abordados no último script, só que em vez de utilizar variáveis, repassamos os valores do comando Get-Item para os próximos comandos, utilizando o Pipeline. Utilizando o script desta forma, você não vai alocar nenhum valor em memória, apenas consumindo os recursos necessários para a execução do script.

Nota: O assunto consumo de memória por variáveis está diretamente relacionado ao tempo de execução do seu script.

Agora imagine um script com mais de mil linhas, com diversas variáveis declaradas que poderiam ser substituídas por comandos que repassam dados para os próximos comandos com o Pipeline. Provavelmente, de acordo com a capacidade do computador que está executando o script, pode ser gerada alguma lentidão ou tempo de execução do script acima do esperado, pois, como estaremos armazenando em memória uma quantidade significativa de dados para as variáveis, o desempenho do computador durante a execução do script pode ser comprometido.

Conclusão

Quando abordamos Pipeline em um script Powershell, estamos tocando no tema Desempenho. É importante vocês começarem a pensar em quanto tempo vocês desejam que seus scripts levem para realizar uma operação. Até o momento, estamos abordando diversas funcionalidades do Powershell para otimizar e simplificar seus scripts. Não adianta o script ter muitas linhas, se ele leva muito tempo para executar a operação desejada. Na verdade, as boas práticas de desenvolvimento de códigos prega que devemos sempre que possível desenvolver scripts simples, rápidos, limpos e organizados. Então sempre que você identificar uma oportunidade e se sentir confortável, utilize Pipelines, Variáveis, Funções, Alias e os próximos itens que abordarei para te ajudar a cada vez mais simplificar as suas operações automatizadas como Sysadmin.

É isso aí galera, por hoje é só. Até o próximo post!

Dúvidas, sugestões, críticas? Entre em contato aqui!

Gostou? Deixe seu comentário e não se esqueçam de curtir a página do Facebook na barra lateral!