Hyper-V Scripts | Gerenciamento de VM-RAM e VM-DiSK

INTRO

Quem me conhece sabe que por anos, ofereço suporte em produtos Microsoft, principalmente em soluções de infraestrutura on-premises.

Mas como todo bom sysadmin, o mundo linux e do código sempre é muito bem-vindo.  E pra quem já trabalhou com o s.o. do pinguim (ubuntu, debian, redhat e semelhantes) sabe que o mesmo tem ótimos comandos para gestão de recursos.  Um deles é o df (para discos) e outro é o free (para memoria ram).

Longe de mim, professar como dev - porém, na era das IAs, uma ideia na cabeça e muita vontade de testar e aprimorar um código, consegui elaborar 3 códigos bem simples e muito eficientes escritos em PowerShell e que vão ser uma "mão na roda" na hora de rapidamente obter informações e inclusive apresentar em um relatório simples.

Os scripts devem ser usados no modo admin de execução do powershell. No meu caso, após devidamente testado, eu copie os scripts para a pasta \windows\system32, para fácil execução.

ATENÇÃO: Recomendo testar os scripts e utiliza-los por sua conta e risco (sem garantias)!


FREE-MEM

Esse script, como o nome já diz, irá apresentar a capacidade de memoria do host físico naquele instante.

Segue o script:

# #################################################
# free-mem.ps1
# #################################################
#
# Consulta memoria RAM // PC Windows
# Código: PowerShell
#
# Escrito em: 04/07/2025
# Coded: Weverton Lima <weverton@getinfo.net.br>
# Source: AI - ChatGPT3
#
# ################################################
#
# Função para converter bytes para GBytes com vírgula
function Format-GBytes {
    param ([UInt64]$Bytes)
    return ("{0:N1} GBytes" -f ($Bytes / 1GB)).Replace('.', ',')
}
# Obtém informações da Memoria do host
$comp = Get-CimInstance -ClassName Win32_OperatingSystem
# Total física instalada
$memTotal = $comp.TotalVisibleMemorySize * 1KB
# Memoria livre
$memLivre = $comp.FreePhysicalMemory * 1KB
# Memoria em uso (consumida)
$memUsada = $memTotal - $memLivre
# Exibe as informações com formatação
[PSCustomObject]@{
    MemoriaTotal   = Format-GBytes $memTotal
    MemoriaUsada   = Format-GBytes $memUsada
    MemoriaLivre   = Format-GBytes $memLivre
}

# ################################################

A aplicação:




 



FREE-MEM-VM

Esse script realiza o procedimento similar ao anterior só que exibindo das VMs. Observe que neste caso ele vai apresentar os termos memória designada e memória demandada.
Segue o script:

# ################################################################
# free-mem-vm.ps1
# ################################################################
#
Consulta memoria RAM VMs // Hyper-V
# Código: PowerShell
#
# Escrito em: 04/07/2025
# Coded: Weverton Lima <weverton@getinfo.net.br>
# Source: AI - ChatGPT3
#
# #################################################################
#
# Função para converter bytes para GBytes com vírgula e unidade
function Format-GBytes {
    param ([UInt64]$Bytes)
    return ("{0:N1} GBytes" -f ($Bytes / 1GB)).Replace('.', ',')
}

# Obter VMs em operação
$vmAtivas = Get-VM | Where-Object { $_.State -eq 'Running' }

# Criar lista personalizada com os dados formatados
$vmAtivas | ForEach-Object {
    [PSCustomObject]@{
        Name            = $_.Name
        MemoryAssigned = Format-GBytes $_.MemoryAssigned
        MemoryDemand   = Format-GBytes $_.MemoryDemand
    }
}

############################################################

A aplicação:








FREE-HD-VM

Esse script realiza o procedimento de verificar os virtuais disks - trazendo informações sobre o tipo, tamanho alocado e tamanho consumido, etc.
Segue o script:

# ################################################################
# free-hd-vm.ps1
# ################################################################
#
Consulta storage VMs // Hyper-V
# Código: PowerShell
#
# Escrito em: 04/07/2025
# Coded: Weverton Lima <weverton@getinfo.net.br>
# Source: AI - ChatGPT3
#
# #################################################################
#
# Função para converter bytes em GBytes com vírgula
function Format-GBytes {
    param ([UInt64]$Bytes)
    return ("{0:N1} GBytes" -f ($Bytes / 1GB)).Replace('.', ',')
}

# Coletar resultados
$resultados = @()

# Obter todas as VMs
$vms = Get-VM

foreach ($vm in $vms) {
    $vmHardDisks = Get-VMHardDiskDrive -VMName $vm.Name
    foreach ($disk in $vmHardDisks) {
        try {
            $vhd = Get-VHD -Path $disk.Path
            $resultado = [PSCustomObject]@{
                VMName         = $vm.Name
                Filename       = $vhd.Path
                Formato        = $vhd.VhdFormat
                Expansivel     = if ($vhd.IsDynamic) { "Sim" } else { "Não" }
                TamanhoAtual   = Format-GBytes $vhd.FileSize
                TamanhoMaximo  = Format-GBytes $vhd.Size
            }
            $resultados += $resultado
        } catch {
            Write-Warning "Falha ao acessar o disco da VM '$($vm.Name)'. Erro: $_"
        }
    }
}

# Exibir os resultados
$resultados

#####################################################################################

Observe que o primeiro comando foi um get-vm para listar todas as VMs em execução. 
Em seguida foi aplicado o comando free-hd-vm.ps1 para listar as características dos Virtuais Disks em cada VM.








































E por hoje é só... em breve teremos mais.
Espero que este post tenha sido útil para você.


* * * 

Comentários

Postagens mais visitadas deste blog

Zabbix // Instalando Zabbix Server v.7.2 (Ubuntu 24.04)

Como identificar quantos e quais os usuários logados em um Active Directory (Script PowerShell)