
Este codigo em Powershell habilita automaticamente em todas suas VMs a opção.
<#
.SYNOPSIS
Habilita Nested VT-x/AMD-V em todas as VMs do VirtualBox (sem validação).
.DESCRIPTION
- Localiza VBoxManage
- Lista todas as VMs
- Para cada VM:
* Se estiver rodando, envia poweroff (best-effort)
* Executa: VBoxManage modifyvm "<VM>" --nested-hw-virt on
* (Opcional) Ajusta paravirtualização para kvm (útil para Linux/Ubuntu)
.NOTES
Execute como Administrador. Feito para Windows host.
#>
# ---------- Utilidades de saída ----------
function Info($msg) { Write-Host "[INFO] $msg" -ForegroundColor Cyan }
function Ok($msg) { Write-Host "[OK] $msg" -ForegroundColor Green }
function Warn($msg) { Write-Host "[AVISO] $msg" -ForegroundColor Yellow }
function Err($msg) { Write-Host "[ERRO] $msg" -ForegroundColor Red }
# ---------- Encontrar VBoxManage ----------
$VBoxManage = "${env:PROGRAMFILES}\Oracle\VirtualBox\VBoxManage.exe"
if (-not (Test-Path $VBoxManage)) { $VBoxManage = "VBoxManage.exe" }
if (-not (Get-Command $VBoxManage -ErrorAction SilentlyContinue)) {
Err "VBoxManage não encontrado. Instale o VirtualBox ou adicione-o ao PATH."
exit 1
}
# ---------- Obter VMs ----------
$allVmsRaw = & $VBoxManage list vms 2>$null
if (-not $allVmsRaw) {
Warn "Nenhuma VM encontrada."
exit 0
}
# Converte linhas do tipo: "VM Name" {UUID} -> objeto com Name e Uuid
$allVms = $allVmsRaw | ForEach-Object {
if ($_ -match '^\s*\"(.+?)\"\s+\{([0-9a-fA-F-]+)\}\s*$') {
[PSCustomObject]@{ Name = $Matches[1]; Uuid = $Matches[2] }
}
} | Where-Object { $_ -ne $null }
Info "Total de VMs: $($allVms.Count)"
# Lista de VMs rodando
$runningRaw = & $VBoxManage list runningvms 2>$null
$runningNames = @()
if ($runningRaw) {
$runningNames = ($runningRaw | ForEach-Object {
if ($_ -match '^\s*\"(.+?)\"\s+\{') { $Matches[1] }
})
}
# ---------- Processar cada VM ----------
foreach ($vm in $allVms) {
Write-Host "`n=== VM: $($vm.Name) ===" -ForegroundColor White
# Se estiver em execução, tenta poweroff (best-effort)
if ($runningNames -contains $vm.Name) {
Info "VM em execução. Enviando poweroff…"
try {
& $VBoxManage controlvm "$($vm.Name)" poweroff | Out-Null
Start-Sleep -Seconds 3
} catch {
Warn "Não foi possível desligar automaticamente. Tentarei aplicar mesmo assim."
}
}
# Habilitar nested virtualization (sem checagem)
try {
Info "Habilitando nested VT-x/AMD-V…"
& $VBoxManage modifyvm "$($vm.Name)" --nested-hw-virt on | Out-Null
Ok "Nested habilitado."
} catch {
Err "Falha ao aplicar nested em '$($vm.Name)'. Detalhe: $($_.Exception.Message)"
continue
}
# (Opcional) Ajuste de paravirtualização – útil p/ guests Linux/Ubuntu
try {
& $VBoxManage modifyvm "$($vm.Name)" --paravirtprovider kvm | Out-Null
Ok "Paravirtualização ajustada para 'kvm'."
} catch {
Warn "Não foi possível ajustar paravirtualização (ignorado)."
}
}
Write-Host "`nConcluído." -ForegroundColor Green
Write-Host "Inicie suas VMs e, no Linux convidado, você pode conferir com:"
Write-Host " egrep -c '(vmx|svm)' /proc/cpuinfo # >0 = OK"
Write-Host " lscpu | findstr /i virtualization"