使用 Powershell 删除不存在的网络适配器

Hiv*_*ive 1 registry powershell wmi nic device-manager

我正在尝试通过 PowerShell 自动化许多耗时的任务,我必须执行这些任务来制作新的 VM 模板,其中之一是从 VM 中删除所有 NIC 并清理不存在的设备的设备管理器。

从 VM 中删除 NIC 后,我尝试使用以下代码片段来清理设备管理器,它们执行相同的操作。

wmic nic where "(servicename is null)" delete
Run Code Online (Sandbox Code Playgroud)

 

gwmi win32_networkadapter | ?{$_.ServiceName -eq $null} | rwmi
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都会收到错误“提供程序无法进行尝试的操作”。查看 WMI-Activity 的事件日志似乎没有帮助:ResultCode = 0x80041024; 可能的原因 = 未知。

有没有人能够做类似的事情来删除不存在的设备或能够找到上述命令的问题?

编辑:我尝试使用 DevCon 删除设备,但它似乎只适用于现有设备。我现在正在梳理注册表,看看是否有一个特定的键或一组键,如果删除会从设备管理器中删除 NIC。

小智 5

这个问题困扰了我一段时间,我想出了更多的手动方法,但它有效,所以希望这会对其他人有所帮助:

1) 首先确保您要清除的设备列表是正确的:

Get-PnpDevice -class net | ? Status -eq Unknown | Select FriendlyName,InstanceId
Run Code Online (Sandbox Code Playgroud)

2) 如果您对准备使用 Kaibosh 的 Get-NetAdapter 列表感到满意,请运行以下命令:

$Devs = Get-PnpDevice -class net | ? Status -eq Unknown | Select FriendlyName,InstanceId

ForEach ($Dev in $Devs) {
    Write-Host "Removing $($Dev.FriendlyName)" -ForegroundColor Cyan
    $RemoveKey = "HKLM:\SYSTEM\CurrentControlSet\Enum\$($Dev.InstanceId)"
    Get-Item $RemoveKey | Select-Object -ExpandProperty Property | %{ Remove-ItemProperty -Path $RemoveKey -Name $_ -Verbose }
}
Write-Host "Done.  Please restart!" -ForegroundColor Green
Run Code Online (Sandbox Code Playgroud)

注意:步骤 1 中的适配器列表必须仅包含要清除的适配器。如果您有额外的内容,请相应地调整过滤器(?Status -eq XXX,例如:? FriendlyName -like "Broadcom*")!