Prévia do material em texto
<p>7 - SCRIPT POWERSHELL</p><p>REVISANDO LÓGICA DE PROGRAMAÇÃO</p><p>CONCEITO DE ESTRUTURAS DE DECISÃO</p><p>As principais estruturas de decisão são SE/ENTÃO, SE/ENTÃO/CASO CONTRÁRIO e FAÇA CASO. Cada linguagem de programação pode ter uma variação no formato e/ou sintaxe, mas o fun- cionamento básico das estruturas é parecido entre elas</p><p>A estrutura SE/ENTÃO</p><p>A estrutura SE/ENTÃO é utilizada na avaliação de uma expressão lógica e com base no seu resultado, o código que segue a cláusula ENTÃO pode ser executado ou não. Se o resultado da expressão for verdadeiro, o código é executado; caso contrário, o fluxo do programa segue para a linha logo após o fim da estrutura.</p><p>Podemos executar uma única linha de instrução ou bloco com várias instruções. Neste último caso, o bloco deve ser delimitado com os comandos INÍCIO/FIM. Veja a seguir as duas formas pos- síveis de emprego dessa estrutura:</p><p>Vamos agora supor como exemplo de algoritmo um código cuja função é determinar se a tempe- ratura informada pelo usuário é alta. Primeiramente declaramos a variável que utilizaremos no código:</p><p>O núcleo do código é composto por instruções para mostrar uma mensagem ao usuário e esperar pela entrada de um valor da temperatura, que será armazenado na variável splTemperatura:</p><p>Agora vem a parte inteligente do programa, a tomada de decisão a partir do comando SE/ ENTÃO. Com esse comando vamos testar se o valor armazenado na variável splTemperatura é maior que 30. Se for, uma mensagem é apresentada ao usuário</p><p>Note o uso do operador de comparação > com a variável e o valor constante.</p><p>O código acaba com uma nova mensagem e espera pelo pressionamento da tecla [ENTER]. Esse último recurso é possível apenas com uma chamada ao comando de entrada de dados LER, sem referenciar nenhuma variável.</p><p>Veja como deve ficar o código completo desse algoritmo:</p><p>A Estrutura SE/ENTÃO/CASO CONTRÁRIO</p><p>Uma variação da estrutura apresentada anteriormente é a SE/ENTÃO/CASO CONTRÁRIO, em que temos uma cláusula que permite a execução de outra instrução ou bloco de instrução no caso de a avaliação ser falsa.</p><p>Como antes, para executarmos várias instruções, é necessário delimitá-las com os comandos INÍCIO/FIM. Veja essas duas possibilidades de:</p><p>Retornando ao exemplo anterior, vamos alterar o código de modo que agora seja mostrada uma mensagem de temperatura normal. A alteração deve se resumir ao comando SE/ENTÃO da seguinte maneira:</p><p>O código completo pode ser visto a seguir:</p><p>Estrutura SE/ENTÃO aninhadas</p><p>́ É muito comum em programação termos um encadeamento de diversas estruturas SE/ENTÃO, ou seja, uma estrutura SE/ENTÃO dentro de outra. Isso pode ocorrer quando pre- cisamos avaliar outra expressão, dependendo do resultado da primeira. Neste caso, é importante delimitar a estrutura interna em um bloco INÍCIO/FIM. Isso evita qualquer confusão ocasionada por não podermos identificar a qual comando SE pertence a cláusula CASO CONTRÁRIO. A seguir podemos ver um exemplo desse tipo de aplicação:</p><p>Veja o exemplo anterior de teste de temperatura. Poderíamos alterá-lo para que, no caso de a temperatura ser maior que 30, o código verifique se ela é maior que 45, por exemplo, e mostre a mensagem “Temperatura muito alta” em caso afirmativo. Se estiver abaixo de 45, a mensagem a ser mostrada deve ser “Temperatura alta”.</p><p>Da mesma forma, se a temperatura for menor ou igual a 30, um novo teste pode ser feito para verificar se ela é menor que 10 e mostrar a mensagem “Temperatura baixa”. Com as alterações o código do algoritmo deve ficar assim</p><p>Estrutura FAÇA CASO</p><p>Essa última estrutura de decisão analisa o conteúdo de uma variável comparando-a com uma série de valores constantes. Quando encontrar uma correspondência, a instrução ou bloco de instru- ção vinculado é então executado.</p><p>É importante destacar que somente é efetuada uma comparação de igualdade entre o valor da variável e as constantes listadas. Sendo assim, não é possível efetuar outro tipo de teste, como se o valor é maior ou menor, por exemplo.</p><p>A sintaxe dessa estrutura é a seguinte:</p><p>Se nenhuma das condições for satisfeita e houver a cláusula CASO CONTRÁRIO, a instrução ou bloco de instruções que pertence a ela será executado como sendo padrão.</p><p>Na lista de constantes você pode especificar vários valores, separando-os com vírgula, como no seguinte exemplo:</p><p>Esse tipo de estrutura é muito empregado na seleção de opções de menu, como mostra o código apresentado a seguir:</p><p>Esse código apresenta uma lista de opções e pede para ser escolhida uma delas. Por meio da estrutura condicional FAÇA CASO, o valor armazenado na variável intOpcaoMenu é comparado com as constantes 1, 2, 3, 4 e 0. Um procedimento, que não é mostrado no código, é executado de acordo com esse valor presente na variável.</p><p>Se tiver sido digitada uma opção que está fora da lista, como 8, por exemplo, uma mensagem é apresentada ao usuário informando a ocorrência.</p><p>Uso de operadores lógicos</p><p>As estruturas de decisão SE/ENTÃO e SE/ENTÃO/CASO CONTRÁRIO podem avaliar mais de uma expressão lógica utilizando operadores lógicos E e OU. Por exemplo, se precisarmos testar o valor do salário do funcionário que se encontra armazenado na variável splSalario, para saber se está entre 1800,00 e 2500,00 e assim calcular o imposto com uma alíquota de 5%, o código seria similar ao mostrado a seguir:</p><p>Por outro lado, se quisermos saber se o cargo do funcionário é “Chefe de Setor” ou “Coordena- dor”, é preciso usar o operador OU da seguinte maneira:</p><p>Note que cada expressão lógica está entre parênteses, assim forçamos sua avaliação em pri- meiro lugar, pois os operadores lógicos têm prioridade maior que os operadores relacionais.</p><p>As possibilidades de combinações de expressões com o uso desses operadores são enormes. Por exemplo, você pode ter duas expressões ligadas com o operador E e uma terceira que se relaciona com o valor resultante dessas duas primeiras por meio do operador OU. Veja o exemplo a seguir:</p><p>Com esse código hipotético, se a quantidade em estoque de um determinado item da loja esti- ver entre 10 e 40, ou se esse mesmo item estiver marcado para compra, um pedido de compra é impresso pelo sistema.</p><p>A estrutura de repetição FAÇA ENQUANTO deve ser utilizada quando não sabemos ante- cipadamente a quantidade de vezes que o código deve ser executado. O que decide o término da execução é uma ação do usuário, como uma resposta a uma pergunta, ou uma condição que o programa encontrou, como o fim da leitura de um arquivo, por exemplo.</p><p>No lugar de uma variável de controle que contém o número de vezes que o código foi repetido, a estrutura FAÇA ENQUANTO utiliza uma expressão lógica que pode retornar verdadeiro ou falso após cada iteração. Enquanto o resultado for verdadeiro, o código é executado. Essa expressão deve vir logo após a palavra reservada ENQUANTO.</p><p>A estrutura FAÇA ENQUANTO analisa primeiramente a expressão antes de executar o código ou linhas de código. Se a expressão retornar um valor falso logo na primeira avaliação, o código não é executado nenhuma vez.</p><p>A última estrutura de repetição que estudaremos é REPITA/ATÉ QUE. Ela difere um pouco da anterior pelo fato de efetuar a avaliação da expressão no fim do laço. Desta forma, o código sem- pre será executado ao menos uma vez. Outra característica interessante é que ela repete o código enquanto a condição dada for falsa, ao contrário de FAÇA ENQUANTO, que repete enquanto a con- dição é verdadeira.</p><p>Ela também é empregada em situações onde desconhecemos a quantidade de vezes que o código deve ser executado. Como no laço anterior, o término da repetição é determinado por uma condição.</p><p>Voltemos ao exemplo de conversão de temperatura, alterando-o para uso com o laço REPITA/ ATÉ QUE.</p><p>A parte inicial, correspondente à declaração</p><p>das variáveis, permanece inalterada. O que muda é o corpo principal do código, conforme mostrado na seguinte listagem:</p><p>Pode-se notar que não são utilizados os comandos de declaração de bloco INÍCIO/FIM. Todo o código é inserido na própria estrutura, entre as palavras reservadas REPITA e ATÉ QUE. Note também que agora a variável crContinuar é testada com o valor “N” em vez de “S”</p><p>PowerShell Script</p><p>A linguagem PowerShell Script é uma linguagem aberta, desenvolvida pela Microsoft, utilizada no desenvolvimento de scripts para administração de sistemas, como a plataforma Windows Server, por exemplo. Cabral (2009), destaca que o Power Shell é uma linguagem de script baseada em .NET. A sua sintaxe apresenta um misto de Perl, C++ e C#. Por apresentar uma sintaxe parecida com essas linguagens, PowerShell se torna uma linguagem relativamente fácil de aprender. Embora seja criada pela Microsoft, a linguagem é livre e tem como objetivo a substituição do VBscript e batch script.</p><p>Segundo o site oficial da Microsoft, o PowerShell é uma solução de automação de tarefas multiplataforma que consiste em um shell de linha de comando, uma linguagem de script e uma estrutura de gerenciamento de configuração. Cada vez mais, diferentes produtos apresentam suporte ao PowerShell, como o Azure, SQL, Windows, Exchange entre outros produtos.</p><p>Acesse abaixo o estudo guiado e leia uma introdução ao PowerShell.</p><p>A Figura 2 apresenta um terminal que representa um ambiente shell no</p><p>sistema operacional Linux, ferramenta que o usuário pode utilizar tanto de forma interativa quanto pela execução de scripts. O shell pode ser considerado uma interface entre o usuário e o sistema,</p><p>que possibilita requisitar que o sistema operacional execute comandos, realize cálculos, execute testes/aplicações e combine todas essas operações para arti-cular aplicações e realizar tarefas mais complexas de maneira automatizada. Já o Bash (do inglês, Bourne-Again Shell) é um shell escrito por Brian</p><p>Fox para o projeto GNU para substituir o Bourne Shell (NEWHAM, 2005), que, desde 1989, tem sido amplamente distribuído como o shell-padrão das mais conhecidas distribuições Linux. O Bash provê uma interface baseada em texto na qual o usuário digita comandos para produzir ações e que permite o uso de diferentes comandos com propósitos conhecidos, variáveis, estruturas condicionais, de controle e de entradas e saídas de dados. Pode funcionar de dois modos (ALBING; VOSSEN, 2017): (i) interativo:</p><p>o usuário digita e executa comandos interativamente com a interface, como listar arquivos em um diretório, acessar um diretório específico, etc.; (ii) por script: pelo fato de um script ser formado por instruções armazenadas em um arquivo de modo estruturado visando a automatizar as tarefas usando um único formato, o Bash executa essas instruções sequencialmente, de acordo com o que foi programado, isto é, obedecendo às estruturas de controle, interagindo ou não com o usuário. Por sua vez, o script, um programa de computador interpretado (ROB-BINS; BEEBE, 2005), corresponde a um conjunto de instruções estruturadas (geralmente de acordo com estruturas de controle), em que as instruções são interpretadas e executadas uma por uma por um interpretador de determi-nada linguagem. Diferencia-se de um programa compilado, pois programas compilados são gerados a partir da tradução do código-fonte (escrito em uma linguagem de programação de alto nível) para a linguagem de máquina, por um compilador. Assim, um programa compilado pode ser executado diretamente da máquina sem a necessidade de interpretadores. O PowerShell é uma estrutura multiplataforma de gerenciamento de con-figuração, administração e automação de tarefas em sistemas operacionais da Microsoft (DENT; BLAWAT, 2017), que consiste em um shell de linha de comando e uma linguagem script, fazendo uso de uma linguagem de scripts robusta, que abrange desde expressões regulares, programação funcional até a programação orientada a objetos. Baseia-se na estrutura da Microsoft .NET (O QUE É..., 2020), que provê</p><p>um nível de flexibilidade que não estava disponível em linguagens de scripts da Microsoft anteriores, como VBScript. A interpretação de um programa escrito em PowerShell é realizada sobre o CLR (do inglês, Common Language Runtime), além de permitir aos programadores explorarem o .NET Framework, viabilizarem a manipulação de registros do Windows e do Windows Mana-gement Instrumentation (WMI), etc. Em suma, por ser fundamentado no Microsoft .NET, viabiliza o controle e a automatização da administração de sistemas operacionais Windows. Ao contrário da maioria dos shells, que acei-tam e retornam textos, por ser criado com base no CLR, o PowerShell aceita e retorna objetos — essa mudança fundamental provê ferramentas e métodos totalmente novos voltados para a automatização de tarefas, especialmente visando ao gerenciamento e à administração de sistemas e administração de redes de computadores. Assim, podemos dizer que o uso do PowerShell é fortemente indicado</p><p>para os profissionais de tecnologia, sobretudo administradores de redes e sistemas que desejam atualizar seus scripts antigos para essa nova linguagem da Microsoft.</p><p>A resposta é que os arquivos .bat se tornaram limitados, pois se trata de um recurso de script em lote, com um conjunto de comandos limitados - os comandos disponíveis no prompt de comandos do Windows. Dessa forma, ele não reconhece rotinas utilizadas em linguagens de programação. Por outro lado, o PowerShell é bem mais robusto e apresenta inúmeros recursos, por se tratar de uma linguagem de programação.</p><p>Agora é o momento de conhecer mais sobre a interface do Powershell, bem como sobre a execução de linhas de comando e scripts. Acesse o estudo guiado a seguir para conhecer o ambiente de trabalho dessa ferramenta.</p><p>Na Figura 8, foram indicados quatro passos que se referem às etapas básicas necessárias para criar um script, descritos a seguir.</p><p>1. Programar — há duas opções para criar um novo script: acessar Menu: Arquivo → Novo; ou clicar no atalho indicado pela seta. Além disso, é importante ressaltar que um arquivo já existente pode ser aberto pelo Menu: Arquivo.</p><p>2. Rodar — o ambiente integrado para programação do script, ou cus-tomização e/ou alterações necessárias se um arquivo já existente foi aberto. No exemplo, o mesmo arquivo criado para a exemplificação da Figura 7 foi reaberto no Windows PowerShell ISE.</p><p>3. Executar — são três os modos de executar o script em questão: Menu: Depurar → Executar/Continuar; clicar no ícone indicado pela seta; apertar a tecla F5.</p><p>4. Visualizar os resultados — etapa apresentada pelo Windows PowerShell integrado à ferramenta; de acordo com os resultados apresentados, podemos verificar que nenhuma alteração foi realizada em comparação ao script do exemplo anterior, isto é, cabe ao usuário escolher qual a melhor ferramenta de trabalho para utilizar na programação de scripts, pois ambas apresentam os mesmos resultados — a diferença reside no fato de que uma requer o uso de um editor de texto externo e a outra proporciona um ambiente integrado: editor de texto + Windows Power-Shell, além de diversas outras funcionalidades já citadas neste capítulo.</p><p>3 Características da linguagem PowerShell</p><p>O PowerShell apresenta diferentes características interessantes e com diferentes vantagens em relação aos outros ambientes shell de outras plataformas, como cmd.exe ou Bash, conforme descreveremos a seguir (O QUE É..., 2020).</p><p>Embora a estrutura do Windows PowerShell não seja baseada no prompt de comandos, ele ainda é capaz de executar grande parte dos comandos que eram utilizados no CMD. Isso ocorre porque o PowerShell possui elementos chamados cmdlets, que funcionam como equivalentes aos comandos do CMD. Esses cmdlets utilizam aliases para estabelecer a conexão entre os comandos mais antigos do CMD e os novos comandos do PowerShell.</p><p>Conforme o site oficial da Microsoft, um cmdlet é um comando que é usado no ambiente do PowerShell. O interpretador do PowerShell invoca esses cmdlets</p><p>dentro do contexto de execução de scripts de automação. Os cmdlets executam uma ação e normalmente retornam um objeto do Microsoft .NET para o próximo comando no pipeline. Um cmdlet é um único comando que participa da semântica do pipeline do PowerShell. Isso inclui cmdlets binários, funções de script avançadas e fluxos de trabalho (VISÃO, 2021).</p><p>Exemplo</p><p>O Windows PowerShell</p><p>Copyright (C) Microsoft Corporation. Todos os direitos reservados.</p><p>PS C:\> Get-Process | Sort-Object -Descending CPU | Select-Object -First 10 | Format-Table Id, CPU, Name, Handle | Out-file C:\Windows\temp\output.txt</p><p>Interpretação do exemplo:</p><p>O resultado do cmdlet Get-Process executado isoladamente é uma tabela de várias colunas, que mostra, entre outras informações, todos os processos e os respectivos consumo de tempo de CPU, memória paginada em uso, memória não paginada em uso e memória virtual em uso. No próximo comando, após o pipe, o objeto resultante do cmdlet foi ordenado pela coluna CPU de modo decrescente. Em seguida, novamente após o pipe, o resultado foi filtrado para exibir somente os primeiros 10 processos, que correspondem àqules que mais demandam processamento pelo CPU. Então, a tabela foi formatada para exibir somente as colunas de interesse, ocultando, portanto, os dados de memória, além de exibir somente as colunas Id, CPU, Name e Handle (nesta ordem). O último comando é responsável pela exportação dos dados em um arquivo de texto, especificando o local e o nome do arquivo a ser salvo. (SILVA et al, 2021, pág. 251-252).</p><p>Segue, abaixo, o comando e a listagem do conteúdo do arquivo output.txt:</p><p>PS C:\>cat \windows\temp\output.txt</p><p>Id CPU Name Handle</p><p>-- --- ------ -------</p><p>18324 1524,1875 chrome 2808</p><p>21896 603,359375 chrome 3092</p><p>3460 380,40625 chrome 3396</p><p>11196 241,390625 chrome 3364</p><p>10488 159,765625 explorer 3200</p><p>9928 135,125 core 3304</p><p>19012 115,609375 FoxitPDFReader 3312</p><p>2996 71,1875 chrome 3212</p><p>3924 58,1875 chrome 4112</p><p>424 52,296875 VirtualBoxVM 4331</p><p>Observe, acima, que a saída de cada comando serve como entrada para o próximo. O símbolo "|" corresponde ao operador pipe, que produz a sequência do pipeline sem a necessidade de salvar o resultado de cada comando em um arquivo intermediário.</p><p>Para ter uma ideia do poder dos cmdlets Acesse o "Estudo Guiado" abaixo:</p><p>Windows PowerShell</p><p>␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣</p><p>o console do PowerShell pode ser iniciado em Ferramentas e no modo Server Core você precisa digitar powershell no prompt de comandos para poder usar os comandos.</p><p>O Windows PowerShell 3.0 faz parte do Windows Server 2012 e tem mais de 2300 command-lets, em comparação com cerca de 200 do Windows Server 2008 R2. Um Cmdlet, pronunciado command-let, é a menor unidade de funcionalidade do Shell. Os Cmdlets assemelham-se a comandos internos em outros shells, por exemplo, o comando dir encon- trado no cmd.exe. Os Cmdlets podem ser chamados diretamente da linha de comando do Shell e executados no contexto do Shell, não como um processo separado. Também podem ser organizados na forma de scripts para automatizar tarefas.</p><p>Os command-lets do Windows Server 2012 estão divididos entre as seguintes categorias: ␣ Cmdlets de Administração do AD CS; ␣ Cmdlets de Implantação do AD CS; ␣ Cmdlets de Administração do AD DS;</p><p>␣ Cmdlets de Instalação do Aplicativo; ␣ Cmdlets do AppLocker; ␣ Cmdlets do Analisador de Práticas Recomendadas; ␣ Cmdlets do BranchCache; ␣ Cmdlets de Atualização com Suporte a Cluster; ␣ Cmdlets de Remoção de Duplicação; ␣ Cmdlets de Cliente de Acesso Direto; ␣ Cmdlets de DISM (Deployment Image Servicing and Management); ␣ Cmdlets de Clusters de Failover; ␣ Cmdlets do Hyper-V; ␣ ␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣ ␣ Cmdlets de iSCSI (Internet Small Computer System Interface); ␣ Cmdlets de Destino de iSCSI; ␣ Cmdlets do Microsoft Online Backup; ␣ Cmdlets de MPIO (MultiPath I/O); ␣ Cmdlets de Status de Conectividade de Rede; ␣ Cmdlets do Balanceamento de Carga de Rede; ␣ Cmdlets de TCP/IP de Rede; ␣ Cmdlets de Cliente PKI (Public-Key Infrastructure); ␣ Cmdlets de Armazenamento; ␣ Cmdlets do VAMT (Volume Activation Management Tool); ␣ Cmdlets do WDAC (Windows Data Access Components);</p><p>Cmdlets do WHEA (Windows Hardware Error Architecture); Cmdlets dos Serviços de Avaliação do Windows; Cmdlets de WSUS (Windows Server Update Services).</p><p>␣ ␣ ␣ Segue uma tabela de referência de command-lets.</p><p>Você deve ter percebido que PowerShell Script é multiplataforma, pois vem como uma iniciativa mais moderna em relação ao batch script. Mas essa abertura de plataforma não está relacionada somente à linguagem, mas também a aplicação Windows PowerShell.</p><p>O uso do PowerShell tanto como linguagem quanto como ambiente pode ser um grande aliado para as rotinas de administração de redes, desde as mais simples, como criar diretórios, até as mais complexas, como definir permissões para acesso a esses diretórios.</p><p>image6.png</p><p>image7.png</p><p>image8.png</p><p>image9.png</p><p>image10.png</p><p>image11.png</p><p>image12.png</p><p>image13.png</p><p>image14.png</p><p>image15.png</p><p>image16.png</p><p>image17.png</p><p>image18.png</p><p>image19.png</p><p>image20.png</p><p>image21.png</p><p>image22.png</p><p>image23.png</p><p>image24.png</p><p>image25.png</p><p>image26.png</p><p>image27.png</p><p>image28.png</p><p>image29.png</p><p>image30.png</p><p>image31.png</p><p>image32.png</p><p>image33.png</p><p>image34.png</p><p>image35.png</p><p>image36.png</p><p>image37.png</p><p>image38.png</p><p>image39.png</p><p>image40.png</p><p>image41.png</p><p>image42.png</p><p>image43.png</p><p>image44.png</p><p>image45.png</p><p>image1.png</p><p>image46.png</p><p>image47.png</p><p>image48.png</p><p>image49.png</p><p>image50.png</p><p>image51.png</p><p>image52.png</p><p>image53.png</p><p>image54.png</p><p>image55.png</p><p>image2.png</p><p>image56.png</p><p>image3.png</p><p>image4.png</p><p>image5.png</p>