O PowerCLI da VMware está se tornando a interface onipresente para administradores de virtualização de hipervisor em hardware suportado pelo ESXi. Aprender a gerenciar a VMware via PowerShell e PowerCLI é uma adição significativa ao seu conjunto de ferramentas. Neste tutorial do PowerCLI, você vai aprender a fazer exatamente isso.
Neste tutorial, você aprenderá:
- os conceitos básicos de conexão com a infraestrutura VMware com o PowerCLI
- familiarizar-se com cmdlets para trabalhar com objetos VMware
- capacitar-se com o conhecimento para explorar
- gerenciar a VMware ainda mais via PowerCLI
Vamos lá!
O que você precisa ter e saber
Antes de prosseguir muito neste tutorial do PowerCLI, é sempre importante garantir que ambos 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 com o PowerShell será útil.
- Você possui um host VMware ESXi ou um appliance vCenter para conexão e teste.
- Você está trabalhando em uma estação de trabalho Windows (ou Mac/Linux).
- Você já possui 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.
Coletar 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 propósito, para reunir informações detalhadas chamado Get-VMHost
.
Enquanto você está conectado ao seu servidor vCenter ou host ESXi, execute o seguinte cmdlet.

Já que estou conectado a um Appliance do vCenter Server que está gerenciando dois hosts ESXi separados, são fornecidas algumas informações básicas sobre os hosts sendo gerenciados. O Get-VMHost
permite que você revise as capacidades de hardware dos seus hosts de virtualização. No entanto, por padrão, o Get-VMHost
não retorna todas as informações que pode.
Se você encaminhar o cmdlet Get-VMHost
para Format-List
, você obterá a saída do 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:
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ção 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.
Inspecionando VMs com o PowerCLI
Vamos agora mergulhar em outro tópico neste tutorial do PowerCLI, revisando os hosts virtuais e verificando 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 sobre VMs.
O resultado deste cmdlet será algo parecido com o seguinte:

O resultado acima fornece uma lista completa de status das VMs atualmente em execução em um host específico. Se você optar por 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 solucionando um problema e precisar saber o número de máquinas virtuais em um determinado host ou precisar usar o VMware PowerCLI para coletar informações do host ESXi, você pode usar esses cmdlets daqui para frente. A funcionalidade de relatório 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, existem uma variedade 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:
Dependendo do número de redes virtuais e switches virtuais que você possui, sua lista resultante pode ser bastante extensa. No meu caso, como você pode ver abaixo, tenho um único DSwitch, que é um Distributed Virtual Switch.
Em uma implementação do vSphere Enterprise onde existem muitos hosts ESXi em um cluster, os DSwitches simplificam o deployment de switches virtuais e grupos de portas em uma infinidade 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!

Localizando VMs Conectadas a uma Rede Virtual com PowerCLI
Ao tentar limitar 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.

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.
Neste comando de uma linha, estamos obtendo uma lista de todas as máquinas virtuais que existem neste appliance do 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.

Com essa 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 terá capacidade 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 do 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 disco rígido em VMs ou obter as versões do sistema operacional para todos os seus servidores, entre outras.
Essas tarefas são trabalhosas em grande escala. O PowerCLI pode simplificar isso com alguns cmdlets importantes para adicionar ao seu arsenal, então vamos abordá-los neste tutorial do PowerCLI.
Em algum momento, você pode ter sido perguntado: “Quantos servidores Ubuntu temos em nosso cluster VMware?”. Talvez você tenha passado tempo demais clicando ao redor no vCenter procurando por uma resposta. O PowerCLI pode simplificar esse processo ao examinar os objetos VM no vCenter e aplicar alguma magia 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 obtidas deste modo.
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, em seguida, recuperando algumas das propriedades do objeto usando o cmdlet Get-View
do PowerCLI.
Ao executar isso em meu ambiente, obtenho o resultado abaixo. 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 do convidado, e o Sistema Operacional em Execução
que representa o sistema operacional real.

Com as VMs \texttt{replicant} e \texttt{Scriptrunner} desligadas no cluster, você não poderá ver o valor de \texttt{Running OS} para elas. O sistema operacional é obtido pelo serviço VMware Tools. Se não estiver disponível, o PowerCLI não poderá recuperar as informações do sistema operacional.
Criando Relatórios CSV com PowerCLI
O VMware Tools é um serviço no sistema convidado para VMs Windows e Linux que fornece informações adicionais ao hipervisor e capacidades administrativas. Na maioria das vezes, isso fornecerá um desligamento limpo, informações do sistema operacional e visualização da console com 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.
Após executar o código acima, você deve conseguir abrir o arquivo CSV com o Excel para revisar o relatório.

Inspeção de Discos Rígidos Virtuais com PowerCLI
O comando \texttt{Get-Harddisk} é outro comando útil para conhecer. O cmdlet \texttt{Get-HardDisk} permite inspecionar informações sobre discos rígidos virtuais conectados a VMs.
Por exemplo, para consultar informações sobre o disco rígido virtual conectado à VM \texttt{exchange1}, você poderia executar o seguinte:

Algumas dessas informações podem ser redundantes, como a capacidade em KB vs. GB. Mas há valor em conhecer o \texttt{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 da VM 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 virtuais. Para verificar essas propriedades para uma única VM, você pode usar o cmdlet Get-NetworkAdpter
.
Enquanto você já havia pesquisado anteriormente nesta porta por todas as VMs localizadas na mesma rede, desta vez você deseja ver apenas os adaptadores conectados a uma VM específica.

Isso é útil ao solucionar problemas em VMs que possuem vários adaptadores de rede conectados. Você pode determinar rapidamente, com um olhar, se esses adaptadores estão conectados às redes apropriadas.
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; sem necessidade de conectividade de rede. 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.
Os resultados são como se você tivesse executado os comandos diretamente do console da VM. Invoke-VMScript
então retransmite toda a saída do comando que foi executado na VM.

Embora este seja um exemplo básico, você pode torná-lo tão complicado quanto desejar. Este cmdlet PowerCLI permite especificar tipos de lote, PowerShell ou Bash dentro do parâmetro ScriptText
.
Você pode se tornar mais avançado também. 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.
O valor do parâmetro ScriptText
precisa ser uma string. É por isso que a variável $script
tem as aspas simples externas 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. Esse parâmetro é especialmente útil se você quiser executar o script como uma conta diferente.
Seu script em ação deve resultar em uma saída semelhante à abaixo.

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 Disco Virtual VMware
como o nome amigável da unidade.
Avançando com Get-View
Você pode ter visto alguns dos cmdlets básicos retornarem 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 era 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 para a VM para fornecer a saída bonita e simples de Get-VM
. Mas há muito sob o capô que só é acessível usando o cmdlet Get-View
.
Provavelmente você verá muitos scripts usando este cmdlet. Seria prudente você dedicar um tempo para se acostumar 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 Filtro
deste cmdlet requerem o uso de um hashtable do PowerShell e não valores de string individuais. Esteja ciente ao construir seus próprios scripts únicos!
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 de objeto.

Se você usar o mesmo script acima e enviar a saída para uma variável, você 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.

Talvez você queira selecionar uma única propriedade. Se sim, você poderia executar o seguinte para reduzir um valor individual.
Existem muitas opções 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 explora detalhadamente este poderoso cmdlet!
VMware Code Capture – Aprenda com seus cliques
Se você deseja aproveitar o PowerCLI, mas prefere não criar código digitando, Code Capture no vCenter está aqui para você. O Code Capture é uma nova ferramenta para desenvolvedores 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 GUI. Em seguida, transforma todas essas ações e fornece scripts do PowerCLI.
Por padrão, o Code Capture não está ativado. Para ativá-lo, abra o appliance do seu vCenter e vá para Menu -> Developer Center como mostrado abaixo.

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

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

O botão vermelho record aparecerá ao lado da seção do usuário conectado ao vCenter, para que você possa gravar a qualquer momento.
Para demonstrar a Captura de Código, passe pelo assistente de criação de Nova Máquina Virtual.
- Clique no botão Gravar para iniciar a gravação. Isso fará com que o botão vermelho Gravar comece a pulsar.
- Clique com o botão direito do mouse no seu host VMware e Crie uma Nova Máquina Virtual. Execute o assistente resultante criando uma nova máquina virtual com todos os valores padrão.
- Assim 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 denotada nos comentários começando com CreateVM_Task
. Aqui é onde o código começa a criar uma VM.
Abaixo está uma parte da saída de CreateVM_Task do processo do assistente de Nova Máquina Virtual na GUI via Captura de Código:

Esta saída pode ser um pouco avassaladora, mas ela te expõe diretamente ao número de opções de configuração disponíveis para suas máquinas virtuais. Dependendo das suas próprias necessidades, agora você está capacitado para 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 construir código para alterações de rede, pequenas modificações em VMs ou alterações na configuração do host. Ao ser capaz de revisar a saída do PowerCLI das ações na GUI, você pode encurtar o caminho na sua jornada para a infraestrutura implantada como código.
Resumo do Tutorial PowerCLI
Neste artigo, você abordou muitos tópicos. Bom trabalho! Espero que você tenha percebido o poder que o PowerCLI traz para a gestão da infraestrutura VMware.
Existem muitos cmdlets no PowerCLI para uma ampla gama de bases de produtos, mas aqui só cobrimos alguns. Continue acompanhando este blog para mais artigos sobre essa ferramenta incrível!