Como (re) ativar um dispositivo não conectado?

0

Eu posso desativar facilmente um dispositivo de rede por meio de algo como:

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

ou em versões mais recentes do Windows:

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

Se um dispositivo desativado (por exemplo, um adaptador USB para Ethernet) for desconectado fisicamente, ele será novamente identificado como desativado quando for conectado novamente.

Posso reativar usando código semelhante, mas SOMENTE se o dispositivo estiver fisicamente conectado.

  • O WMI é capaz de retornar o adaptador, mas o método "enable ()" fornece um erro "Parâmetro (s) de método inválido".
  • O Get-NetAdapter não retorna nada se o dispositivo não estiver presente.

Como posso ativá-lo quando não está fisicamente presente para que funcione quando ele é reconectado? IOW, onde está o status "desativado" de um dispositivo armazenado e pode ser programaticamente invertido?

Obrigado!

    
por Teknowledgist 02.11.2017 / 22:03

2 respostas

0

A razão pela qual ele precisa ser conectado é o fato de que o '$target%'

muda com base no que mais está conectado. Não é um valor estático. Como sugerido nos comentários, o melhor método seria ter um ouvinte e reativar com base nas alterações com o valor '$target%' apropriado.

Na medida em que isso é armazenado, seria no Registro:

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

é um local, onde o identificador no final é específico para cada dispositivo. No entanto:

Ativar um adaptador de rede procurando uma única chave para disparar no registro não funciona. Fazendo uma comparação de arquivo em arquivos .reg exportados antes e depois que uma conexão de rede é ativada, você pode ver que muitas alterações no registro foram implementadas. Assim, o ouvinte é a melhor abordagem

    
por 02.11.2017 / 23:22
0

Você pode ouvir o WMI InstanceCreationEvent e ativar o dispositivo na criação. Eu não tenho um dispositivo semelhante, então não posso testar isso.

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
}

Remova com Unregister-Event -SourceIdentifier KingstonPlugin .

    
por 03.11.2017 / 14:45