 鲜花( 3)  鸡蛋( 1)
|
方法一:NetSH大法~3 j$ G6 d8 v" Y) c
采用下列Netsh脚本$ H! R5 A) l5 d- C6 r9 v
interface
( A; F9 J y3 Hset interface name="Local Area Connection" admin=ENABLED/DISABLED
) c" p1 ~/ G3 N3 G# o' q2 t
" s# a/ g& g$ ^* i方法二:Powershell+WMI大法 u* E; e2 ]5 S7 k
$adapter = get-wmiobject Win32_NetworkAdapter -filter "NetConnectionID='Local Area Connection'"
" @6 A0 n& e: w( v0 u4 ]3 U: M! i$adapter.Disable()
+ _4 W; T" x9 s: w7 Y
$ I! Q. @3 e$ H, V8 U9 F: N4 l0 Y同理可以VBS+WMI大法~6 Z, L O. V5 P7 P
这个就不说了~没啥意义了~
% b1 |6 j1 H% r3 {! Z
! B# K0 D/ p$ v- l' D其中有一个非常重要的问题就是权限控制问题!1 e; z5 ~, |1 e( x6 g5 e4 E3 f
Windows 7的UAC很严格,不能像WinXP里那样随意修改系统设置而不通知用户。
) m8 M2 K4 L( K3 t( h, D/ q8 p6 g$ n如果不赋予脚本执行环境以Administrative权限的话,脚本会执行失败,WMI返回码为05,Netsh报错:“An interface with this name is not registered with the router.”8 |3 F2 a, q/ V; R* S' u% M \% D
因此在启动Netsh或者Powershell时需要指定 Administrative权限,可通过右键菜单Run as Administrator实现。: J" t8 d% h- z% P% s) o( F
然后会出现UAC,Allow即可~4 p% ^& q9 k/ N% G5 ?
由于UAC权限具有继承性,即一个具有Administrative权限的Process启动的Process默认是具有Administrative权限的(除非显式的禁止继承)~/ D- S9 H3 e7 l4 H5 k( O4 j/ Z
因此可以通过启动一个有Administrative的Cmd或者Powershell的Shell来让脚本具有Administrative权限~
/ U' A5 O/ k: F# e) \5 P/ l; p$ D0 ^0 M7 ~9 h+ Q8 m7 L& K P6 O7 Z5 N# o
该方法仅在Win7下测试通过~WinXP下不通过~
# f; T$ F$ ]( ~% T7 ^. C8 o7 L$ a似乎原因是由于WinXP的WMI Class不支持Enable和Disable方法造成的~具体解决方案未知。 |
|