quinta-feira, 15 de setembro de 2011

VirtualBox e "Rede não identificada" no Windows Vista/7

Se instalarmos o VirtualBox com suporte a rede privada entre o hospedeiro e as máquinas virtuais (que vem por padrão), essa rede virtual fica como "não identificada" e, no Windows Vista, desabilita os compartilhamentos de rede. No 7, os compartilhamentos não são desabilitados, contudo.

O procedimento para resolver consiste em ir ao registro, descobrir a chave relativa ao adaptador virtual do VirtualBox ("VirtualBox Host-Only Ethernet Adapter") dentro de HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\ e criar nela uma DWORD com o nome *NdisDeviceType e o valor 1. Visto que a cada vez que o VirtualBox é atualizado ele reinstala o adaptador virtual, temos que fazer tudo de novo...

Para facilitar, achei um pequeno script em PowerShell que faz tudo sozinho.

$devices = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\*"
$adapters = Get-ItemProperty $devices | Where-Object  {$_.Class -eq "Net"} | Foreach-Object { $_.PSPath }
Get-ChildItem $adapters -erroraction silentlycontinue | Foreach-Object { get-itemproperty -path $_.PSPath } | Where-Object {$_.ComponentId -eq "sun_vboxnetadp"} | Foreach-Object { Set-ItemProperty -path $_.PSPath -name "*NdisDeviceType" -Type DWORD -Value 1}
Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*VirtualBox Host*"} | Foreach-Object {$_.Disable(); $_.Enable()}

Copie para o bloco de notas e salve o arquivo com a extensão ps1
O nome você escolhe, usei vbox_lan_fix

Por segurança, o Windows 7 (e provavelmente o Vista também, não conferi) vem com execução de scripts desativada. Então, antes de rodar o script, é preciso permitir a execução.

Abra o PowerShell como administrador e execute

Set-ExecutionPolicy Unrestricted

Depois, navegue até a pasta onde o script está salvo e execute-o

.\vbox_lan_fix.ps1

Pronto. O script inclusive reinicia a interface virtual e já fica tudo funcionando.

Volte então para a política de segurança padrão, que não permite a execução de scripts com

Set-ExecutionPolicy Default

Para conferir a política atual use

Get-ExecutionPolicy
("Default" configura o valor em "Restricted")

Assim, a cada atualização do VirtualBox, a tarefa fica menos tediosa.

2 comentários:

  1. Funcionou certinho aqui, o único problema é que a executionPolicy não quer retorna para default. Pode me dizer o que pode estar acontecendo?

    Muito Obrigado, marcos.

    ResponderExcluir
  2. Não tenho ideia, Luiz. Aqui quando executo "Set-ExecutionPolicy Default" volta para "Restricted". Tente "Set-ExecutionPolicy Restricted"...

    De nada :-)

    ResponderExcluir