Automação: Instalação do VMware Tools via PowerCLI

Resolvi postar sobre scripting/automation já que é um dos principais requisitos (skills) da nova cultura IT, comumente chamada por DevOps, que está a ser adoptada pela comunidade IT, e várias empresas mundialmente, inclusive, a Cisco já possui no seu programa de certificações, um curso para desenvolvedores chamado DevNet que valida habilidades (skills) de profissionais DevOps, Automation etc. Seguindo esta tendência decidi aprender (já que em poucas palavras IT: evolui ou morre) e ganhar skills e assim começar a automatizar o máximo possível as minhas tarefas. Quanto a role DevOps, uns dizem que DevOps Enginner não é nada mais que System Enginner 2.0, até acho que faz sentido e concordo, mas essa é uma conversa para outra ocasião.

Indo directo ao tema, escolhi esse post porque no meu datacenter tenho alertas reportando que existem VMs que não tem o VMware Tools instalado, e já podem imaginar que o processo normal de instalação é mesmo manual (1 by 1 VM/VM) diferente do processo de update do VMware Tools que podemos efecturar via vCenter usando o VUM que automatiza esse processo ou mesmo via script PowerCLI.

Portanto, para eliminar esse processo manual, reduzir o tempo de execução desta tarefa e também reduzir a possibilidade de erro humano no processo resolvi automatizar este processo desenvolvendo o script:

import-Module VMware.PowerCLI

#Variaveis globais
$vc= (Get-VICredentialStoreItem).Host
$cred= Get-Credential
$conn_vc= Connect-VIServer -Server $vc -Credential $cred
$SnapDate= (Get-Date).ToString("dd/MM/yyyy") -replace '/',''
$ToolsNotInstalled=@{}

#Seleciona VMs com guest/OS windows
$VMs=Get-VM * | ? {$_.GuestId -like '*windows*'} | Select Name,PowerState,@{ Name="ToolStatus"; Expression={$_.ExtensionData.Guest.ToolsVersionStatus}},@{N="OSName";Expression= {$_.Guest.OSFullName}}

#Verifica se a VM tem o tools instalado e se esta ligada, copia para hashtable
foreach($vm in $VMs){ 
    if($vm.ToolStatus -like "guestToolsNotInstalled" -and $vm.PowerState -like "PoweredOn" )
    {

        $ToolsNotInstalled["Nome"]+=@($vm.Name)
        $ToolsNotInstalled["Estado"]+=@($vm.PowerState)

    }
}

#Cria snapshot na VM
foreach($vm in $ToolsNotInstalled.Nome)
                    {
                        
                      write-host "Efectuando Snapshot na" $vm
                      new-snapshot -vm $vm -name $vm -description "Snap before VMtools Instalation date $SnapDate" -Memory:$false -RunAsync
                        
                        
                    }

#Instala VMware Tools
foreach($vm in $ToolsNotInstalled.Nome)
                    {
                         
                      Get-VM $vm | Mount-Tools 
                      write-host "instalando VM tools na"$vm -ForegroundColor Yellow -BackgroundColor Black
                      Invoke-Command -computername $vm -ScriptBlock {Start-Process D:\setup64.exe -ArgumentList '/S /v',"/qn REBOOT=R" -Wait } -Credential $cred
                      
                    }

#Apaga snapshots criados
Get-Snapshot $ToolsNotInstalled.Nome | Remove-Snapshot -RunAsync -Confirm:$false



Nota:

  • O script no momento apenas funciona para VMs com sistema operativo Windows.
  • A VM tem que estar no dominio.
  • Assume que o drive D: (CD/DVD Drive) é usado como ponto de montagem do VMware tools ISO Image.

Bom, por hoje é tudo, espero que apartir de hoje automação seja o vosso melhor amigo, Automation is a Mindset.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s