用vbs实现防止计算机使用 LMHosts 文件

问:

您好,脚本专家!如何防止计算机使用 LMHosts 文件?

-- MJ

答:

您好,MJ。您知道,这是个有趣的问题,至少对“脚本专家”来说是这样。不是因为脚本难以编写;这实际上非常简单。困难的是(至少对我们来说)在 Windows GUI 中找到 LMHosts 设置;这是我们需要做的,以便我们可以验证脚本实际上起作用。在一段盲目的查找之后(这对“脚本专家”来说很寻常)我们最终找到了要找的东西:

以防您与“脚本专家”一样一窍不通(对于您来说,但愿不是这样),以下是到达此对话框的操作步骤:














1.

从“控制面板”的“网络连接”中,选取任意的网络连接。

2.

在此连接的“属性”对话框中选择“Internet 协议 (TCP/IP)”,然后单击“属性”

3.

在“Internet 协议 (TCP/IP) 属性”对话框中单击“高级”

4.

在“高级 TCP/IP 设置”对话框中查看“WINS”选项卡。您的设置就在这里。

像我们说的那样,找到 LMHosts 复选框是最难的部分;清除复选框(即防止计算机使用 LMHosts 文件)就简单了:



代码如下:

On Error Resume Next  
Const USE_WINS = False
Const USE_LMHOST_FILE = False

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set objNetworkSettings = objWMIService.Get("Win32_NetworkAdapterConfiguration")
errResult = objNetworkSettings.EnableWINS(USE_WINS, USE_LMHOST_FILE)

Wscript.Echo errResult


我们在脚本开始定义了一对常量(USE_WINS 和 USE_LMHOST_FILE)并将他们设置为 False。我们使用常量 USE_WINS 告诉脚本我们要完全禁用 WINS(Windows Internet 命名服务)的使用。如果不是这样的话(如果您要继续使用 WINS,只是不使用 LMHosts 文件)则将 USE_WINS 的值设置为 True。

同时,常量 USE_LMHOST_FILE 告诉脚本我们是否要使用 LMHosts 文件。我们将此常量设置为 False,因为我们将不使用 LMHosts。如果您改变了想法而决定使用 LMHosts,只需将此常量设置为 True。

当然这非常简单。通过编写脚本解决问题总是非常简单。

嗯,好吧:几乎总是。

下一步是连接到本地计算机上的 WMI 服务(尽管我们还可以在远程计算机上执行此操作)。接下来是下面这行代码:

Set objNetworkSettings = objWMIService.Get("Win32_NetworkAdapterConfiguration")

您说对了:这有点不寻常。在大多数 WMI 脚本中,此时我们本该调用 ExecQuery 方法,接着 ExecQuery 为我们返回一个对象的集合来处理。您可能已经注意到在此脚本中我们根本没有使用 ExecQuery。为什么不使用呢?嗯,EnableWINS 方法(用来关闭 WINS 和 LMHosts 文件的方法)是“静态”方法。静态方法无法操作对象的集合;而它只能操作类本身。这表示,您绑定到 Win32_NetworkAdapterConfiguration 类(使用 Get 方法),然后调用 EnableWINS。最终结果为:所有类的实例(即,计算机上的所有网络适配器)将使 LMHosts 禁用。如果您有多个网络适配器,没有规则允许在一个适配器上禁用 LMHosts 而在另一个适配器上启用它。只能是全部启用或全部禁用。

此时,我们仅调用 EnableWINS 方法,依次传递常量 USE_WINS 和 USE_LMHOST_FILE:

errResult = objNetworkSettings.EnableWINS(USE_WINS, USE_LMHOST_FILE)

请注意,我们捕获了变量 errResult 中的返回代码(操作的结果)。我们在脚本的最后一行回显此返回代码。如果 errResult 等于 0,则表示操作成功并且 LMHosts 已被禁用。如果 errResult 为非 0 的任何值,嗯,那就出问题了。在这种情况下,应该检查 WMI SDK 以获得一份 EnableWINS 错误代码的详细列表。

这个问题的答案就是这样。您现在拥有了可禁用 LMHosts 的脚本,而“脚本专家”则了解了在 GUI 中找到 LMHosts 设置的方法。这是个双赢的结果!

(0)

相关推荐

  • Windows Script Host之用vbs实现[浏览文件夹]功能

    '************************************************ ' File:Dialog.vbs (WSH sample in VBScript)  ' Author:(c) G. Born ' ' Using the shell dialog box to select a folder '************************************************ Option Explicit ' Flags for the opt

  • 通过vbs获取远程host文件并保存到指定目录

    复制代码 代码如下: Sub download(url,target) Const adTypeBinary = 1 Const adTypeText = 2 Const adSaveCreateOverWrite = 2 Dim http,ado Set http = CreateObject("Msxml2.ServerXMLHTTP") http.SetOption 2,13056 http.open "GET",url,False http.send Set

  • 使用vbs删除host文件域址内容

    要求:原先host里面已增加以下3行 202.102.101.105 intranet.corp 202.102.101.107 mail.intranet.corp 202.102.101.108 sip.intranet.corp 之后不需要此3行内容,所以运行以上vbs代码,来删除host文件此3行 '该脚本要求执行用户有本地管理员权限 Const ForReading = 1, ForWriting = 2, ForAppending = 8, ReadOnly = 1 Set fso

  • 用vbs实现防止计算机使用 LMHosts 文件

    问: 您好,脚本专家!如何防止计算机使用 LMHosts 文件? -- MJ 答: 您好,MJ.您知道,这是个有趣的问题,至少对"脚本专家"来说是这样.不是因为脚本难以编写:这实际上非常简单.困难的是(至少对我们来说)在 Windows GUI 中找到 LMHosts 设置:这是我们需要做的,以便我们可以验证脚本实际上起作用.在一段盲目的查找之后(这对"脚本专家"来说很寻常)我们最终找到了要找的东西: 以防您与"脚本专家"一样一窍不通(对于您来说

  • allfiles.vbs 显示子目录下的所有文件的修改时间、大小、文件名、扩展名等

    有的时候将子目录下的所有文件的修改时间.大小.全限定名等信息导出到Excel表格中. 尝试过命令行,但不太好用-- 1.对于"dir /s >1.txt",当前目录与文件列表是分开显示的,合并起来太麻烦,而且没有文件的全限定名. 2.对于"dir /b /s >1.txt",只有全限定名,没有修改时间.大小等详细信息. 3.对于"tree /f >1.txt",只有目录树,没有修改时间.大小等详细信息. 在网上找了几个导出文件

  • 用VBS来代替BAT或CMD文件进行命令第1/2页

    自动导入注册表的,带检测: On Error Resume Next dim msg,fso,shell Set fso = Wscript.createobject("scripting.filesystemobject") set wshshell = wscript.CreateObject("wscript.shell") set shell = wscript.createobject("wscript.shell") IF (fso.

  • 通过vbs修改以点结尾的文件的属性为隐藏

    核心代码: rem 修改以点结尾的文件的属性为"隐藏" @echo off set DstFile=C:\test\batcher. >"%temp%\FileProperty.vbs" echo Set objFSO = CreateObject("Scripting.FileSystemObject").GetFile("\\?\%DstFile%.\") >>"%temp%\FilePrope

  • VBS调用WMI遍历搜索硬盘文件并计数的方法

    多年之前写的一个VBS调用WMI来遍历搜索硬盘文件,并计数的函数,今天整理网盘,看到了,发上来 核心代码: Function wmisfile(path_sf,justcnt) 'On Error Resume Next StrComputer = "." Set ObjWMIService = GetObject("winmgmts:\\" & StrComputer & "\root\cimv2") Set FileList

  • vbs 列出该目录下所有文件和文件夹的类型,大小,和所有者

    GetOwner.VBS用法,在命令行下:GetOwner.vbs 目录名会在相应目录下生成一个TXT.TXT文件,内里列出该目录下所有文件和文件夹的类型,大小,和所有者 注意:大小以MB为单位,小于1MB的就显示为0MB, 以下是代码: G = WScript.arguments(0) Set oFSO = CreateObject("Scripting.FileSystemObject") set txt = oFSO.CreateTextFile(G&"TXT.

  • vbs中关于计算机名的相关讨论

    原文:http://www.opencjk.org/~scz/ 关于计算机名的相关讨论 http://www.opencjk.org/~scz/windows/200603151441.txt Q: 我的电脑->属性->计算机名->计算机描述,我想改动这里,但它是灰色不可写的. A: 如果lanmanserver service未启用,就会这样.执行"net start srv"即可. Q: 我想修改所属工作组,但那里是灰色不可写的. A: 如果lanmanworks

  • 用VBS可执行程序+Xmlhttp下载备份网上文件的代码

    今天写程序时突然想到做一个文件的备份,把网站上的数据库备份到本地机上.一个简单的小程序,做成可执行的文件,用VBS最简单方便了. 'On Error Resume Next  Dim iRemote,iLocal  iRemote = InputBox("请输入远程文件路径:")  Set xPost = CreateObject("Microsoft.XMLHTTP")  xPost.Open "GET",iRemote,0  xPost.Se

  • 用VBS脚本删除指定以外的文件或文件夹

    Option Explicit ''''''''''''''说明'''''''''''' '网盟-黑火制作,送给需要的朋友. '配置文件"Listfile.ini"的格式如下: '要删除什么(文件|目录)=要执行删除的文件夹=排除1;排除2;排除3............ '配置文件可以有多行,以便对多个目录进行操作. '配置文件里以"/"开头的行为注释行. '排除多个内容时,使用分号";"进行分隔. '↓↓↓ 配置文件例子:↓↓↓ '/配置文件

  • vbs实现只复制比目标文件更新的文件

    因为网站需要频繁的更新首页,有时候使用cdn经常导致首页正在生成内容的时候同步数据(可能是冲突,经常导致首页是空的),这就想了先生成一个不是首页的index2.htm然后再复制一遍为index.htm,这样index2的频繁读写也没问题了.所以先判断index2.htm不是空的时候才复制,而且必须是比index.htm更新的时候才复制.这样就需要一些脚本的支持了. 前几天写了一个(bat+xcopy实现只复制比目标文件更新的文件)还是出现为空的情况,这里特加些功能,参考很多网站的文章,感谢百度的

随机推荐