PowerShell – Administração e Automatização de Sistemas Windows

Page 1

Arte Powershell.pdf

C

M

Y

CM

MY

CY

CMY

K

1

19/09/17

18:08


EDIÇÃO FCA – Editora de Informática, Lda. Av. Praia da Vitória, 14 A – 1000-247 Lisboa Tel: +351 213 511 448 fca@fca.pt www.fca.pt DISTRIBUIÇÃO Lidel – Edições Técnicas, Lda. Rua D. Estefânia, 183, R/C Dto. – 1049-057 Lisboa Tel: +351 213 511 448 lidel@lidel.pt www.lidel.pt LIVRARIA Av. Praia da Vitória, 14 A – 1000-247 Lisboa Tel: +351 213 511 448 * Fax: +351 213 522 684 livraria@lidel.pt Copyright © 2016, FCA – Editora de Informática, Lda. ISBN edição impressa: 978-972-722-879-9 1.ª edição eBook: maio 2016 1.ª edição impressa: setembro 2017 Impressão e acabamento: Realbase – Soluções Informáticas, Lda. Depósito Legal n.º 427300/17 Capa: José Manuel Ferrão – Look-Ahead

Marcas Registadas de FCA – Editora de Informática, Lda. –

®

®

®

Todos os nossos livros passam por um rigoroso controlo de qualidade, no entanto aconselhamos a consulta periódica do nosso site (www.fca.pt) para fazer o download de eventuais correções. Não nos responsabilizamos por desatualizações das hiperligações presentes nesta obra, que foram verificadas à data de publicação da mesma. Os nomes comerciais referenciados neste livro têm patente registada. Reservados todos os direitos. Esta publicação não pode ser reproduzida, nem transmitida, no todo ou em parte, por qualquer processo eletrónico, mecânico, fotocópia, digitalização, gravação, sistema de armazenamento e disponibilização de informação, sítio Web, blogue ou outros, sem prévia autorização escrita da Editora, exceto o permitido pelo CDADC, em termos de cópia privada pela AGECOP – Associação para a Gestão da Cópia Privada, através do pagamento das respetivas taxas.


ÍNDICE GERAL AGRADECIMENTOS .............................................................................................. IX SOBRE O LIVRO ..................................................................................................XI O que posso encontrar neste livro?........................................................................................................ XI Requisitos .................................................................................................................................................. XI A quem se dirige este livro? .................................................................................................................. XII Convenções .............................................................................................................................................. XII Organização do livro .............................................................................................................................. XII Capítulo 1: Introdução ...................................................................................................................XIII Capítulo 2: Aspetos Básicos ..........................................................................................................XIII Capítulo 3: Scripting .......................................................................................................................XIII Capítulo 4: Administração de Sistemas .......................................................................................XIII Capítulo 5: Administração Remota ............................................................................................. XIV Suporte ................................................................................................................................................... XIV 1. INTRODUÇÃO ................................................................................................... 1 1.1. O que é a PowerShell? .......................................................................................................................... 1 1.2. Porquê aprender PowerShell? ............................................................................................................. 6 1.3. CLI da PowerShell ................................................................................................................................ 7 1.3.1. Versão utilizada ...................................................................................................................... 11 1.3.2. Primeira demonstração prática ............................................................................................. 12 Conclusão.................................................................................................................................................. 15 Sites de consulta ....................................................................................................................................... 15 2. ASPETOS BÁSICOS .......................................................................................... 17 2.1. Comandos PowerShell: cmdlets ......................................................................................................... 17 2.1.1. Utilização de parâmetros ....................................................................................................... 18 2.1.2. Aliases ....................................................................................................................................... 22 2.1.3. Conjuntos de parâmetros (parameter sets) ............................................................................ 24 2.2. Cmdlet Get-Help .................................................................................................................................. 25 2.2.1. Atualização da ajuda .............................................................................................................. 29 2.2.2. Tópicos de ajuda ..................................................................................................................... 30 2.3. Cmdlet Get-Command ......................................................................................................................... 31 2.4. Pipelines .............................................................................................................................................. 36 2.5. Cmdlet Get-Member ............................................................................................................................ 40 2.5.1. Um exemplo completo ........................................................................................................... 41 2.6. Formatação ........................................................................................................................................ 44 2.6.1. Cmdlet Format-List ................................................................................................................... 44 2.6.2. Cmdlet Format-Table ................................................................................................................ 47 2.6.3. Cmdlet Format-Wide................................................................................................................. 48

© FCA


VI

POWERSHELL

Conclusão.................................................................................................................................................. 49 Sites de consulta ....................................................................................................................................... 49 3. SCRIPTING ................................................................................................... 51 3.1. Variáveis............................................................................................................................................. 51 3.1.1. Declaração e inicialização de variáveis ................................................................................ 53 3.1.2. Tipos de variáveis ................................................................................................................... 54 3.1.3. Âmbitos (scopes) ...................................................................................................................... 56 3.1.4. Uso de variáveis em comandos ............................................................................................ 57 3.1.5. Strings ....................................................................................................................................... 58 3.1.6. Arrays ....................................................................................................................................... 61 3.1.7. Hash tables ................................................................................................................................ 62 3.2. Instruções de decisão e de repetição............................................................................................... 65 3.3. Funções............................................................................................................................................... 68 3.3.1. Utilização de parâmetros ....................................................................................................... 69 3.3.2. Parâmetros do tipo switch ...................................................................................................... 71 3.3.3. Aspetos avançados ................................................................................................................. 72 3.4. Scripts ................................................................................................................................................ 74 3.4.1. Outros aspetos interessantes ................................................................................................. 77 3.5. Tratamento de erros ........................................................................................................................ 78 Conclusão ................................................................................................................................................ 80 Sites de consulta ...................................................................................................................................... 80 4. ADMINISTRAÇÃO DE SISTEMAS .......................................................................... 81 4.1. Introdução .......................................................................................................................................... 81 4.2. Interação com ficheiros .................................................................................................................... 81 4.2.1. Criação de pastas .................................................................................................................... 84 4.2.2. Copiar ficheiros....................................................................................................................... 85 4.2.3. Mover ficheiros ....................................................................................................................... 87 4.2.4. Modificar nome de ficheiros ................................................................................................. 87 4.2.5. Eliminar ficheiros ................................................................................................................... 87 4.2.6. Permissões ............................................................................................................................... 88 4.3. Impressoras........................................................................................................................................ 89 4.4. Registo do Windows .......................................................................................................................... 91 4.4.1. Providers PowerShell ................................................................................................................ 92 4.4.2. Exemplos de interação com o Registo do Windows ............................................................ 94 4.5. Rede (networking) .............................................................................................................................. 96 4.5.1. Ligações de rede ..................................................................................................................... 97 4.5.2. DNS (Domain Name System) no lado cliente ...................................................................... 100 4.5.3. Diagnóstico de ligações de rede ......................................................................................... 103 4.5.4. Mapeamento de shares de rede ........................................................................................... 105 4.6. Sistema operativo ............................................................................................................................ 107 4.6.1. Sessões CIM ........................................................................................................................... 114 4.6.2. Filtragem de resultados obtidos ......................................................................................... 117 4.7. ADSI (Active Directory Services Interface) ...................................................................................... 117 4.7.1. Criação e eliminação de objetos .......................................................................................... 121 © FCA


ÍNDICE GERAL

VII

4.7.2. Modificação de objetos ........................................................................................................ 122 4.7.3. Considerações finais............................................................................................................. 123 4.8. Módulo Active Directory ................................................................................................................. 124 4.9. Utilização de jobs ............................................................................................................................. 130 4.10. Gestão de pacotes de instalação (Package Management)............................................................ 135 4.10.1. Módulo PackageManagement .............................................................................................. 136 4.10.2. Providers ............................................................................................................................... 136 4.10.3. Repositórios de pacotes ..................................................................................................... 138 4.10.4. Gestão de pacotes ............................................................................................................... 138 4.10.5. Módulo PowerShellGet ........................................................................................................ 142 Conclusão................................................................................................................................................ 143 Sites de consulta ..................................................................................................................................... 144 5. ADMINISTRAÇÃO REMOTA ............................................................................... 145 5.1. Aspetos básicos ............................................................................................................................... 145 5.2. Configuração ................................................................................................................................... 146 5.2.1. Cmdlet Enable-PSRemoting.................................................................................................... 148 5.2.2. Modificação das permissões das configurações de sessão .............................................. 149 5.2.3. Modificação dos privilégios do utilizador ........................................................................ 150 5.2.4. Observações finais ................................................................................................................ 150 5.3. Utilização ......................................................................................................................................... 151 5.3.1. Cmdlets com parâmetro ComputerName ............................................................................. 151 5.3.2. Sessões interativas ................................................................................................................ 152 5.3.3. Invocação remota de comandos ......................................................................................... 153 5.3.4. Sessões persistentes .............................................................................................................. 155 5.4. Sessões remotas CIM ...................................................................................................................... 157 5.5. Jobs remotos ..................................................................................................................................... 159 Conclusão................................................................................................................................................ 162 Sites de consulta ..................................................................................................................................... 162 ÍNDICE REMISSIVO ........................................................................................... 163

© FCA


AGRADECIMENTOS Em primeiro lugar, quero agradecer à minha esposa, Marina, pelo apoio fornecido durante todo o processo de escrita do livro. Não posso deixar de referir a participação do Belarmino Mendonça, do Luís Filipe Barros, do Helder Robinson, do Rui Melo e do Nuno Gomes. As suas revisões, contribuições técnicas e opiniões sinceras tiveram uma influência positiva no resultado final. Finalmente, queria também agradecer à Ana Correia e à Laura Faia (da FCA) pela disponibilidade demonstrada ao longo do projeto.

Luís Abreu

Em primeiro lugar, quero agradecer à minha esposa, Eugénia, e ao meu filho, Carlos, por todo o apoio e incentivo. Quero ainda aproveitar esta oportunidade para agradecer ao meu amigo Luís Abreu, pelo desafio para participar na criação deste livro. Não posso, também, deixar de referir a participação do Belarmino Mendonça, do Luís Filipe Barros, do Helder Robinson, do Rui Melo e do Nuno Gomes. As suas revisões, contribuições técnicas e opiniões sinceras tiveram uma influência positiva no resultado final. Finalmente, queria também agradecer à Ana Correia e à Laura Faia (da FCA) pela disponibilidade demonstrada ao longo do projeto.

Paulo Morgado

© FCA


SOBRE O LIVRO Nos últimos anos, a PowerShell tem ganhado cada vez maior popularidade e peso na administração e automatização de sistemas Windows. Neste livro, tentamos descrever e apresentar as principais caraterísticas associadas ao uso da PowerShell. Como veremos, descrever exatamente o que é a PowerShell acaba por ser uma tarefa bem difícil. A PowerShell não é só uma consola para execução de comandos. Também não é só uma linguagem de scripting. Na realidade, estas são apenas duas das faces mais visíveis deste ambiente de execução, cujas principais funcionalidades serão analisadas neste livro.

O QUE POSSO ENCONTRAR NESTE LIVRO? Este livro centra-se na apresentação das principais caraterísticas e funcionalidades disponibilizadas pela PowerShell. Para além de introduzir o leitor ao mundo da PowerShell e de fornecer os princípios básicos que servirão de ponto de partida para a exploração deste ambiente de execução, apresenta vários exemplos práticos de diferentes áreas nas quais a utilização da PowerShell contribui para o aumento da eficácia e da produtividade dos utilizadores (administradores de sistema e programadores). Assim, ao longo deste livro, o leitor poderá, por exemplo, encontrar informação sobre como interagir com sistemas de ficheiros e registo do Windows. Para além disso, apresenta alguns comandos que podem auxiliar o leitor a efetuar a deteção e a resolução de eventuais problemas comuns (ligação à rede, DNS – Domain Name System, entre outros). Tópicos como WMI (Windows Management Instrumentation) e interação com Active Directory também não foram esquecidos e são analisados ao longo do livro. Finalmente, existe ainda espaço para introduzir o remoting. Como veremos, esta é uma funcionalidade avançada, cujo principal objetivo é permitir a execução de comandos em máquinas remotas. Esta é, com toda a certeza, uma funcionalidade muito útil para o administrador de sistemas distribuídos.

REQUISITOS Este é um livro prático. Apesar disso, a verdade é que foi escrito para permitir que a aprendizagem das funcionalidades da plataforma possa ser feita sem que o leitor tenha de estar sentado em frente de um computador. Nos dias que correm, praticamente todos os sistemas Windows já possuem a PowerShell instalada. Dada a constante evolução da PowerShell, a sua versão tem vindo a © FCA


XII

POWERSHELL

evoluir com a versão do sistema operativo. No entanto, tem havido uma preocupação para manter a última versão compatível com todas as versões de sistema operativo suportadas. Apesar de muitos dos exemplos apresentados poderem ser utilizados na versão 3.0 da PowerShell, recomendamos a instalação da versão 4.0 (ou superior) para garantir uma correta execução de todos os comandos discutidos neste livro. Essa versão (ou uma superior) pode ser obtida a partir da página oficial da PowerShell em https://msdn.microsoft.com/powershell/mt173057.aspx.

A QUEM SE DIRIGE ESTE LIVRO? Este livro é dirigido a todos aqueles que pretendem colocar-se rapidamente a par das principais funcionalidades introduzidas pela PowerShell. O livro parte do pressuposto de que o leitor já tem alguns conhecimentos sobre a plataforma Windows, pelo que não são apresentadas quaisquer noções básicas acerca desta plataforma.

CONVENÇÕES Ao longo deste livro, optou-se por seguir um conjunto de convenções que facilitam a interpretação do texto e do código apresentados. Assim, todos os comandos são apresentados no seguinte formato: Get-ChildItem

O caráter  é usado para representar comandos que tiveram de ser divididos em várias linhas por falta de espaço no livro: isto deveria estar  tudo numa linha

Por sua vez, as notas ou observações importantes poderão ser encontradas no interior de uma secção com o seguinte grafismo: Nota importante Esta é uma nota ou observação importante.

ORGANIZAÇÃO DO LIVRO Este livro encontra-se dividido em cinco capítulos, que poderão ser lidos sequencialmente ou, se o leitor assim o preferir, de forma alternada (isto é, sem respeitar a ordem de capítulos apresentada). © FCA


SOBRE O LIVRO

XIII

A leitura sequencial do livro conduz o leitor ao longo de um processo de aprendizagem da PowerShell que começa por introduzir os conceitos e comandos base antes de apresentar vários exemplos práticos de diversas áreas. Por outro lado, a leitura não sequencial (alternada) dos capítulos permite o uso do livro como referência para funcionalidades. Esta aproximação é possível devido ao facto de todas as (poucas) dependências entre capítulos estarem devidamente identificadas.

CAPÍTULO 1: INTRODUÇÃO Este capítulo dará início ao nosso estudo da PowerShell. Depois de justificar o porquê do uso desta plataforma, o capítulo apresenta algumas das principais caraterísticas associadas ao uso da PowerShell. O capítulo não termina sem ilustrar um exemplo prático com algumas das potencialidades associadas ao uso da PowerShell.

CAPÍTULO 2: ASPETOS BÁSICOS Neste capítulo começaremos por apresentar um conjunto de cmdlets que permitem a exploração dos restantes cmdlets e as principais caraterísticas deste ambiente de execução. Neste capítulo, aproveitaremos ainda para introduzir o conceito de formatador e verificar como recorrer a estes elementos para apresentar os resultados obtidos a partir da execução dos comandos.

CAPÍTULO 3: SCRIPTING Neste capítulo introduziremos várias das funcionalidades relacionadas com a escrita de código script em PowerShell. Depois de introduzirmos o conceito de variável e de apresentarmos alguns dos principais tipos que podem ser usados diariamente na PowerShell, voltaremos a nossa atenção para o uso de estruturas de decisão e de repetição. O capítulo refere ainda vários aspetos importantes relacionados com a escrita de funções e com a criação de ficheiros de script que permitem a reutilização de código PowerShell entre sessões de trabalho.

CAPÍTULO 4: ADMINISTRAÇÃO DE SISTEMAS Neste capítulo, reutilizaremos os conhecimentos introduzidos nos capítulos anteriores e apresentaremos vários exempos práticos que mostram como a PowerShell pode ser usada na resolução de problemas normais do dia a dia do administrador de sistemas. Inte-

© FCA


XIV

POWERSHELL

ração com ficheiros, com pastas e com o Registo do Windows são alguns dos tópicos relacionados com a administração local que são apresentados. O capítulo reserva ainda espaço para alguns tópicos mais avançados, como, por exemplo, a utilização de WMI e ADSI (Active Directory Service Interfaces) e a gestão de um Active Directory através dos comandos fornecidos pela ferramenta RSAT (Remote Server Administration Tool). Finalmente, introduziremos o conceito de job e veremos como é que se pode recorrer a estes objetos para efetuar a execução de comandos em background.

CAPÍTULO 5: ADMINISTRAÇÃO REMOTA O último capítulo do livro aborda o uso de remoting. Depois de apresentar os aspetos teóricos relacionados com o uso de remoting, o capítulo apresenta todos os passos necessários à correta configuração de uma máquina para que possa receber comandos remotos. Em seguida, serão apresentadas várias estratégias que podem ser utilizadas para permitir a execução de um comando remotamente. Assim, temas como sessões remotas interativas, o estabelecimento de sessões remotas e o uso de sessões CIM (Common Information Model) serão abordados com vários exemplos que ilustram a sua aplicação prática.

SUPORTE Este livro foi elaborado com base na versão 5.0 da plataforma PowerShell. Se, por acaso, o leitor encontrar informação que lhe pareça incorreta, ou tiver sugestões em relação ao conteúdo de alguma secção deste livro, então não hesite e envie um email com as suas questões para labreu@gmail.com. Eventuais alterações serão publicadas no site da editora em http://www.fca.pt.

© FCA


1

INTRODUÇÃO

Neste capítulo, vamos iniciar a nossa viagem pelo mundo da PowerShell. Depois de introduzirmos a PowerShell e de apresentarmos algumas razões que justificam a sua aprendizagem, passaremos à prática e ilustraremos algumas funcionalidades e caraterísticas mais importantes no seu uso diário.

1.1

O QUE É A POWERSHELL?

Mas afinal o que é a PowerShell? Será que estamos a falar de uma consola com linha de comandos? Ou será que estamos a falar de uma linguagem de scripting? Na realidade, a PowerShell é ambas. Mas a PowerShell é muito mais do que uma linha de comandos ou linguagem de scripting. Na verdade, estas são apenas duas das faces mais visíveis da PowerShell. Na nossa opinião, a PowerShell deve ser vista como um ambiente de execução, que nos permite interagir com um sistema operativo através de um conjunto de ferramentas. À primeira vista, esta definição pode parecer muito abstrata, pelo que é conveniente procedermos a uma explicação mais profunda. A Figura 1.1 apresenta aquilo a que muitas pessoas chamam de PowerShell. Na realidade, essa figura apresenta apenas o CLI (Command Line Interface) da PowerShell. É através desta consola que podemos executar os comandos, os scripts e muitas das tarefas que até ao lançamento da PowerShell eram tipicamente executadas na consola Command Prompt (cmd.exe).

FIGURA 1.1 – Command Line Interface da PowerShell © FCA


2

POWERSHELL

Por exemplo, se executarmos o cmdlet Get-ChildItem, obteremos uma listagem com todos os itens (ficheiros e pastas) mantidos no interior da pasta atual. A Figura 1.2 apresenta os resultados obtidos a partir da execução desse cmdlet.

FIGURA 1..2 – Obtenção das pastas e ficheiros mantidos no interior de uma pasta O que é um cmdlet? Um cmdlet é um dos vários tipos de comando que executam uma determinada operação num ambiente PowerShell. Os cmdlets podem ser executados diretamente a partir do CLI (como ilustrado no exemplo anterior) ou a partir de scripts escritos pelo utilizador. Na prática, um cmdlet executa uma determinada tarefa e retorna o seu resultado sob a forma de um objeto .NET. Como veremos, este objeto, que representa o resultado da sua execução, pode ser passado a outro cmdlet através de um pipe. A passagem destes objetos .NET de um cmdlet para outro através de pipes é uma das grandes vantagens da PowerShell em relação a outras shells (em que a passagem de informação entre comandos é feita através de texto que tem de ser interpretado pelo comando seguinte). Para além dos cmdlets, a PowerShell também suporta a execução de outros tipos de comandos, como, por exemplo, os tradicionais ficheiros exe ou bat. Os cmdlets diferem desses comandos nos seguintes aspetos: – Os cmdlets são instâncias de classes .NET (e não executáveis); – Geralmente, os cmdlets não efetuam operações de parsing, apresentação de erro ou formatação de resultados (estas operações ficam a cargo do ambiente de execução PowerShell); – Os cmdlets são alimentados por objetos obtidos a partir da pipeline em vez de texto (como acontece com os comandos tradicionais); – Os cmdlets processam apenas um único objeto de cada vez (record-oriented). Como seria de esperar, também podemos criar os nossos próprios cmdlets. Para isso, temos de criar uma nova classe em C# (ou noutra linguagem compatível) e seguir as recomendações definidas em https://technet.microsoft.com/library/dd878294.aspx. A criação de novos cmdlets está fora do âmbito © FCA


INTRODUÇÃO

3

deste livro, pelo que o utilizador interessado pode obter mais informações na documentação oficial existente em https://technet.microsoft.com/library/dd878294.aspx.

Antes de avançarmos, importa salientar que a PowerShell não é case sensitive. Portanto, no que diz respeito ao processamento dos comandos, ela não efetua quaisquer distinções entre minúsculas e maiúsculas. Na prática, isto significa que os nomes get-childitem, Get-childitem ou Get-ChildItem identificam sempre o mesmo cmdlet (a utilização de maiúsculas no texto do livro prende-se apenas com o uso de uma convenção aceite no mundo da PowerShell). Regressando ao nosso exemplo, resta-nos dizer que poderíamos ter recorrido aos aliases dir ou ls para obter exatamente o mesmo resultado obtido com a execução do comando anterior. Na prática, um alias, que é usado para identificar um cmdlet (no Capítulo 2 analisaremos detalhadamente este tópico). Para além dos aliases anteriores, a PowerShell introduz ainda outros, que tentam simplificar a vida aos utilizadores com experiência no uso da consola cmd.exe ou da consola bash. Note-se que o uso destes aliases na escrita de scripts ou módulos não é considerado uma boa prática. Para além da consola CLI, podemos executar comandos na PowerShell ISE (Integrated Script Environment). Este utilitário também pode ser usado na criação e depuração de scripts PowerShell. Uma das formas mais rápidas de o executarmos passa pelo uso do alias ise (que referencia o comando PowerShell_ise.exe) a partir de uma consola CLI. A Figura 1.3 ilustra o aspeto desta aplicação. Como é possível verificar, a aplicação encontra-se dividida em três janelas. No canto inferior esquerdo encontramos uma consola CLI da PowerShell embebida. No canto superior esquerdo temos acesso a um editor que nos permite criar ou editar scripts. Finalmente, no lado direito temos uma janela que apresenta uma lista de cmdlets introduzidos pelos módulos registados na máquina. Ao escolhermos um comando, temos acesso a informação detalhada sobre esse comando. Esta janela permite-nos definir os valores dos vários parâmetros que podem ser utilizados em conjunto com um cmdlet.

© FCA


4

POWERSHELL

FIGURA 1..3 – Janela da PowerShell ISE Módulos PowerShell Um módulo pode conter cmdlets, funções, variáveis, providers e outros elementos (por exemplo, snap ins) que podem ser utilizados numa sessão PowerShell. Na prática, os módulos costumam agrupar vários comandos relacionados com uma determinada área. Como seria de esperar, os módulos podem ser distribuídos e instalados em qualquer máquina. Depois de instalados, os comandos definidos por esse módulo podem ser utilizados como qualquer outro cmdlet predefinido (em abono da verdade, importa referir que os chamados cmdlets predefinidos podem ser utilizados a partir de sessões PowerShell, porque os módulos que os contêm foram instalados aquando da instalação da PowerShell na máquina). A partir da versão 3 da PowerShell, depois de instalado um módulo é automaticamente carregado na sequência da primeira execução de um dos comandos por si definidos (anteriormente, a execução de um comando tinha sempre de ser precedida do carregamento do módulo que o definia). A localização dos módulos usados pela PowerShell é definida pela variável de ambiente PSModulePath e pode ser recuperada através do comando seguinte: PS E:\Users\luisabreu\Downloads> Get-ChildItem Env:\PSModulePath O leitor com experiência noutras shells não pode deixar de reparar que o acesso a uma variável de ambiente segue a mesma sintaxe utilizada para aceder a um ficheiro ou a uma pasta existentes no disco. Isto acontece porque os cmdlets que utilizamos para navegar ao longo das pastas e ficheiros de um disco foram criados para consumir dados disponibilizados por um provider. Como já existe um provider predefinido para variáveis de ambiente, então podemos reutilizar o comando Get-ChildItem para apresentar uma listagem dessas variáveis (no excerto anterior, limitámo-nos a apresentar o valor da variável de ambiente PSModulePath).

© FCA


3

SCRIPTING

Neste capítulo apresentaremos algumas das funcionalidades disponibilizadas pela PowerShell que podem ser utilizadas em operações de scripting. Tópicos como variáveis, estruturas de decisão e repetição, âmbitos ou funções irão merecer atenção especial. No final, o leitor terá ao seu dispor todos os conhecimentos necessários para a escrita e reutilização de código script em PowerShell.

3.1

VARIÁVEIS

Até ao momento, limitámo-nos a executar um conjunto de comandos simples a partir da CLI da PowerShell, sem que tenha sido necessário guardar provisoriamente os resultados obtidos a partir da execução de cada um desses comandos. Se essa necessidade tivesse surgido, então poderíamos resolver o problema através de uma variável. Na prática, podemos ver as variáveis como identificadores que permitem o acesso a espaços de memória que são utilizados para guardar determinados valores. Na PowerShell, os nomes das variáveis começam sempre com o caráter $, conforme ilustrado no seguinte excerto: PS F:\Downloads>$conteudos = Get-ChildItem

Neste caso, a variável $conteudos acaba por guardar o resultado obtido a partir da execução do cmdlet Get-ChildItem. Por outras palavras, $conteudos referencia um array de objetos, o que pode ser verificado através da seguinte execução: PS F:\Downloads>Get-Member -InputObject $conteudos TypeName: System.Object[] Name

MemberType

Definition

----

----------

----------

Count

AliasProperty

Count = Length

Neste caso, utilizámos o parâmetro InputObject para passar o objeto que estamos interessados em analisar. Como se pode verificar, estamos perante um array de elementos do tipo System.Object (tipo base de todos os objetos .NET). Em alternativa, poderíamos ter utilizado o método GetType, conforme ilustrado no excerto seguinte: © FCA


52

POWERSHELL

PS F:\Downloads> $conteudos.GetType() IsPublic IsSerial Name

BaseType

-------- -------- ----

--------

True

System.Array

True

Object[]

Nesta altura, o leitor poderá estar a interrogar-se acerca da proveniência do método GetType. Ora bem, a PowerShell recorre ao ambiente .NET para suportar o uso de objetos. Na prática, isto significa que todos os objetos herdam direta ou indiretamente de System.Object, tipo que introduz um método público designado por GetType. Este método devolve metadados que caraterizam o objeto sobre o qual foi executado (sendo o tipo de objeto uma das caraterísticas dos metadados devolvidos). Foi por isso possível invocar o método GetType sobre a variável no excerto anterior para obter o tipo de objeto referenciado pela variável $conteudos. A variável $conteúdos representa um dos diferentes tipos de variáveis que podem ser utilizadas na PowerShell. As variáveis definidas pelo utilizador (categoria na qual se inclui a variável $conteudos apresentada no exemplo anterior) existem enquanto a consola estiver aberta ou até que tenham sido explicitamente eliminadas pelo utilizador (mais pormenores nos parágrafos seguintes). Se quisermos manter uma variável entre várias sessões PowerShell, então deveremos adicioná-las ao perfil do utilizador (mais informações sobre perfis de utilizador disponíveis em https://technet.microsoft.com/library/hh847857.aspx). Note-se, contudo, que, à semelhança do que acontece com as variáveis de ambiente, eventuais alterações ao valor dessas variáveis não são persistidas entre sessões, nem o seu valor é alterado se ocorrer alguma alteração no perfil. Na prática, isto significa que as variáveis definidas no perfil do utilizador possuem sempre o valor inicial aquando do arranque de uma nova sessão PowerShell. Perfis em PowerShell Em PowerShell, um perfil não é mais do que um ficheiro de script executado durante o arranque de uma sessão PowerShell. Os perfis permitem personalizar as sessões PowerShell através da injeção de variáveis, funções, aliases, módulos e outros elementos PowerShell. Atualmente, a PowerShell suporta vários tipos de perfis que podem ser aplicados às sessões de utilizadores e aos hosts usados no suporte dessas sessões. Apesar de suportar vários tipos de perfis, a verdade é que a PowerShell não introduz perfis predefinidos. Portanto, se estivermos interessados em criar um perfil, então teremos de criar o ficheiro de script no local correto. A documentação disponível em https://technet.microsoft.com/library/hh847857.aspx analisa em detalhe os vários tipos de perfis e identifica os locais onde cada tipo de perfil deve ser definido.

Para além de variáveis definidas pelo utilizador, a PowerShell suporta o uso das chamadas variáveis automáticas. Estas variáveis são geridas pela própria PowerShell (portanto, nunca podem ser modificadas pelo utilizador) e usadas para guardar informação © FCA


SCRIPTING

53

sobre o estado da PowerShell. Por exemplo, $PSHome é uma dessas variáveis e permite obter o caminho até à pasta de instalação da própria PowerShell. O utilizador interessado pode obter mais informações sobre as variáveis automáticas em https://technet.microsoft.com/library/hh847768.aspx. Finalmente, temos um terceiro tipo de variáveis, conhecidas como variáveis de preferência. Estas variáveis são criadas pela PowerShell e inicializadas com valores predefinidos. Contudo, e ao contrário do que acontecia com as automáticas, as variáveis que se enquadram nesta categoria podem ser modificadas pelo utilizador. $MaximumHistoryCount é uma destas variáveis e serve para definir o número de comandos que devem ser gravados durante a sessão atual. Uma vez mais, redirecionamos o leitor interessado em obter mais detalhes sobre este tipo de variáveis para a documentação disponível em https://technet.microsoft.com/library/hh847796.aspx.

3.1.1

DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS

Em PowerShell, a declaração de variáveis não é obrigatória. Na prática, é normal declarar e inicializar uma variável numa única instrução, conforme ilustrado no exemplo do início da secção 2.1. Todas as variáveis não inicializadas possuem o valor especial $null. O excerto seguinte ilustra este ponto: PS F:\Downloads> $test -eq $null True PS F:\Downloads> $test = 10 PS F:\Downloads> $test -eq $null False

No primeiro teste, $test ainda não tinha sido inicializada, pelo que possui automaticamente o valor $null. Esta condição deixa de se verificar a partir da altura em que atribuímos um valor à variável (neste caso, o valor 10). Se quisermos imprimir o valor de uma variável, temos apenas de escrever o seu nome na prompt da consola: PS F:\Downloads> $test 10

A eliminação do valor de uma variável pode ser efetuada através do cmdlet Clear-Variable ou da atribuição do valor $null: PS F:\Downloads> $test = $null

Se quisermos, podemos ainda obter uma listagem de todas as variáveis utilizadas durante uma sessão através do cmdlet Get-Variable. No excerto seguinte listamos todas as variáveis que contêm o nome te e que foram utilizadas na sessão atual: © FCA


54

POWERSHELL

PS F:\Downloads> Get-Variable -Name *te* Name

Value

----

-----

conteudos

{Acceptance Tests...

ExecutionContext

System.Management.Automation.EngineIntrinsics FormatEnumerationLimit

4

NestedPromptLevel

0

OutputEncoding

System.Text.ASCIIEncoding

PSBoundParameters

{}

PSDefaultParameterValues

{}

Em alternativa, podemos recorrer ao cmdlet Get-ChildItem para atingir o mesmo objetivo. Isto é possível devido ao facto de existir um provider que permite enumerar as variáveis como se estas fossem pastas ou ficheiros no interior de outra pasta (no Capítulo 4 apresentaremos as principais caraterísticas relacionadas com o uso de providers em PowerShell): PS F:\Downloads> Get-ChildItem Variable:\*te* Name

Value

----

-----

conteudos

{Acceptance Tests...

3.1.2

TIPOS DE VARIÁVEIS

Por predefinição, as variáveis definidas na PowerShell são loosely typed. Na prática, isto significa que podemos guardar qualquer tipo de objeto numa variável: PS F:\Downloads> $a = 10 PS F:\Downloads> $a = "Luis" PS F:\Downloads> $a Luis

No excerto anterior, a variável $a começa por armazenar um inteiro para, em seguida, ser utilizada para guardar uma string. O tipo de dados de uma variável é sempre representado por um tipo .NET e inferido a partir do valor que ela guarda. Se quisermos, podemos alterar este comportamento predefinido através de um atributo que qualifica o tipo de dados que pode ser armazenado numa variável. No © FCA


5

ADMINISTRAÇÃO REMOTA

Até agora, vimos apenas como utilizar a PowerShell para resolver alguns problemas e efetuar algumas tarefas administrativas locais. Nos tempos que correm, esta aproximação não é suficiente, já que a maior parte dos problemas dos utilizadores tem de ser resolvida remotamente, sem qualquer acesso físico à máquina. Felizmente para nós, a PowerShell suporta o uso de remoting, permitindo assim executar comandos sobre máquinas remotas. A configuração e utilização de remoting é o tópico que vai ocupar este capítulo.

5.1

ASPETOS BÁSICOS

Com o lançamento das últimas versões, a Microsoft tem apostado cada vez mais na administração remota. Como seria de esperar, a PowerShell também tem recolhido benefícios desta aposta. O PowerShell remoting permite executar comandos numa máquina remota, e a sua utilização de remoting depende do uso do serviço WinRM (Windows Remote Management). Este serviço encarrega-se de manter as sessões de trabalho entre os computadores. Para conseguirmos ligar-nos a uma máquina remota, esta deve ter, pelo menos, um listener configurado previamente para aceitar comandos PowerShell. As ligações entre máquinas são feitas através do procolo WS-MAN (Web Services for Management), que, por sua vez, efetua a comunicação através de HTTP (ou HTTPS, se estivermos interessados em utilizar uma ligação segura). Depois de estabelecida a ligação, os comandos enviados a partir do PC de origem são processados na máquina remota de destino, sendo os resultados devolvidos à máquina que iniciou a ligação. A execução remota de comandos em uma ou mais máquinas pode ser feita através de uma sessão persistente ou de uma sessão temporária. Em alternativa, podemos estabelecer uma sessão interativa para uma máquina remota. Se optarmos pelo uso de uma sessão interativa, então o primeiro passo a dar será estabelecer uma ligação à máquina remota através do cmdlet Enter-PSSession. Quando essa ligação é estabelecida com sucesso, a consola passa a refletir o aspeto da máquina remota e todos os comandos introduzidos pelo utilizador são executados remotamente, como se tivessem sido introduzidos diretamente nesse computador. Quando terminamos

© FCA


146

POWERSHELL

a execução de comandos na máquina remota, então devemos encerrar essa sessão explicitamente usando o cmdlet Exit-PSSession. Se necessitarmos de invocar apenas um ou mais comandos em uma ou mais máquinas remotas, poderemos utilizar o cmdlet Invoke-Command. Quando este não recebe uma sessão através de parâmetros, encarrega-se de estabelecer uma sessão remota temporária durante a execução dos comandos especificados, sessão essa que é automaticamente encerrada com o término da operação. Finalmente, podemos também estabelecer uma sessão remota persistente. O estabelecimento de uma ligação deste tipo é feito através do cmdlet New-PSSession. À semelhança do que acontece com o cmdlet anterior, este pode ser utilizado para estabelecer uma sessão remota partilhada por várias máquinas. Depois de criada uma sessão persistente, podemos estabelecer uma sessão interativa sobre esta sessão persistente. Para isso, temos apenas de passar o valor devolvido pelo cmdlet New-PSSession ao cmdlet Enter-PSSession. Em vez disso, podemos usar esse valor devolvido pelo cmdlet New-PSSession em conjunto com o cmdlet Invoke-Command para invocar um bloco de script em uma ou mais máquinas. Na secção 5.3.4 apresentaremos alguns exemplos que ilustram estas estratégias. Nesta altura, convém ter em atenção que existem alguns cmdlets (especialmente os que foram introduzidos antes da versão 2.0 da PowerShell) que não utilizam o protocolo WS-MAN no estabelecimento de sessões remotas. Tipicamente, muitos destes cmdlets disponibilizam um parâmetro designado por ComputerName, que permite a especificação da máquina onde esse cmdlet deve ser executado. O cmdlet Get-Service é um deles. Nestes casos, a comunicação remota é estabelecida sobre DCOM (Distributed Component Object Model).

5.2

CONFIGURAÇÃO

Para que uma sessão remota seja estabelecida com sucesso, a máquina destino tem de ser configurada previamente e essa ligação efetuada por um utilizador com as permissões adequadas. A ativação de remoting num PC é feita através do cmdlet Enable-PSRemoting. Este deve ser executado localmente na máquina remota por um utilizador com privilégios de administração. Para além de ativar e modificar o comportamento de startup do serviço WinRM, o cmdlet encarrega-se de criar um listener capaz de aceitar comandos provenientes de outras máquinas e de configurar a firewall para que pedidos WS-MAN efetuados sobre HTTP não sejam bloqueados. Em seguida, temos de modificar as permissões das configurações de sessão PowerShell no PC para permitir o acesso remoto de um utilizador ou grupo de utilizadores. Esta operação é feita através do cmdlet Set-PSSessionConfiguration, que permite espe© FCA


ADMINISTRAÇÃO REMOTA

147

cificar os utilizadores que têm permissão de Execução sobre uma configuração de sessão (como veremos em seguida, o cmdlet Enable-PSRemoting encarrega-se de efetuar este passo para garantir que os administradores da máquina possuem as permissões adequadas sobre os ficheiros de configuração de sessão). Configurações de sessão PowerShell Todas as sessões PowerShell remotas estabelecidas necessitam das chamadas configurações de sessão. Estas configurações são utilizadas para proteger os recursos existentes numa máquina ao criarem ambientes personalizados que são usados pelos utilizados que se ligam a essa máquina. Por exemplo, podemos utilizar as configurações de sessão para indicar quais os cmdlets ou as funções que um utilizador pode executar numa determinada sessão. Por predefinição, existem duas configurações de sessão, designadas por Microsoft.PowerShell e Microsoft.PowerShell.Workflow. Para além destas duas configurações, pode haver uma terceira, designada por Microsoft.PowerShell32, que apenas existe em máquinas que usam sistemas operativos de 64 bits (esta configuração de sessão é utilizada para sessões executadas em modo de 32 bits). As configurações de sessão existentes numa máquina podem ser listadas através do cmdlet Get-PSSessionConfiguration. Por omissão, a configuração de sessão Microsoft.PowerShell é usada por todas as sessões estabelecidas. Se pretendermos utilizar outra configuração, será necessário recorrer ao parâmetro ConfigurationName quando utilizamos os cmdlets New-PSSession, Enter-PSSession ou Invoke-Command. Por predefinição, apenas membros do grupo local de Administradores possuem privilégios que permitem utilizar as configurações de sessão anteriores. Se pretendermos alterar este comportamento, deveremos recorrer ao cmdlet Set-PSSessionConfiguration (a alteração do security descriptor das configurações de sessão pode ser efetuada através do parâmetro ShowSecurityDescriptorUI). Já que introduzimos o tópico de configuração de sessão, importa ainda referir que as configurações de sessão permitem influenciar o modo de linguagem usado. O modo de linguagem determina as funcionalidades que podem ser utilizadas numa sessão PowerShell. Por predefinição, a PowerShell suporta os modos FullLanguage, ContrainedLanguage, RestrictedLanguage e NoLanguage. Por exemplo, se uma sessão estiver em modo RestrictedLanguage, então não será possível executar blocos de script. O leitor interessado em obter mais detalhes sobre esta funcionalidade pode consultar a documentação disponível em https://technet.microsoft.com/library/dn433292.aspx. Esta breve introdução às configurações de sessão não ficaria completa sem referir que, a partir da versão 3.0, tornou-se possível recorrer a ficheiros de configuração de sessões para definir as configurações de uma sessão PowerShell. Esta aproximação simplifica a personalização das configurações de sessão, já que deixamos de escrever código para influenciar as propriedades de uma configuração de sessão. O utilizador interessado pode obter mais detalhes sobre as configurações de sessão e sobre os ficheiros de configuração de sessão em https://technet.microsoft.com/library/hh847817.aspx e https://technet.microsoft.com/library/hh847838.aspx.

Finalmente, temos ainda de garantir que o utilizador que inicia a sessão remota possui as permissões adequadas nessa máquina. Estas permissões dependem do tipo de comando que queremos executar. A forma mais fácil de garantir este pressuposto consis© FCA


148

POWERSHELL

te em adicionar a conta do utilizador ao grupo de administradores locais da máquina que deve receber ligações remotas. Apesar de esta não ser a aproximação ideal para o mundo real, é a que vamos seguir neste livro, de forma a podermos concentrar-nos apenas nos aspetos relacionados com o estabelecimento de sessões remotas. Configuração da firewall Alguns cmdlets mais antigos (por exemplo, Get-Service ou Get-WMIObject) recorrem ao DCOM em vez do WinRM durante uma execução remota. A utilização destes cmdlets obriga a configurações adicionais da firewall que podem ser efetuadas através do cmdlet Set-NetFirewallRule. O excerto seguinte mostra como ativar todas as regras inativas relacionadas com o uso de WMI: PS F:\> Get-NetFirewallRule | where DisplayName -Like '*Windows Management Instrumentation*' | Set-NetFirewallRule -Enabled True -Verbose VERBOSE: Set-NetFirewallRule DisplayName: WMI-RPCSS-In-TCP-NoScope VERBOSE: Set-NetFirewallRule DisplayName: WMI-WINMGMT-Out-TCP-NoScope VERBOSE: Set-NetFirewallRule DisplayName: WMI-WINMGMT-In-TCP-NoScope VERBOSE: Set-NetFirewallRule DisplayName: WMI-RPCSS-In-TCP VERBOSE: Set-NetFirewallRule DisplayName: WMI-ASYNC-In-TCP-NoScope VERBOSE: Set-NetFirewallRule DisplayName: WMI-WINMGMT-In-TCP VERBOSE: Set-NetFirewallRule DisplayName: WMI-WINMGMT-Out-TCP VERBOSE: Set-NetFirewallRule DisplayName: WMI-ASYNC-In-TCP

5.2.1

CMDLET ENABLE-PSREMOTING

Como referimos, o primeiro passo a dar para ativar o suporte de remoting passa pela execução do cmdlet Enable-PSRemoting na máquina que deve passar a receber comandos remotos. A Figura 5.1 ilustra o resultado obtido quando executamos esse cmdlet a partir de uma consola em modo de Administração.

© FCA


Conheça as nossas publicações em www.fca.pt

C# 6 – Programação com Produtividade (eBook) Luís Abreu e Paulo Morgado ISBN: 978-972-722-835-5 Formato: epub

Ebook com as novidades introduzidas pela versão 6 do C#, que vieram simplificar e aumentar a produtividade em .Net. Inicialização de propriedades e índices, strings, exceções, “Roslyn”. Com exemplos.

LINQ com C# Luís Abreu e Paulo Morgado ISBN: 978-972-722-547-7 216 páginas  17 X 24 cm

O LINQ (Language Integrated Query) revolucionou por completo a forma como tratamos (e interagimos com) os dados nas nossas aplicações. Esta nova linguagem (desenvolvida pela Microsoft) contribui…

TypeScript – O JavaScript Moderno para Criação de Aplicações Luís Abreu ISBN: 978-972-722-864-5 168 páginas  17 X 24 cm

Aumente a produtividade e reduza erros de código com a nova linguagem da Web. Principais conceitos, funcionalidades, ferramentas e aplicação de tarefas do JavaScript. Com projetos e exemplos práticos.

Node.js – Construção de Aplicações Web Luís Abreu ISBN edição impressa: 978-972-722-860-7 216 páginas  17 X 24 cm ISBN edição eBook: 978-972-722-836-2

Disponível também em formato eBook

Livro sobre as principais caraterísticas e funcionalidades do Node.js: construção de aplicações Web; módulos; Express; motores de templates; Bower e Grunt; SPA; bases de dados; sockets; entre outros.


Editora líder em INFORMÁTICA Acompanhe a FCA de perto e conheça as Nossas Coleções

Novo!

Novo!

Nova coleção sobre os grandes temas da Ciência dos Dados: Data Science, Big Data, Analytics e Internet das Coisas. Com uma abordagem muito prática e demonstração de exemplos e projetos, estes são os livros essenciais aos profissionais do futuro!

Dedicada a todos os envolvidos com as Tecnologias de Informação, é indispensável para todos aqueles que pretendam desenvolver as suas aplicações de acordo com as tecnologias mais recentes

Coleção sobre um tema bastante importante no panorama atual, onde apresentamos livros dedicados aos utilizadores, aos profissionais e aos estudantes

A coleção da FCA para os estudantes do Ensino Superior. Aborda as principais temáticas de um curso TI. Útil também para profissionais que pretendam atualizar os seus conhecimentos

Dedicada não só aos profissionais de Sistemas de Informação, mas também a Gestores e outros profissionais de Informática, assim como aos estudantes de licenciaturas e mestrados

Destinada aos alunos dos diversos Cursos de Educação e Formação para Jovens (3.º Ciclo do EB e cursos profissionais do ES) e para Adultos, de acordo com os respetivos programas. Útil também para autoformação

Esta coleção, única em Portugal, é dedicada à Gestão de Projetos segundo as melhores e mais atuais práticas

Dedicada aos amantes do digital, coloca à disposição de amadores e profissionais conhecimentos anteriormente apenas acessíveis através de obras estrangeiras

Concebida para iniciação e prática, esta coleção permite-lhe aprender a matéria através de exercícios práticos, resolvidos passo a passo

Esta coleção mostra-lhe, com uma liguagem simples e acessível, como tirar partido das últimas versões dos programas para utilizadores e sistemas operativos mais utilizados, através de exemplos e exercícios resolvidos para praticar

Nova coleção que serve os referenciais dos cursos de educação e formação profissional da indústria metalomecânica. Com livros profusamente ilustrados, escrita simples e exercícios para autoaprendizagem

Os livros desta coleção, simples e objetivos, profusamente ilustrados com exemplos passo a passo, levam-no a dominar com rapidez e facilidade as matérias apresentadas


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.