Làm cách nào để (bật lại) một thiết bị chưa được kết nối?


0

Tôi có thể dễ dàng vô hiệu hóa một thiết bị mạng thông qua một cái gì đó như:

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

hoặc trong các phiên bản Windows mới hơn:

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

Nếu một thiết bị bị vô hiệu hóa (ví dụ: bộ chuyển đổi USB sang Ethernet) được rút ra về mặt vật lý, nó sẽ lại xác định là bị vô hiệu hóa khi được cắm lại.

Tôi có thể bật lại bằng mã tương tự, nhưng CHỈ nếu thiết bị được kết nối vật lý.

  • WMI có thể trả về bộ điều hợp, nhưng phương thức "enable ()" đưa ra lỗi "Tham số phương thức không hợp lệ".
  • Get-NetAdOG không trả về gì nếu thiết bị không có mặt.

Làm cách nào tôi có thể kích hoạt nó khi nó không có mặt vật lý để nó hoạt động khi được kết nối lại? IOW, trạng thái "bị vô hiệu hóa" của thiết bị được lưu trữ ở đâu và nó có thể được lật theo chương trình không?

Cảm ơn!


Bạn có thể đăng ký một trình nghe chờ thiết bị được phát hiện (cắm vào), sau đó kích hoạt thiết bị được kích hoạt.
root

Câu trả lời:


0

Lý do tại sao nó cần được kết nối là thực tế là '$target%'

thay đổi dựa trên những gì khác được kết nối. Nó không phải là một giá trị tĩnh. Như đã đề xuất trong các bình luận, phương pháp tốt nhất sẽ là có người nghe và kích hoạt lại dựa trên những thay đổi với '$target%'giá trị phù hợp .

Theo như nơi này được lưu trữ, nó sẽ ở trong Registry:

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

là một vị trí, trong đó số nhận dạng ở cuối là cụ thể cho từng thiết bị. Tuy nhiên:

Kích hoạt bộ điều hợp mạng bằng cách tìm một khóa duy nhất để kích hoạt trong sổ đăng ký không hoạt động. Bằng cách thực hiện so sánh tệp trên các tệp .reg đã xuất trước và sau khi kết nối mạng được bật, bạn có thể thấy rằng nhiều thay đổi trong sổ đăng ký đã được triển khai. Do đó, người nghe là cách tiếp cận tốt nhất


Tôi không nghĩ vấn đề là $targetbộ lọc. Các truy vấn WMI không có bất kỳ bộ lọc nào cũng không trả về thiết bị bị ngắt kết nối.
Teknowledgist

Nếu không có một vị trí (hoặc hai) trong sổ đăng ký, thì tôi đoán tôi phải chấp nhận đề xuất của người nghe. Tôi không vui mừng vì điều đó bởi vì người nghe có thể ngồi đó mãi mãi (nếu thiết bị không bao giờ trở lại). Theo "người nghe", bạn có nghĩa là một tác vụ theo lịch trình với trình kích hoạt sự kiện, hoặc có một cơ chế nào khác mà tôi không quen thuộc?
Teknowledgist

0

Bạn có thể nghe WMI InstanceCreationEvent và kích hoạt thiết bị khi tạo. Tôi không có một thiết bị tương tự vì vậy tôi không thể kiểm tra điều này.

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
}

Hủy bỏ với Unregister-Event -SourceIdentifier KingstonPlugin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.