用vbs列出注册表中 Run 项中的所有项目

问:
您好,脚本专家!如何列出注册表中 Run 项中的所有项目?
-- JW
答:
您好,JW。如何列出注册表中 Run 项中的所有项目?坦白地讲,我们不打算告诉您。真的很抱歉。不是因为我们不喜欢您,而是因为我们认为我们有一个更好的答案给您。(如果我们错了,那好,我们只能说这不会是第一次。) 
由于您对 Run 项感兴趣,因此我们假定您真正想知道的是如何找出哪些程序被配置为在每次 Windows 启动时自动运行。您一定可以从 Run 项中读取到该信息,不要对此产生怀疑。实际上,您可以从 Run 项中读取到该信息,查看一下是否 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 中都具有 Run 项。它们中都具有 RunOnce 项。接下来是 Startup 文件夹、All Users Startup 文件夹等等。
您已经找到问题的答案了。试图找出哪些程序被配置为在每次 Windows 启动时自动运行的问题时所牵涉到的问题就是该信息可能存储在数量众多的不同位置中的任一位置中。我们可以编写一个脚本来检查这些为数众多的位置中的每个位置吗?肯定可以这样做。但我们认为以下这段脚本更好:


代码如下:

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colStartupCommands = objWMIService.ExecQuery _ 
    ("Select * from Win32_StartupCommand") 
For Each objStartupCommand in colStartupCommands 
    Wscript.Echo "Command: " & objStartupCommand.Command 
    Wscript.Echo "Description: " & objStartupCommand.Description 
    Wscript.Echo "Location: " & objStartupCommand.Location 
    Wscript.Echo "Name: " & objStartupCommand.Name 
    Wscript.Echo "User: " & objStartupCommand.User 
    Wscript.Echo 
Next

不是四处查找并视图找到 Windows 用来保存自动运行程序信息的位置,我们已决定让 WMI 为我们完成所有此项工作。WMI 类 Win32_StartupCommand 用于查找自动运行程序的信息,而不管该信息是存储在注册表中、Startup 文件夹中还是其他某个位置中。例如,运行此脚本时,将返回类似于下面内容的信息:
Command: Microsoft Office OneNote 2003 Quick Launch.lnk
Description: Microsoft Office OneNote 2003 Quick Launch
Location: Startup
Name: Microsoft Office OneNote 2003 Quick Launch
User: FABRIKAM\kenmyer
Command: C:\WINDOWS\System32\ctfmon.exe
Description: ctfmon.exe
Location: HKU\S-1-5-21-1987391165-1004336648-1605550848-8553\SOFTWARE\Microsoft\
Windows\CurrentVersion\Run
Name: ctfmon.exe
User: FABRIKAM\kenmyer
正如您所见,存在两个不同的自动运行程序:一个程序在 Startup 文件夹中有快捷方式,另一个程序是注册表的 HKEY_USERS 部分中的 Run 中所列出的应用程序。(还有另一个可能存储了自动运行信息的计算机上的位置。)我们的一个简单的小脚本可以在数秒钟内调用并检索到有关这两个程序以及任何其他自动运行应用程序的信息。这就是我们为何认为使用 Win32_StartupCommand 的脚本更好的原因。
那么,该脚本本身是如何工作的?是这样,它几乎同曾经要编写的 WMI 脚本一样简单。我们首先连接到本地计算机上的 WMI 服务。不用说,我们也可以使用此脚本连接到远程计算机上的 WMI 服务(这将返回已配置为在该计算机上自动运行的程序的列表)。然后我们调用 ExecQuery 方法并发出以下查询,此查询可调用并获取它所能找到的所有自动运行程序的集合:
Set colStartupCommands = objWMIService.ExecQuery _
    ("Select * from Win32_StartupCommand")
现在,剩下要做的事情就是建立一个 For Each 循环来遍历程序的集合,并回显诸如应用程序名称和位置(可在其中找到自动运行信息)这样的数据。该方法简单快捷,最大的优势在于,其返回的信息远远多于只通过读取单个注册表项下所填充的值所能获取的信息。很不错吧?
我们希望其会对您有所帮助,JW。如果其未奏效,当您真地确实需要只读取 Run 项并通过使用它来搞定一切时,请告诉我们,这样我们可以知道我们能够为您做些什么。还有问题吗?我们知道最后一块蛋糕(就是您为您自己保留的那块蛋糕)被谁吃了吗?是这样,我们能够回答这个问题,JW。但我们不打算这样做。

(0)

相关推荐

  • 用vbs列出注册表中 Run 项中的所有项目

    问: 您好,脚本专家!如何列出注册表中 Run 项中的所有项目? -- JW 答: 您好,JW.如何列出注册表中 Run 项中的所有项目?坦白地讲,我们不打算告诉您.真的很抱歉.不是因为我们不喜欢您,而是因为我们认为我们有一个更好的答案给您.(如果我们错了,那好,我们只能说这不会是第一次.)  由于您对 Run 项感兴趣,因此我们假定您真正想知道的是如何找出哪些程序被配置为在每次 Windows 启动时自动运行.您一定可以从 Run 项中读取到该信息,不要对此产生怀疑.实际上,您可以从 Run 

  • vbs 读写注册表之系统启动项添加与删除

    核心vbs代码 '变量定义 Dim writeName,writeValue,fileName,regLoaction,regApp '创建注册表编辑器对象 Set regApp=WScript.CreateObject("WScript.Shell") '配置文件名 fileName="FullScan.txt" '输入键名 writeName="xiaoqiang" '输入键值 writeValue="test" '***

  • 用vbs操作注册表实例代码

    打开或关闭CMD: Dim WSHShell, r, m, v, t, g Dim i On Error Resume Next Set WSHShell=WScript.CreateObject("WScript.Shell") v="HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\system\DisableCMD" i="REG_DWORD" t="命令提示窗口开关&qu

  • bat生成vbs通过注册表禁用或启用USB端口的代码

    当然,你也可以完全使用BAT操作注册表来完成修改注册表的键值的目的,具体方式留以后完善,如果你有好的想法,记得告诉我哦! USB_Disable.bat文件代码: 复制代码 代码如下: @echo off echo On Error Resume next>USB_Disable.vbs echo Dim WshShell>>USB_Disable.vbs echo Set WshShell = WScript.CreateObject("WScript.Shell"

  • 用vbs实现注册表开关的脚本

    Dim WSHShell,r,M,v,t,g,i On Error Resume Next Set WSHShell=WScript.CreateObject("WScript.Shell") v="HKCU\Software\Microsoft\Windows\CurrentVersion\ Policies\System\DisableRegistryTools" i="REG_DWORD" t="注册表开关" r=WSH

  • 用vbs检查注册表项的访问权限的代码

    const KEY_QUERY_VALUE = &H0001 const KEY_SET_VALUE = &H0002 const KEY_CREATE_SUB_KEY = &H0004 const DELETE = &H00010000 const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set StdOut = WScript.StdOut Set oReg=GetObject(&q

  • vbs删除注册表项的代码

    WScript.Echo "Enabling Kerberos Logging..." const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_  strComputer & "\root\default:StdRegPro

  • VBS读取注册表的两种方法

    第一种 通过wshshell对象的regread 复制代码 代码如下: RegValue = CreateObject("Wscript.Shell").RegRead("\XXXX_XXXXXXXX_XXX\XXX\XXXX")Msgbox(RegValue) 更多的操作可以参考这篇文章 http://www.jb51.net/article/18125.htm 第二种方法: 通过wmi 复制代码 代码如下: Const HKLM = &H80000002

  • 杀毒除根 巧用注册表防止病毒重新生成

    原来目前不少流行的网络病毒一旦启动后,会自动在计算机系统的注册表启动项中遗留有修复选项,待系统重新启动后这些病毒就能恢复到修改前的状态了.为了"拒绝"网络病毒重启,我们可以从一些细节出发,来手工将注册表中的病毒遗留选项及时删除掉,以确保计算机系统不再遭受病毒的攻击. 阻止通过网页形式启动 不少计算机系统感染了网络病毒后,可能会在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce.HKEY_CURRENT

  • dos(cmd)中删除、添加、修改注册表命令

    regedit的运行参数 REGEDIT [/L:system] [/R:user] filename1 REGEDIT [/L:system] [/R:user] /C filename2 REGEDIT [/L:system] [/R:user] /E filename3 [regpath] /L:system Specifies the location of the SYSTEM.DAT file. /R:user Specifies the location of the USER.D

随机推荐