2008-09-17 22 views

Trả lời

9

Sử dụng netsh interface bộ Cách sử dụng giao diện [name =] IfName [[quản trị viên =] ENABLED | TÀN TẬT [kết nối =] LIÊN QUAN | ngắt kết nối [newname =] NewName]

Cố gắng bao gồm tất cả mọi thứ bên trong khung ngoài: giao diện netsh interface set name = "thename" admin = disabled connect = ngắt kết nối newname = "thename"

Xem thêm trang này MS KB: http://support.microsoft.com/kb/262265/ Bạn có thể làm theo một trong hai đề nghị của họ. Để tắt bộ điều hợp, bạn sẽ cần phải xác định cách để tham khảo thiết bị phần cứng. Nếu không có nhiều bộ điều hợp có cùng tên trên máy tính, bạn có thể tắt Mô tả cho giao diện (hoặc PCI ID hoạt động tốt). Sau đó, sử dụng devcon (disable | enable). Devcon là một giao diện điều khiển tiện ích cho Trình quản lý Thiết bị.

+1

Bao gồm tất cả các tùy chọn tạo ra thông báo sau: "Giao diện chuyên dụng không thể kết nối, ngắt kết nối, bật hoặc tắt." Nó sẽ hoạt động, nhưng không. Chưa thử nghiệm trên một máy tính khác; Tôi sẽ. Cảm ơn. – tzot

+0

Tôi nhận được cùng một vấn đề lạ. Netsh dường như không hoạt động như dự định, trên hệ thống Windows XP này, tôi đang cố thực hiện điều này. –

+1

bạn đã tìm thấy giải pháp cho lỗi 'giao diện chuyên dụng không thể ...'? – scape

0

Công cụ devcon có thể điều khiển NIC chứ không phải trực tiếp giao diện. Đây là phiên bản dòng lệnh của applet Device Manager.

devcon disable (id or portion of name) 
devcon enable (id or portion of name) 
+0

Dường như nó không hoạt động với giao diện mạng. "devcon bật wifi", trong đó wifi là tên của giao diện không dây trả lời: "Không có thiết bị nào được bật". – tzot

0

đây là VB.Net

Dim objectQuery As New ObjectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId IS NOT NULL") 
     Dim searcher As New ManagementObjectSearcher(scope, objectQuery) 
     Dim os As ManagementObject 
     Dim moColl As ManagementObjectCollection = searcher.Get() 
     Dim _list As String = "" 
     For Each os In moColl 
      Console.WriteLine(os("NetConnectionId")) 
     Next os 

Điều đó sẽ nhận được tất cả các giao diện trên máy tính của bạn. Sau đó, bạn có thể làm netsh để vô hiệu hóa nó.

netsh interface set interface DISABLED

+0

Tôi đã thử trong quá khứ tất cả các kết hợp mà netsh đề xuất: 'Giao diện thiết lập giao diện netsh [name =] wifi [admin =] DISABLED' với tham số" Tham số không chính xác "hoặc" Một hoặc nhiều thông số cần thiết không chính xác " tin nhắn. – tzot

+0

wmi không hoạt động trên xp –

1

Tôi dường như không tìm thấy bất kỳ API cơ bản nào để kiểm soát giao diện trên MSDN, ngoài API của RAS, nhưng tôi không nghĩ chúng áp dụng cho kết nối không quay số. Như bạn tự đề xuất, netsh có thể là một tùy chọn, được cho là nó cũng có giao diện lập trình: http://msdn.microsoft.com/en-us/library/ms708353(VS.85).aspx

Nếu bạn muốn là Python tinh khiết, bạn có thể mở một bộ ống để giao tiếp với quá trình netsh.

0

Bạn có thể cần phải sử dụng WMI. Điều này có thể phục vụ như là một điểm khởi đầu tốt đẹp: http://msdn.microsoft.com/en-us/library/aa394595.aspx

+0

Đó là một điểm khởi đầu tốt thực sự. Tôi đang giải quyết nó. Cảm ơn. – tzot

6

Cho đến nay tôi đã tìm thấy các giải pháp Python sau:

>>> import wmi; c=wmi.WMI() 
>>> o=c.query("select * from Win32_NetworkAdapter where NetConnectionID='wifi'")[0] 
>>> o.EnableDevice(1) 
(-2147217407,) 

được dịch, AFAIU, đến chung WMI lỗi 0x80041001. Có thể là quyền.

+0

Rõ ràng tôi đang chạy này như là một thành viên của nhóm quản trị viên địa phương, và máy tính không phải là một phần của một miền. – tzot

+0

Traceback (cuộc gọi gần đây nhất): Tệp "C: \ Python33 \ lib \ site-packages \ wmi.py", dòng 416, trong __call__ kết quả = self.ole_object.ExecMethod_ (self.method.Name) Tệp ">", dòng 3, trong ExecMethod_ pywintypes.com_error: 'Ngoại lệ xảy ra' (-2147352567,, (0, 'SWbemObjectEx', 'phương pháp Parameter không hợp lệ (s)', Không, 0, -2147217361), None) –

+0

@HaifengLi: cảm ơn, nhưng tôi không làm Windows nữa, và cả đoạn mã trên không được thử nghiệm trên Python 3 (lưu ý ngày trả lời). – tzot

2

Tôi đã tìm thấy tập lệnh .VBS này trên internet. Nó có lợi thế mát mẻ của thực sự làm việc trên máy mà tôi không thể có được NETSH để làm việc cho mục đích này.

Const ssfCONTROLS = 3 

sConnectionName = "Local Area Connection" 

sEnableVerb = "En&able" 
sDisableVerb = "Disa&ble" 

set shellApp = createobject("shell.application") 
set oControlPanel = shellApp.Namespace(ssfCONTROLS) 

set oNetConnections = nothing 
for each folderitem in oControlPanel.items 
    if folderitem.name = "Network Connections" then 
     set oNetConnections = folderitem.getfolder: exit for 
end if 
next 

if oNetConnections is nothing then 
msgbox "Couldn't find 'Network Connections' folder" 
wscript.quit 
end if 

set oLanConnection = nothing 
for each folderitem in oNetConnections.items 
if lcase(folderitem.name) = lcase(sConnectionName) then 
set oLanConnection = folderitem: exit for 
end if 
next 

if oLanConnection is nothing then 
msgbox "Couldn't find '" & sConnectionName & "' item" 
wscript.quit 
end if 

bEnabled = true 
set oEnableVerb = nothing 
set oDisableVerb = nothing 
s = "Verbs: " & vbcrlf 
for each verb in oLanConnection.verbs 
s = s & vbcrlf & verb.name 
if verb.name = sEnableVerb then 
set oEnableVerb = verb 
bEnabled = false 
end if 
if verb.name = sDisableVerb then 
set oDisableVerb = verb 
end if 
next 

'debugging displays left just in case... 
' 
'msgbox s ': wscript.quit 
'msgbox "Enabled: " & bEnabled ': wscript.quit 

'not sure why, but invokeverb always seemed to work 
'for enable but not disable. 
' 
'saving a reference to the appropriate verb object 
'and calling the DoIt method always seems to work. 
' 
if bEnabled then 
' oLanConnection.invokeverb sDisableVerb 
oDisableVerb.DoIt 
else 
' oLanConnection.invokeverb sEnableVerb 
oEnableVerb.DoIt 
end if 

'adjust the sleep duration below as needed... 
' 
'if you let the oLanConnection go out of scope 
'and be destroyed too soon, the action of the verb 
'may not take... 
' 
wscript.sleep 1000 
Các vấn đề liên quan