Created
March 12, 2014 15:00
-
-
Save zorab47/9508715 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Adaptation of the VMware adapters fix script by Oisin Grehan: | |
# http://www.nivot.org/post/2008/09/05/VMWareVMNETAdaptersTriggeringPublicProfileForWindowsFirewall.aspx | |
# see http://msdn2.microsoft.com/en-us/library/bb201634.aspx | |
# | |
# *NdisDeviceType | |
# | |
# The type of the device. The default value is zero, which indicates a standard | |
# networking device that connects to a network. | |
# | |
# Set *NdisDeviceType to NDIS_DEVICE_TYPE_ENDPOINT (1) if this device is an | |
# endpoint device and is not a true network interface that connects to a network. | |
# For example, you must specify NDIS_DEVICE_TYPE_ENDPOINT for devices such as | |
# smart phones that use a networking infrastructure to communicate to the local | |
# computer system but do not provide connectivity to an external network. | |
# | |
# Usage: run in an elevated shell (vista/longhorn) or as adminstrator (xp/2003). | |
# | |
# PS> .\fix-vbox-adapters.ps1 | |
# boilerplate elevation check | |
$identity = [Security.Principal.WindowsIdentity]::GetCurrent() | |
$principal = new-object Security.Principal.WindowsPrincipal $identity | |
$elevated = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) | |
if (-not $elevated) { | |
$error = "Sorry, you need to run this script" | |
if ([System.Environment]::OSVersion.Version.Major -gt 5) { | |
$error += " in an elevated shell." | |
} else { | |
$error += " as Administrator." | |
} | |
throw $error | |
} | |
$entryName = '*NdisDeviceType' | |
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", ` | |
"Set the '$entryName' entry for this adapter to 1." | |
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", ` | |
"Skip this adapter." | |
$reset = $false | |
# adapters key | |
pushd 'hklm:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}' | |
# ignore and continue on error | |
dir -ea 0 | % { | |
$key = $_.pspath | |
$desc = gp $key -name driverdesc -ea 0 | |
if ($desc.driverdesc -eq "VirtualBox Host-Only Ethernet Adapter") { | |
write-host "`nFound adapter: $($desc.driverdesc)" -ForegroundColor White | |
$state = "Registry entry '$entryName' " | |
$entry = gp $key -name $entryName -ea 0 | |
if ($entry -eq $null) { | |
$value = $null | |
$state = $state + "does not exist for this adapter" | |
} else { | |
$value = $entry.$entryName | |
if ($value -eq 1) { | |
$state = $state + "already exists and is set to '1'." | |
} else { | |
$state = $state + "exists, but is set to '$value', not'1'" | |
} | |
} | |
if ($value -eq 1) { | |
write-host $state -ForegroundColor White | |
} else { | |
if ($host.ui.PromptForChoice( | |
$state, | |
"`nDo you want to fix it?`n`n", | |
[Management.Automation.Host.ChoiceDescription[]]@($yes, $no), | |
1) -eq 0) { | |
$reset = $true | |
write-host "" | |
if ($entry -eq $null) { | |
write-host -nonew "Creating $entryName entry ... " | |
$entry = new-itemproperty $key -name $entryName -propertytype dword -value 1 | |
if ($entry.$entryName -eq 1) { write-host " success." } else { write-host " failed." } | |
} else { | |
write-host -nonew "Modifying $entryName entry ... " | |
$entry = set-itemproperty $key -name $entryName -value 1 | |
if ($entry.$entryName -eq 1) { write-host " success." } else { write-host " failed." } | |
} | |
} | |
} | |
write-host "" | |
} | |
} | |
popd | |
if ($reset) { | |
# if there were registry changes, disable/enable network adapters | |
gwmi win32_networkadapter | ? {$_.name -like "VirtualBox Host-Only Ethernet Adapter*" } | % { | |
# disable | |
write-host -nonew "Disabling $($_.name) ... " | |
$result = $_.Disable() | |
if ($result.ReturnValue -eq -0) { write-host " success." } else { write-host " failed." } | |
# enable | |
write-host -nonew "Enabling $($_.name) ... " | |
$result = $_.Enable() | |
if ($result.ReturnValue -eq -0) { write-host " success." } else { write-host " failed." } | |
} | |
} else { | |
write-host "No registry changes were made." -ForegroundColor White | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment