 鲜花( 3)  鸡蛋( 1)
|
方法一:NetSH大法~# D0 _. `7 |4 y( r$ U
采用下列Netsh脚本- Q5 w b& ?+ F E
interface
8 W8 }( D2 A0 V1 hset interface name="Local Area Connection" admin=ENABLED/DISABLED7 Q8 h# [/ l3 T8 I, g4 q
+ D2 f+ _5 n: p( i6 n方法二:Powershell+WMI大法
( i# s. j5 W% k7 r. k$adapter = get-wmiobject Win32_NetworkAdapter -filter "NetConnectionID='Local Area Connection'"2 \, i u" z5 |2 M- u) x! _: m
$adapter.Disable()
+ L2 } I0 T$ U3 C' X- f) ^8 o& J* J, ?4 c& y% T/ c B* @
同理可以VBS+WMI大法~9 V% B& V+ D* H) l0 k. T
这个就不说了~没啥意义了~+ u* q( X: x5 c. |7 r; K
7 b( x$ C4 R; }0 S9 E其中有一个非常重要的问题就是权限控制问题!( k1 q5 `& V, Y% f* A
Windows 7的UAC很严格,不能像WinXP里那样随意修改系统设置而不通知用户。; F& \ U+ T( g% q+ M* o- ]
如果不赋予脚本执行环境以Administrative权限的话,脚本会执行失败,WMI返回码为05,Netsh报错:“An interface with this name is not registered with the router.”
" V. _5 E8 Y1 p# |) c' a* }因此在启动Netsh或者Powershell时需要指定 Administrative权限,可通过右键菜单Run as Administrator实现。
) x6 p, u8 c+ S& k& w然后会出现UAC,Allow即可~
! d8 _, ]! S$ R4 U/ a( t由于UAC权限具有继承性,即一个具有Administrative权限的Process启动的Process默认是具有Administrative权限的(除非显式的禁止继承)~- p5 m4 J, T5 f. l4 a9 o. ^+ b: G
因此可以通过启动一个有Administrative的Cmd或者Powershell的Shell来让脚本具有Administrative权限~
. Z4 f# C: A* s C) O( P1 Z0 E# p1 F
; g9 b: _5 z# o5 N+ I该方法仅在Win7下测试通过~WinXP下不通过~$ A# n6 I& Y7 N2 D
似乎原因是由于WinXP的WMI Class不支持Enable和Disable方法造成的~具体解决方案未知。 |
|