Tutorial PowerCLI: Gerenciar Infraestrutura VMware

PowerCLI da VMWare está se tornando a interface ubíqua para os administradores de virtualização do hipervisor de hardware ESXi suportado. Aprender como gerenciar a VMware via PowerShell e PowerCLI é uma adição forte ao seu conjunto de ferramentas. Neste tutorial do PowerCLI, você vai aprender exatamente como fazer isso.

Neste tutorial, você vai aprender:

  • os conceitos básicos de conexão com a infraestrutura VMware com PowerCLI
  • se familiarizar com cmdlets para trabalhar com objetos VMware
  • se capacitar com o conhecimento para explorar
  • gerenciar a VMware ainda mais via PowerCLI

Vamos lá!

O que você precisa ter e saber

Antes de avançar muito neste tutorial do PowerCLI, é sempre importante garantir que estejamos na mesma página. Para este artigo, vou presumir que:

  • Você tem experiência básica com o PowerShell.  Você não precisa ser um especialista em PowerShell, de forma alguma, mas qualquer familiaridade que você tenha com o PowerShell será útil.
  • Você tem um host VMware ESXi ou um appliance vCenter para conectar e testar
  • Você está trabalhando em uma estação de trabalho Windows (ou Mac / Linux)
  • Você já tem o PowerCLI instalado e está conectado. Se não, confira este artigo de instalação do PowerCLI.

I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.

Reunir informações sobre hosts ESXi com PowerCLI

Antes de mergulhar na camada virtual do nosso ambiente vSphere, é uma boa ideia revisar a camada de hardware físico. O VMware PowerCLI fornece um cmdlet diretamente para esse fim, para coletar informações detalhadas chamado Get-VMHost.

Enquanto estiver conectado ao seu servidor vCenter ou host ESXi, execute o seguinte cmdlet.

PS51> Get-VMHost
Get-VMHost

Já que estou conectado a um Appliance do Servidor vCenter que está gerenciando dois hosts ESXi separados, recebo algumas informações básicas sobre os hosts sendo gerenciados. O Get-VMHost permite que você revise as capacidades de hardware de seus hosts de virtualização. Mas, por padrão, Get-VMHost não retorna todas as informações que pode.

Se você encadear o cmdlet Get-VMHost para Format-List, você obterá saída no console para todas as informações sobre os hosts fornecidos.

Get-VMHost | Format-List

Alternativamente, você pode ser mais seletivo e selecionar apenas propriedades individuais no objeto VMHost com o qual está trabalhando, como:

PS51> Get-VMHost | format-list -Property State,LicenseKey,Version

Aproveitar essa saída mais detalhada fornecerá uma visão ainda maior do hardware subjacente que executa suas cargas de trabalho virtualizadas. Algumas das informações, em particular, seriam:

  • Informações de validação da licença
  • Totais de CPU/Memória
  • Modelo do fornecedor de hardware
  • Nome do host DNS

Após a revisão, isso pode ser compilado em um arquivo CSV, talvez usando o Export-CSV cmdlet.

Inspeção de VMs com PowerCLI

Vamos agora mergulhar em outro tópico neste tutorial PowerCLI revisando hosts virtuais é revisar quais máquinas virtuais estão atualmente presentes em um determinado host ESXi.

O comando Get-VM é um comando útil que você pode usar para revisar informações de VM.

PS51> Get-VMHost -Name <Host FQDN> | Get-VM

O resultado deste cmdlet será algo parecido com abaixo:

PS51> Get-VMHost -Name | Get-VM

O resultado acima fornece uma lista completa de status das VMs em execução atualmente em um host específico. Se você escolher não especificar um host individual, como fiz acima, receberá uma tabela de informações para cada host subsequente e as VMs em cada um.

Se você estiver resolvendo um problema e precisar saber o número de máquinas virtuais em um determinado host ou tiver a necessidade de usar o VMware PowerCLI para reunir informações do host ESXi, você pode usar esses cmdlets daqui para frente. A funcionalidade de relatório que você tem ao seu alcance está começando a se expandir!

Inspeção de Switches Virtuais com PowerCLI

Para aqueles de nós encarregados de configurar ou administrar as redes virtuais de um cluster vCenter, há uma gama completa de cmdlets de rede para qualquer caso de uso. Se você deseja ver os switches virtuais configurados em seu ambiente vSphere, usará o seguinte:

PS51> Get-VirtualSwitch

Dependendo do número de redes virtuais e switches virtuais que você possui, sua lista resultante pode ser bastante grande. No meu caso, como você vê abaixo, tenho um único DSwitch que é um Switch Virtual Distribuído.

Numa implementação do vSphere em uma empresa, onde existem muitos hosts ESXi em um cluster, os DSwitches simplificam a implantação de switches virtuais e grupos de portas em uma multidão de hosts com a mesma configuração. Isso economiza o trabalho manual de criar configurações de rede idênticas em cada host manualmente e é uma ótima maneira de dimensionar seu cluster!

Get-VirtualSwitch

Encontrar VMs Conectadas a uma Rede Virtual com PowerCLI

Ao tentar reduzir o escopo de um problema, você pode se perguntar quais VMs estão conectadas a quais redes. Para descobrir isso, você pode usar o comando Get-VirtualPortGroup. Vamos aprender sobre este cmdlet neste tutorial do PowerCLI.

A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

Get-VirtualPortGroup

Para encontrar todas as VMs dentro desse grupo de portas (DPortGroup no meu caso), você pode executar o script abaixo. Certifique-se de substituir o valor DPortGroup pelo nome do seu Grupo de Portas Virtual.

PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}

Neste comando de uma linha, estamos obtendo uma lista de todas as máquinas virtuais que existem neste dispositivo vCenter e, em seguida, filtrando com o cmdlet Where-Object para obter apenas aquelas VMs com um nome de rede que corresponda ao nosso Grupo de Portas.

Getting VMs with only a specific port group

Com esta saída, você poderá definir quais máquinas estão conectadas e configuradas para cada rede.

Quando solicitado a localizar e analisar quais VMs estão conectadas a uma rede específica no VMware, você agora estará capacitado para fornecer uma solução de relatório PowerCLI para esta pergunta.

Obtendo Informações da Versão do Sistema Operacional em suas VMs com PowerCLI

A maior parte do trabalho administrativo dentro da VMware é feita no nível da máquina virtual. É provável que você receba inúmeras solicitações para tarefas como recuperar uma lista de todos os tamanhos de discos rígidos nas VMs ou obter as versões do sistema operacional convidado para todos os seus servidores, entre outras.

Essas tarefas são trabalhosas em grande escala. O PowerCLI é capaz de simplificar isso com alguns cmdlets importantes para adicionar ao seu arsenal, então vamos cobri-los neste tutorial do PowerCLI.

Em algum momento, você pode ter sido questionado: “Quantos servidores Ubuntu temos em nosso cluster VMware?”. Você pode então ter passado muito tempo clicando no vCenter em busca de uma resposta. O PowerCLI pode simplificar esse processo olhando para os objetos VM no vCenter e aplicando um pouco de mágica do PowerShell na saída.

Dê uma olhada no script a seguir que reúne informações da VM. Este trecho usa o comando Get-View, sobre o qual falaremos um pouco mais tarde, mas por enquanto, você deve saber que é uma maneira avançada de recuperar propriedades de objetos VMware. Neste caso, estamos reunindo propriedades aninhadas que são mais facilmente recuperadas deste modo.

PS51> Get-VM | 
      Sort-Object -Property Name |
      Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
      Select-Object -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}}

O código acima está recuperando uma lista de máquinas virtuais via cmdlet Get-VM do PowerCLI, ordenando essa lista com o cmdlet Sort-Object do PowerShell, e então recuperando algumas das propriedades do objeto usando o cmdlet Get-View do PowerCLI.

Ao executar isso em meu ambiente, o resultado é o seguinte. Você pode ver o nome da VM no vCenter, o Sistema Operacional Configurado, que é como o hardware virtual da VMware está configurado para interpretar o sistema operacional convidado, e o Sistema Operacional em Execução que representa o SO real.

Finding VMs based on various criteria

Com as VMs replicant e Scriptrunner desligadas no cluster, você não conseguirá visualizar o valor Running OS para elas. O sistema operacional é obtido pelo serviço VMware Tools. Se não estiver disponível, o PowerCLI não pode obter informações sobre o sistema operacional.

Criando Relatórios CSV com PowerCLI

O VMware Tools é um serviço no ambiente do VM, tanto para VMs Windows quanto Linux, que fornece informações adicionais e capacidades administrativas ao hipervisor. Geralmente, isso inclui desligamento limpo, informações sobre o sistema operacional e visualização de console em maior resolução das VMs.

A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV  cmdlet. Export-Csv will create a CSV file with the same information you see in the console.

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
Select -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}} | Export-CSV C:\report.csv -NoTypeInformation 

Após executar o código acima, você deverá conseguir abrir o arquivo CSV com o Excel para revisar o relatório.

CSV file of VM information

Inspeção de Discos Rígidos Virtuais com PowerCLI

O comando Get-Harddisk é outro comando útil para conhecer. O cmdlet Get-HardDisk permite inspecionar informações sobre discos rígidos virtuais conectados às VMs.

Por exemplo, para consultar informações sobre o disco rígido virtual conectado à VM exchange1, você pode executar o seguinte:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
Querying information about the virtual hard disk attached to the exchange1 VMs

Algumas dessas informações podem ser redundantes, como a capacidade em KB vs. GB. Mas há valor em conhecer o StorageFormat (tipos de provisionamento fino/espesso). E saber o nome do arquivo VMDK.

Por exemplo, se você identificar um problema comum e todos os discos rígidos das VMs estiverem no mesmo volume de datastore, esse conhecimento pode acelerar a solução de problemas.

Inspeção de Adaptadores de Rede Virtuais com PowerCLI

Além de revisar as informações do disco rígido de suas máquinas virtuais, você também pode querer verificar os adaptadores de rede virtual. Para verificar essas propriedades para uma única VM, você pode usar o cmdlet Get-NetworkAdpter.

PS51> Get-NetworkAdapter -VM myVM

Enquanto você havia procurado anteriormente nesta porta por todas as VMs que residem na mesma rede, desta vez você só quer ver os adaptadores conectados a uma VM específica.

Get-NetworkAdapter

Isso é útil para solucionar problemas em VMs que têm vários adaptadores de rede conectados. Você pode determinar rapidamente e de relance se esses adaptadores estão conectados às redes corretas.

Executando Scripts do PowerShell em VMs com Invoke-VMScript

Usando o Invoke-VMScript, você também pode executar código PowerShell diretamente dentro da VM; nenhuma conectividade de rede é necessária. Se você já usou PowerShell Direct em um ambiente Hyper-V, esta será uma experiência semelhante.

Em vez de criar uma sessão de Remoting do PowerShell ou usar o cmdlet Invoke-Command pela rede, o cmdlet Invoke-VMScript pode enviar comandos diretamente para a VM sem a necessidade normal de conectividade WinRM ou SSH.

Como exemplo, talvez você queira realizar uma simples listagem de diretórios em uma VM chamada exchange1. Para fazer isso, você passaria dir C:\ como valor para o parâmetro ScriptText, conforme mostrado abaixo.

PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"

Os resultados são como se você tivesse executado os comandos diretamente do console da VM. Invoke-VMScript então relata toda a saída do comando que foi executado na VM.

Invoke-VMScript

Embora este seja um exemplo básico, você pode complicar tanto quanto quiser. Este cmdlet PowerCLI permite que você especifique tipos de lote, PowerShell ou Bash dentro do parâmetro ScriptText.

Você também pode se tornar mais avançado. Abaixo você pode ver como usar Invoke-VMScript para executar código PowerShell usando uma variável $script separada para a entrada do parâmetro ScriptText. Isso nos permite criar uma entrada de script mais personalizada para a VM processar.

PS51> $script = 'Get-Disk'

$guestCredential = Get-Credential

Invoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential  -ScriptType Powershell

O valor do parâmetro ScriptText precisa ser uma string. É por isso que a variável $script tem aspas externas únicas como uma necessidade.

Você também pode ter notado o uso do parâmetro GuestCredential. Este parâmetro é usado para autenticar no sistema operacional da VM. Este parâmetro é especialmente útil se você quiser executar o script como uma conta diferente.

O seu script em ação deve resultar em uma saída semelhante à abaixo.

Running a script on a VM with Invoke-VMScript

O resultado deste script nos fornece as informações do disco da VM. Com base nisso, você deve saber que é uma VM remota por causa do VMware Virtual Disk como o nome amigável da unidade.

Avançando com Get-View

Você pode ter visto que alguns dos cmdlets básicos retornam uma propriedade chamada ExtensionData. Você pode encontrar essa propriedade encadeando muitos cmdlets do PowerCLI para o cmdlet Get-Member do PowerShell. Se você estava se perguntando o que é isso, agora é a sua chance de descobrir.

O próximo passo nesta empreitada é entender o cmdlet Get-View. O VMware PowerCLI utiliza muitas consultas diferentes à VM para fornecer a saída bonita e simples do Get-VM. Mas há muito por baixo do capô que só é acessível usando o cmdlet Get-View.

É provável que você veja muitos scripts usando este cmdlet. Seria bom passar algum tempo se acostumando a ver este cmdlet em ação. Para se familiarizar, use o cmdlet Get-View para obter algumas informações da máquina virtual (exchange1 neste exemplo).

Você pode ver que as opções de Filter deste cmdlet requerem o uso de uma hashtable do PowerShell e não valores individuais de string. Esteja ciente ao construir seus próprios scripts exclusivos!

PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}

O resultado do comando acima é muitas informações de configuração aninhadas e opções de método para tomar ações contra a VM ou obter propriedades do objeto.

Get-View

Se você usar o mesmo script acima e enviar a saída para uma variável, pode inspecionar essas opções aninhadas com a notação de ponto. Aqui você pode ver e recuperar todas essas informações adicionais do sistema operacional convidado, que você pode querer relatar via PowerCLI.

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}
PS51> $VM.Guest
Using Get-View with the Filter Parameter

Talvez você queira selecionar uma única propriedade. Se for o caso, você pode executar o seguinte para reduzir um valor individual.

PS51> $VM.Guest.GuestFullName

Há muitas opções de Get-View para todos os tipos de objetos VMware. Sinta-se à vontade para explorar todas essas opções e revisar este artigo informativo da VMware que aprofunda este poderoso cmdlet!

VMware Code Capture – Aprenda com seus Cliques

Se você deseja aproveitar o PowerCLI, mas prefere não construir código digitando, Code Capture no vCenter está aqui para você. Code Capture é uma nova ferramenta de desenvolvimento que age de forma semelhante ao Active Directory Administrative Center. Vamos abordar o Code Capture neste tutorial do PowerCLI.

Esta ferramenta registra todas as ações que você realiza na interface gráfica do usuário (GUI). Em seguida, ela transforma todas essas ações e fornece scripts PowerCLI.

Por padrão, o Code Capture não está ativado. Para ativá-lo, abra seu dispositivo vCenter e vá para Menu –> Developer Center, conforme mostrado abaixo.

Navigating to the Developer Center menu item in vSphere

Uma vez na guia Developer Center, ative a opção Enable Code Capture.

Enabling code capture

Ao ativar o Code Capture, você verá um botão vermelho Record no cabeçalho do seu vCenter. Depois de habilitado, sempre que desejar que uma ação seja registrada e transformada em saída PowerCLI, você deve gravar a atividade da GUI pressionando o botão gravar.

Code capture enabled indicator

O botão vermelho gravar aparecerá ao lado da seção do usuário conectado no vCenter para que você possa gravar a qualquer momento.

Para demonstrar a Captura de Código, siga o assistente de criação de Nova Máquina Virtual.

  1. Clique no botão Gravar para iniciar a gravação. Isso fará com que o botão vermelho Gravar comece a pulsar.
  2. Clique com o botão direito no seu host VMware e selecione Criar uma Nova Máquina Virtual. Siga o assistente resultante para criar uma nova máquina virtual com todos os valores padrão.
  3. Depois que a máquina virtual for criada, clique no botão de gravação e pare a gravação.

A saída resultante pode ser um pouco mais detalhada do que o esperado. A saída inclui até todas as ações de navegação na GUI antes de criar a VM. Mas você deve ver uma seção indicada nos comentários começando com CriarTarefaVM. Aqui é onde o código começa a criar uma VM.

Abaixo está uma parte da saída de CriarTarefaVM do processo de Assistente de Nova VM na GUI via Captura de Código:

Developer Center generated code

Esta saída pode ser um pouco esmagadora, mas ela expõe diretamente o número de opções de configuração disponíveis para suas máquinas virtuais. Dependendo das suas necessidades, você está agora capacitado a fazer ajustes em seus próprios scripts e personalizá-los conforme desejar.

A utilidade de Captura de Código não se limita apenas à criação de VMs. Ela também pode gerar código para mudanças de rede, pequenas modificações de VM ou mudanças na configuração do host. Ao poder revisar a saída do PowerCLI das ações da GUI, você pode encurtar o caminho na sua jornada para a infraestrutura implantada como código.

Resumo do Tutorial PowerCLI

Neste artigo, você cobriu muitos tópicos. Bom trabalho! Espero que você tenha percebido o poder que o PowerCLI traz para a gestão da infraestrutura VMware.

Há muitos cmdlets no PowerCLI para uma ampla gama de bases de produtos, mas apenas cobrimos alguns aqui. Não deixe de acompanhar este blog para mais artigos sobre essa ferramenta incrível!

Leitura adicional

Source:
https://adamtheautomator.com/powercli-tutorial/