如何(重新)启用未连接的设备?

如何(重新)启用未连接的设备?

我可以通过以下方式轻松禁用网络设备:

$wmi = gwmi win32_networkadapter -filter "name LIKE '$target%'"
$wmi.disable()

或者在较新的 Windows 版本中:

get-netadapter -InterfaceDescription "$target*" | Disable-NetAdapter -Confirm:$false

如果物理拔出了已禁用的设备(例如 USB 转以太网适配器),则重新插入时它将再次被识别为已禁用。

我可以使用类似的代码重新启用,但前提是设备物理连接。

  • WMI 能够返回适配器,但是“enable()”方法给出“无效方法参数”错误。
  • 如果设备不存在,Get-NetAdapter 则不返回任何内容。

当它实际上不存在时,我该如何启用它,以便它在重新连接时可以工作?换句话说,设备的“禁用”状态存储在哪里,可以通过编程来切换吗?

谢谢!

答案1

需要连接的原因是'$target%'

根据连接的其他内容而变化。它不是静态值。正如评论中所建议的,最好的方法是有一个侦听器,并根据更改使用适当的值重新启用'$target%'

至于它的存储位置,它将位于注册表中:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

是一个位置,末尾的标识符是每个设备特有的。但是:

通过在注册表中查找单个触发键来启用网络适配器不起作用。通过在启用网络连接之前和之后对导出的 .reg 文件进行文件比较,您可以看到注册表中实施了许多更改。因此,侦听器是最好的方法

答案2

您可能能够监听 WMI InstanceCreationEvent 并在创建时启用该设备。我没有类似的设备,所以我无法测试这一点。

function Register-USB2ETH {

    $query = "SELECT * FROM __InstanceCreationEvent " +
         "WITHIN 5 " +
         "WHERE TargetInstance ISA 'Win32_NetworkAdapter' " +
         "AND TargetInstance.Name = $target "

    Register-WmiEvent -Query $query -SourceIdentifier USB2ETH -Action { (Get-WmiObject Win32_NetworkAdapter -filter "Name=$target").Enable() } | Out-Null
}

用 删除Unregister-Event -SourceIdentifier KingstonPlugin

相关内容