Skip to content

Instantly share code, notes, and snippets.

@kamilion
Forked from gschizas/FixVirtualNetworkAdapters.ps1
Last active June 13, 2018 23:32
Show Gist options
  • Save kamilion/38104e20644348257dc614b51e25d71f to your computer and use it in GitHub Desktop.
Save kamilion/38104e20644348257dc614b51e25d71f to your computer and use it in GitHub Desktop.
This powershell script will look for most virtualization and loopback adapters that may be marked "Unidentified" in MS Network and Sharing Center, and makes them disappear.
# 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-virt-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
}
function confirm {
$host.ui.PromptForChoice("Continue", "Process adapter?",
[Management.Automation.Host.ChoiceDescription[]]@("&No", "&Yes"), 1) -eq $true
}
# adapters key
pushd 'hklm:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}'
# ignore and continue on error
dir -ea 0 | % {
$node = $_.pspath
$desc = gp $node -name driverdesc
# Write-Host $desc
if ($desc -like "*vmware*" -or $desc -like "*VirtualBox*" -or $desc -like "*TAP-Win32*" -or $desc -like "*Loopback*" -or $desc -like "*Hyper-V*") {
Write-Host ("Found adapter: {0} " -f $desc.driverdesc)
if (confirm) {
new-itemproperty $node -name '*NdisDeviceType' -propertytype dword -value 1
}
}
}
popd
# disable/enable network adapters
gwmi win32_networkadapter | ? {$_.name -like "*vmware*" -or $_.name -like "*VirtualBox*" -or $_.name -like "*TAP-Win32*" -or $_.name -like "*Loopback*"} | % {
# 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." }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment