 鲜花( 3)  鸡蛋( 1)
|
方法一:NetSH大法~
2 W4 t$ t) ?2 `8 H1 B+ D- h$ a- G5 c& q采用下列Netsh脚本8 y9 l9 g/ {, b0 N. N" l
interface& c9 _! S% b, K
set interface name="Local Area Connection" admin=ENABLED/DISABLED
( ]5 L: A* j+ t1 L; B2 o# ?7 P$ D" W8 I' N2 A6 M3 y+ }
方法二:Powershell+WMI大法
7 _; ~% m7 x: f$adapter = get-wmiobject Win32_NetworkAdapter -filter "NetConnectionID='Local Area Connection'"
, G3 [3 b) K; d) _ W$adapter.Disable()
# Z- E0 I( e$ T; f0 ?$ s& Z) J( C- n4 ~' b3 E0 i
同理可以VBS+WMI大法~
& K! O4 I6 {! P: L5 w这个就不说了~没啥意义了~
- \: s9 I& @5 \
/ y6 G n+ _1 C+ L其中有一个非常重要的问题就是权限控制问题!5 W% Z2 x) e+ d. A0 j' G
Windows 7的UAC很严格,不能像WinXP里那样随意修改系统设置而不通知用户。
Z7 C& a6 x' `' U. A如果不赋予脚本执行环境以Administrative权限的话,脚本会执行失败,WMI返回码为05,Netsh报错:“An interface with this name is not registered with the router.”/ K* O" Y6 P% A9 e' W0 ?
因此在启动Netsh或者Powershell时需要指定 Administrative权限,可通过右键菜单Run as Administrator实现。4 w; `2 ?8 r$ a/ F
然后会出现UAC,Allow即可~" s: x. J, a' M- ^7 I
由于UAC权限具有继承性,即一个具有Administrative权限的Process启动的Process默认是具有Administrative权限的(除非显式的禁止继承)~
) @; c$ y- t& E: r# J2 k- I因此可以通过启动一个有Administrative的Cmd或者Powershell的Shell来让脚本具有Administrative权限~% l, R, `6 ?8 w- m+ v$ K# Q
- H) i9 T" }" Q% i$ f, X该方法仅在Win7下测试通过~WinXP下不通过~) B8 N: o' t, w
似乎原因是由于WinXP的WMI Class不支持Enable和Disable方法造成的~具体解决方案未知。 |
|