首页 VBS经典代码大全

VBS经典代码大全

举报
开通vip

VBS经典代码大全VBS代码片断大全[一] VBS代码片断大全[一] 1 VBS 取得本机IP strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set IPConfigSet = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE") For Ea...

VBS经典代码大全
VBS代码片断大全[一] VBS代码片断大全[一] 1 VBS 取得本机IP strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set IPConfigSet = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE") For Each IPConfig in IPConfigSet If Not IsNull(IPConfig.IPAddress) Then For Each strAddress in IPConfig.IPAddress WScript.Echo strAddress Next End If Next -------------------------------------------------------------------------------- 2 取得本机计算机名 strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers Wscript.Echo objComputer.Name Next -------------------------------------------------------------------------------- 4 检查升级包 strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems Wscript.Echo objOperatingSystem.ServicePackMajorVersion & "." & objOperatingSystem.ServicePackMinorVersion Next -------------------------------------------------------------------------------- 5 检查 Hot Fix strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set colQuickFixes = objWMIService.ExecQuery ("Select * from Win32_QuickFixEngineering") For Each objQuickFix in colQuickFixes Wscript.Echo "Description: " & objQuickFix.Description Wscript.Echo "Hot Fix ID: " & objQuickFix.HotFixID Next -------------------------------------------------------------------------------- 6 检查本地管理员数目 Set objNetwork = CreateObject("Wscript.Network") strComputer = objNetwork.ComputerName Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators,group") For Each objUser in objGroup.Members Wscript.Echo objUser.Name Next -------------------------------------------------------------------------------- 7 磁盘系统 strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2") Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3") For Each objDisk in colDisks Wscript.Echo "Disk drive: "& objDisk.DeviceID & " -- " & objDisk.FileSystem Next -------------------------------------------------------------------------------- 8 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 自动登录是否开启 Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objReg=GetObject("winmgmts:\" & strComputer & "\root\default:StdRegProv") strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\WinLogon" strValueName = "AutoAdminLogon" objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName,dwValue If dwValue = 1 Then Wscript.Echo "Auto logon is enabled." Else Wscript.Echo "Auto logon is disabled." End If -------------------------------------------------------------------------------- 9 关闭自动登录 Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objReg=GetObject("winmgmts:\" & strComputer & "\root\default:StdRegProv") strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\WinLogon" strValueName = "AutoAdminLogon" dwValue = 0 oReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, dwValue ------------------------------------------------------------------------- 10 检查Guest是否禁用 Set objNetwork = CreateObject("Wscript.Network") strComputer = objNetwork.ComputerName Set objUser = GetObject("WinNT://" & strComputer & "/Guest") If objUser.AccountDisabled Then   Wscript.Echo "The Guest account is disabled." Else   Wscript.Echo "The Guest account is enabled." End If ------------------------------------------------------------------------- 11 关闭Guest Set objNetwork = CreateObject("Wscript.Network") strComputer = objNetwork.ComputerName Set objUser = GetObject("WinNT://" & strComputer & "/Guest") If objUser.AccountDisabled Then Wscript.Echo "The Guest account is already disabled." Else objUser.AccountDisabled = True objUser.SetInfo Wscript.Echo "The Guest account has been disabled." End If -------------------------------------------------------------------------------- 12 检索本地共象 strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colShares = objWMIService.ExecQuery("Select * from Win32_Share") For each objShare in colShares Wscript.Echo "Name: " & objShare.Name Wscript.Echo "Path: " & objShare.Path Wscript.Echo "Type: " & objShare.Type Next -------------------------------------------------------------------------------- 13 脚本检索一个文件夹下.txt文件 汗哦值得学习 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colFiles = objWMIService.ExecQuery("SELECT * FROM CIM_DataFile WHERE Path = '\\Documents and Settings\\Administrator\\桌面\\' AND Drive = 'E:' AND Extension = 'txt'") Wscript.Echo "Number of .txt files found: " & colFiles.Count for each aa in colFiles NL=NL & vbcrlf & aa.name next Wscript.Echo NL 作者: 60.13.134.* 2005-4-21 19:39  回复此发言 -------------------------------------------------------------------------------- 14 我如何向用户显示一个用来选择文件的对话框? 问: 嗨,Scripting Guy!有没有什么方法可以让我使用脚本向用户显示一个对话框,供用户选择文件使用? -- BF 答: 您好,BF。如果您使用的是 Windows 2000,我们不知道实现此操作的方法,至少操作系统中没有内置这样的方法。但如果您使用的是 Windows XP,情况就不同了。在 Windows XP 上,您可以使用“UserAccounts.CommonDialog”对象向用户显示一个 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的“文件打开”对话框。可以用类似以下代码的脚本: Set objDialog = CreateObject("UserAccounts.CommonDialog") objDialog.Filter = "All Files|*.*" objDialog.InitialDir = "C:\" intResult = objDialog.ShowOpen If intResult = 0 Then Wscript.Quit Else Wscript.Echo objDialog.FileName End If 这是一个小脚本,所以让我们逐行进行解释吧。我们首先创建一个对 UserAccounts.CommonDialog 对象的对象引用(名为“objDialog”)。接着,我们设置对话框的“筛选”属性。我们要显示所有文件,所以我们将筛选设置成这样: objDialog.Filter = "All Files|*.*" 假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选: objDialog.Filter = "Text Files|*.txt" 您也许能够看出它是如何运行的:我们为文件类型提供说明 (Text Files),然后插入一个竖线分隔符 (|),最后使用标准的通配符来指示所有 .txt 文件 (*.txt)。是不是想默认显示 .txt 文件,然后为用户提供查看所有文件的选项?那么可以使用以下代码: objDialog.Filter = "Text Files|*.txt|All Files|*.*" 试一试,您就明白我们的意思了。 然后,我们指定默认文件夹。默认情况下,我们希望对话框显示位于驱动器 C 的根文件夹中的文件,所以我们这样设置“InitialDir”属性: objDialog.InitialDir = "C:\" 希望显示 C:\Windows 文件夹中的文件吗?那么可以使用以下代码: objDialog.InitialDir = "C:\Windows" 不必担心:这是一个真正的“文件打开”对话框,所以您可以随意单击,并且可以随时停下来。您从 C:\Windows 开始并不意味着您只能打开该文件夹中的文件。 最后,我们使用下面这行代码显示对话框: intResult = objDialog.ShowOpen 现在,我们只需坐下来,等待用户选择文件并单击“确定”(或者等待用户单击“取消”)。如果用户单击“取消”,则变量 intResult 将被设置为 0。在我们的脚本中,我们检查 intResult 的值,如果是 0,我们将只需要使用 Wscript.Quit 来终止此脚本。 但是如果用户实际上选择了文件并单击了“确定”,那该怎么办?在这种情况下,intResult 将被设置为 -1,“FileDialog”属性将被设置为所选文件的路径名。我们的脚本只回显路径名,这意味着我们将得到类似以下内容的输出: C:\WINDOWS\Prairie Wind.bmp 不用说,您并不局限于只回显文件路径。实际上,您可以使用 WMI、FileSystemObject 或一些其他技术来绑定该文件,然后对其执行删除、复制、压缩或检索文件属性等操作 — 您对文件能够执行的操作差不多都可以对它执行。 但无论如何,您都需要使用脚本。 顺便说一句,使用此方法,您一次只能选择一个文件,而不能按住“Ctrl”键选择多个文件。有一种方法可以选择多个文件,至少在 XP 计算机上可以,但是我们只能将此问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 留到以后的专栏中讨论了。 -------------------------------------------------------------------------------- 15 我如何确定进程是在哪个帐户下运行的? 问: 嗨,Scripting Guy!我有一个脚本,它返回关于计算机上运行的所有进程的信息,只是我不知道如何获得这些进程在其下运行的用户帐户的名称。您可以帮助我吗? -- DL 答: 您好,DL。是的,我们可以帮助您。确定进程是在哪个帐户下运行的,实际上相当简单,只是如何着手执行此操作并不是特别显而易见的。如果您与大多数人一样,那么您可能会通过扫描 Win32_Process 类的属性来查找名为 Account 或 UserName 或类似的属性。您很有可能找不到。出现这种情况的原因是:Win32_Process 没有可以告诉您进程在哪个帐户下运行的属性。 您需要使用“GetOwner”方法来捕捉此信息。下面这个脚本可以告诉您 Microsoft Word (Winword.exe) 在哪个帐户下运行: strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'Winword.exe'") For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain Wscript.Echo "Process " & objProcess.Name & " is owned by " _ & strUserDomain & "\" & strUserName & "."Next 我们最感兴趣的是下面这行代码: objProcess.GetOwner strNameOfUser, strUserDomain 我们在此所做的就是调用“GetOwner”方法。GetOwner 返回两个“输出参数”,一个返回负责该进程的用户的名称,一个返回该用户所属的域。为捕获这两个输出参数,我们需要为 GetOwner 方法提供两个变量。在这个示例脚本中,我们使用了两个分别叫做 strUserName 和 strUserDomain 的变量。名称可以随意选择;您可以将变量称为 A 和 B 或 X 和 Y 或任何其他您想要的名称。 不过,变量的顺序不能随意设置:返回的第一个值总是用户名,第二个值总是域。这意味着,如果您希望用 X 表示用户名,用 Y 表示域,那么您要确保您的代码像下面这行代码一样: objProcess.GetOwner X, Y 调用 GetOwner 之后,我们就可直接回显进程名和所有者。请注意,我们可以稍微来点儿花样儿 – 使用域\用户格式。这样,我们就可以回显类似于“fabrikam\kenmyer”的名称。 下面附带提供了另一个脚本,该脚本可以列出计算机上的所有进程以及各个进程的所有者: strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process") For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain Wscript.Echo "Process " & objProcess.Name & " is owned by " _ & strUserDomain & "\" & strUserName & "."Next 可能有人感到奇怪,2005 年 1 月 3 日正好是 Microsoft 员工的正式休息日。那么今天为什么会有“嗨,Scripting Guy!”专栏?这只能是由于 Microsoft 脚本专家表现出来的对工作的难以置信的奉献和投入精神。或者,也可能是由于某个脚本专家 – 还说不出他或她的名字 – 没有意识到今天是假日,所以照常来了(而且是在早上 7 点啊!)。 -------------------------------------------------------------------------------- 16 可以将脚本的输出复制到剪贴板吗? 问: 嗨,Scripting Guy!有办法将脚本输出复制到剪贴板吗? -- ZW, Marseilles, France 答: 您好,ZW.如果您不介意用一些疯狂的解决方法,那么实际上将脚本输出复制到剪贴板相当容易。首先,您需要构造一个字符串,其中包含想要的输出。然后,创建 Internet Explorer 的一个实例,然后在其中打开一个空白页。接着,利用 Internet Explorer 对象模型的内置功能,将字符串复制到剪贴板;特别是, 可以使用 clipboardData.SetData 方法来实现这个技巧。将某些数据复制到剪贴板的示例脚本如下: strCopy = "This text has been copied to the clipboard." Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate("about:blank") objIE.document.parentwindow.clipboardData.SetData "text", strCopy objIE.Quit 运行脚本,然后打开 Notepad,然后单击“粘贴”;应该可以看到所复制的字符串。 顺便说一下,所有这一切都是在“幕后”发生的,Internet Explorer 并不会真的出现在屏幕上。这是因为,在默认情况下,通过脚本创建的任何 IE 实例在运行时都是隐藏的,除非您利用如下语句将其显示出来: objIE.Visible = True -------------------------------------------------------------------------------- 17 可以在运行脚本时修改当前命令窗口的标题吗? 问: 嗨,Scripting Guy!在我运行一个批文件的时候,可以使用 Title 命令修改命令窗口的标题。我可以在脚本中修改命令窗口的标题吗? -- AA, Yokohama, Japan 答: 你好,AA.可以。只要您愿意打开一个新的命令窗口。如果您愿意,可以使用类似下面的这些代码: Set objShell = CreateObject("Wscript.Shell") objShell.Run _ ("%comspec% /K title My Command Window |ping.exe 192.168.1.1"), _ 1, TRUE 请注意我们在这里所做的。我们 创建了 Wscript.Shell 对象的一个实例,然后使用 Run 方法运行 Ping.exe。但是,请看看我们用来运行脚本所用的这个长的命令字符串?我们做的就是调用 %comspec% 打开一个新的命令窗口。我们使用“/K”开关参数确保窗口可以在脚本运行完毕后保持打开,而且我们将窗口的标题设置为“My Command Window”。非常简单明了。 在我们运行 Ping 的时候用了一些技巧;我们必须使用管道分隔符(| 字符)打开一个命令窗口,并且运行 Ping 命令,所有工作都在一个动作中完成。我的意思就是:“打开一个命令窗口,设置窗口标题,然后运行 Ping.exe,所有这些都同时完成。”如果不使用管道,脚本会打开一个标题为“My Command Window”的命令窗口,但是接着再打开 第二个命令窗口(带有默认标题),并在第二个窗口中运行 Ping。如果您想看看我们说的是否属实,可以试试这段脚本: Set objShell = CreateObject("Wscript.Shell") objShell.Run("%comspec% /K title My Command Window "), 1, TRUE objShell.Run("ping.exe 192.168.1.1"), 1, TRUE 顺便说一下,如果您希望弄的美观漂亮(或者至少在命令行外壳允许的情况下尽可能地美观),可以在修改标题的同时修改窗口的前景和背景颜色。是否厌倦了在绿色背景上看淡黄色文字?那么可以运行这个脚本: Set objShell = CreateObject("Wscript.Shell") objShell.Run _ ("%comspec% /T:2E /K title My Command Window|ping.exe " & _ "192.168.1.1"), 1, TRUE The secret here is the mysterious little switch /T:2E, which enables you to change the foreground and background colors. For more information, open up a command window and type this: color /? 这里的秘密在于神秘的小开关参数“/T:2E”,它允许您修改前景和背景的颜色。更多相关信息,请打开一个命令窗口,并且在其中输入: color /? -------------------------------------------------------------------------------- 18 如何使用脚本管理 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 任务? 问: 嗨,Scripting Guy!是否有简便的办法可以使用脚本来管理计划任务? -- RC 答: 嗨,RC。您就是要问这个问题,是吗?老实说,这正是脚本的强项之一,不过您在听了回答以后可能会比提问以前更为困惑。但先不管这个了。 这里我们碰到的问题是,实际上 Windows 具有两套——并且,令人感到沮丧的是还不完全兼容——API(应用程序编程接口)用于管理计划任务。对于其中一个,有 Task Scheduler API 用于“任务计划程序”和 Schtasks.exe。Schtasks.exe 是 Windows XP 和 Windows Server 2003 附带的命令行任务管理工具。对于另一个来说,则有所谓的 At API 用于 At.exe 和 WMI’s Win32_ScheduledJob 类。 那么,会有什么问题呢?好吧,我们假设您使用 WMI 来创建计划任务(稍候我们会提供一个用于此用途的示例脚本)。如果您是这样的话,您就可以使用类似如下的脚本来检索有关使用 At API 创建的这个任务和其他任何任务的信息: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colScheduledJobs = objWMIService.ExecQuery _ ("Select * from Win32_ScheduledJob") For Each objJob in colScheduledJobs Wscript.Echo "Caption: " & objJob.Caption Wscript.Echo "Command: " & objJob.Command Wscript.Echo "Days Of Month: " & objJob.DaysOfMonth Wscript.Echo "Days Of Week: " & objJob.DaysOfWeek Wscript.Echo "Description: " & objJob.Description Wscript.Echo "Elapsed Time: " & objJob.ElapsedTime Wscript.Echo "Install Date: " & objJob.InstallDate Wscript.Echo "Interact with Desktop: " & objJob.InteractWithDesktop Wscript.Echo "Job ID: " & objJob.JobID Wscript.Echo "Job Status: " & objJob.JobStatus Wscript.Echo "Name: " & objJob.Name Wscript.Echo "Notify: " & objJob.Notify Wscript.Echo "Owner: " & objJob.Owner Wscript.Echo "Priority: " & objJob.Priority Wscript.Echo "Run Repeatedly: " & objJob.RunRepeatedly Wscript.Echo "Start Time: " & objJob.StartTime Wscript.Echo "Status: " & objJob.Status Wscript.Echo "Time Submitted: " & objJob.TimeSubmitted Wscript.Echo "Until Time: " & objJob.UntilTime Next 除此以外,如果您打开“任务计划程序”,您还会在其中看到这个任务。So far so good, huh? 然而,假设您对自己这么说:“既然我打开了‘任务计划程序’,那我应该可以再计划第二个任务。”假设您真的这么做了。那个使用“任务计划程序”创建的任务对 WMI 来说是不可见的。“任务计划程序”可以处理 WMI 创建的任务,但 WMI 却不能处理“任务计划程序”创建的任务。 更糟的是,假如您使用“任务计划程序”来修改原本使用 WMI 创建的任务。您可以成功修改这个任务,但是以后再也无法使用 WMI 来访问这个任务,即使一开始创建这个任务时使用的是 WMI 也一样。是的,我们知道。希望这个问题会在以后版本的 Windows 得到修正。并且,是的,我们也知道:现在这对您实际上没有多大帮助,对吧?抱歉。 那么,说了这么多意味着什么呢?好吧,这意味着使用 WMI 来管理计划任务是一件冒险的事情。如果您确定其他人没有使用“任务计划程序”来安排任务,那么 WMI 可以工作得很好。但如果其他人使用 WMI 脚本和“任务计划程序”,管理就会变得非常复杂。 那么,如何使用脚本来创建计划任务呢?对于初学者请尝试使用以下示例: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objNewJob = objWMIService.Get("Win32_ScheduledJob") errJobCreated = objNewJob.Create _ ("Cleanup.exe", "********123000.000000-420", _ True , 1 OR 4 OR 16, , , JobID) Wscript.Echo errJobCreated A bit cryptic, isn’t it?以上脚本安排一个假想的程序 Cleanup.exe 在每周一、周三和周五下午 12:30 运行。有关此脚本中使用的不同参数的更多信息,请参阅以下地址的相关部分:《Microsoft Windows 2000 脚本编写指南》中的相关部分. -------------------------------------------------------------------------------- 19 如何使用命令行参数和默认值? 问: 嗨,Scripting Guy!我希望有个脚本可以将计算机名作为命令行参数接收,然后对这些计算机中的每台计算机运行这个脚本。但是,如果不输入命令行参数,我希望它默认对本地计算机运行。你们能帮我吗? -- TS 答: 嗨,TS。当然,我们可以帮你。我们假设您在命令行提示符处输入以下命令来启动您的假想脚本: cscript my_script.vbs atl-ws-01 atl-ws-02 atl-ws-03 这种情况下,您可能希望对以下三台计算机运行这个脚本:atl-ws-01; atl-ws-02; and atl-ws-03. 但如果您输入一个类似如下所示的没有任何命令行参数的命令,情况又会怎样呢: cscript my_script.vbs 这种情况下,您希望脚本说:“哦,没有命令行参数,对吧?那好,我会对本地计算机运行。” 那么,如何做到呢?好吧,您可以通过以下代码来实现: If Wscript.Arguments.Count = 0 Then arrComputers = Array(".") Else Dim arrComputers() For i = 0 to Wscript.Arguments.Count - 1 Redim Preserve arrComputers(i) arrComputers(i) = Wscript.Arguments(i) Next End If For Each strComputer in arrComputers Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem") For Each objItem in colItems Wscript.Echo objItem.Caption Next Next 我们稍微解释一下这段代码的工作原理。我们首先检查是否输入了命令行参数;我们通过 Wscript.Arguments.Count(如您所料,这会告诉我们脚本启动时被提供的参数数目)来检查这个值。假如这个值等于 0。这说明您没有提供命令行参数。因此,我们将数组 arrComputers 的值设为圆点 (“.”)。为什么设为圆点?这是因为在 WMI 中,圆点表示本地计算机。 那为什么使用数组?好吧,那是因为我们想要尽可能写入几行代码。通过使用数组,我们就不需要为没有指定命令行参数的情况编写一组代码,而为指定了一个(或是两个)命令行参数的情况另外编写一组代码。相反,我们只要使用 If-Then 语句来检查 Wscript.Arguments.Count 的值就可以了。上面说过,如果这个值为 0(即没有输入命令行参数),那么我们就将 arrComputers 的值设为圆点。因此,我们就有了一个由单个项目组成的数组。 但如果 Count 不等于 0 呢?这种情况下,我们就要获取所有命令行参数,并将这些参数填充到 arrComputers 中。以下就是它的工作原理: 首先,我们使用以下代码创建一个动态数组:Dim arrComputers()。动态数组就是事先不指定大小的数组;我们可以根据需要动态增加数组的大小。通过这种方式,我们就可以不必考虑所输出的命令行参数的个数,只要根据所有参数的数目调整数组的大小就可以了。 接下来,我们创建一个从 0 运行到 Wscript.Arguments.Count – 1 的 For Next 循环。这看来有点疯狂,但我们这么做是因为 VBScript 数组是从项目 0 开始的。因此,最后一个项目就自然是所有项目的总数减去 1。例如,假设我们有三个项目。第一个项目是项目 0;第二个项目是项目 1;那么第三个项目就是项目 2 (3 – 1) 对于每个项目,我们使用以下代码来重新调整数组大小:Redim Preserve arrComputers(i).这会将数组大小设置为 i 的值(i 是循环变量,它告诉我们正在处理的是 Wscript.Arguments 中的哪些参数)。开始运行循环时,i 等于 0,因此我们实际上使用的是以下代码:Redim Preserve arrComputers(0),它为我们提供了一个单元素数组。 顺便说一下,代码中的 Preserve 部分用于确保在每次重新调整数组的维数时不会丢失所有现有数据。假设我们处在 Redim arrComputers(),这时数组大小会被重新调整,但系统将会检测数组中原有的任何数据。 然后,我们将这个参数添加到数组中。如果我们提供 atl-ws-01 和 atl-ws-02 作为命令行参数,那么循环结束时 arrComputers 将是一个具有以下两个元素的数组:atl-ws-01 和 atl-ws-02。 剩下的就简单了。我们创建一个可以对数组 arrComputers 中的所有元素循环运行的 For-Each 循环;我们知道,arrComputers 中可能包含一个圆点(表示本地计算机),也可能包含从命令行参数中获取的计算机名列表。每次循环运行都会连接到相应的计算机并检索 Win32_OperatingSystem 类的 Caption 属性。以上就是对您的问题的全部解答! -------------------------------------------------------------------------------- 20 如何中止某个具有特定 PID 的进程? 问: 嗨,Scripting Guy!如果我知道进程的 PID,是否可以使用脚本中止这个进程? -- JV 答: 嗨,JV。当然可以。致那些不太熟悉缩写的同志们:PID 是“进程标识符”(Process Identifier) 的缩写,这是创建进程时分配给它的唯一的身份证号码。(好吧,是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。)WMI 类 Win32_Process 中有一个属性 (ProcessId) 对应于 PID。假设您想要中止 PID 为 2576 的进程,以下脚本就可以做这件事情: strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where ProcessID = 2576") For Each objProcess in colProcessList objProcess.Terminate() Next 当然,您要记住 PID 是会经常变化的:尽管您现在要中止的进程的 PID 可能是 2576,但下一次创建时它可能就不会具有相同的 PID。因此,将 PID 值硬编码进来是不行的,您可能需要对这个脚本进行修改,以便它可以接受任何 PID 作为命令行参数: If Wscript.Arguments.Count = 0 Then Wscript.Echo "You must enter a PID." Wscript.Quit End If intPID = Wscript.Arguments.Item(0) strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where ProcessID = " & intPID & "") For Each objProcess in colProcessList objProcess.Terminate() Next 在上述脚本中,我们首先检查是否输入了命令行参数;如果没有输入任何命令行参数,我们就回显一条错误信息 (“You must enter a PID.”),然后退出。如果输入了一个参数,我们就使用以下代码将第一个参数分配给变量 intPID: intPID = Wscript.Arguments.Item(0) 那么如果我们输入多个命令行参数呢?哦,在上述这段简单的脚本中,我们会忽略其他参数。不过您可以修改这个脚本,以便中止与您具有的 PID 对应的多个进程。有关如何实现的更多信息,请访问以下脚本故事专栏。 为 intPID 赋值后,我们使用 Win32_Process 类来定位这个进程并中止它。注意我们不是将 PID 硬编码进来,而是使用变量 intPID: ("Select * from Win32_Process Where ProcessID = " & intPID & "") 如果您不调用这段代码,也可以使用名称(而不用 PID)来中止进程。例如,以下脚本可中止计算机上运行的所有 Notepad.exe 实例: strComputer = "." Set objWMIService = GetObject _ ("winmgmts:\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'Notepad.exe'") For Each objProcess in colProcessList objProcess.Terminate() Next 上面说过,这段代码中止的是所有 Notepad 实例。如果您只想中止特定实例,请使用 PID。这是因为 PID 对正在运行的进程来说是唯一的,而名称则不是。换句话说,PID 为 2576 的进程只有一个,但名称为 Notepad.exe 的进程却可能有很多。 有关使用脚本管理进程的更多信息,请参阅以下地址的相关部分“Microsoft Windows 2000 脚本编写指南”. 21 如何暂停一个脚本,然后在用户按下键盘上的一个键时恢复它的运行? 如何暂停一个脚本,然后在用户按下键盘上的一个键时恢复它的运行? 问: 嗨,Scripting Guy!我想暂停脚本,然后在用户按下键盘上的任意按键时恢复它的运行。我怎样才能做到? -- AL 答: 嗨,AL。哦,这个问题让我们回溯到:“按任意键继续,”以及“终止、重试或失败”这一计算机史上最著名的词组之一。对不起,我们需要一点时间来感叹以前那些美好的时光。唉……。 过去,“按任意键继续”几乎是每个批处理文件的基本要素。以前,只要在批处理文件当中插入一个暂停命令;那样,批处理文件就会暂停——就像忠实的老狗,呆在那里,等您按键盘上的按键。只要按一个键——任意键,批处理文件就会继续运行。有兴趣追忆往事的人可以试着运行这个简单的小批处理文件,来了解具体情况: echo off pause echo The batch file is complete. 注意:将其保存为 .bat 文件,而不是 .vbs 文件。 无疑您们当中有许多人会想:“哇,脚本比批处理文件好得多,也强大得多。我打赌会有非常棒的方法用以在脚本中执行“按任意键继续”的操作。”老实说,我们也会这么认为。但您猜怎么样:没有办法在脚本中实现这一功能。 那么,可能有某种笨一些的变通方法,可是我们绞尽脑汁也想不出一个法子。问题在于 Windows Script Host 不是设计作为一个以事件驱动的环境;换句话说,WSH 不知道如何等待某个事件(比如:按键盘上的键)的发生。加上与命令行交互的能力有限,因此只能得到无法实现暂停命令功能的脚本环境。 我们知道:这不是您真正希望得到的答案。而我们确实可以给您一个安慰奖。我们无法复制暂停命令(可让计算机等到您按了键盘上的任意键后再继续执行操作)。但是,我们可以给您一些代码,从而让计算机等到您按了键盘上的“ENTER”键后再继续执行操作(是的,必须是“ENTER”键)。这与您想要的并不完全相符,但却行得通: strMessage = "Press the ENTER key to continue. " Wscript.StdOut.Write strMessage Do While Not WScript.StdIn.AtEndOfLine Input = WScript.StdIn.Read(1) Loop WScript.Echo “The script is complete.” 这个脚本所做的就是在屏幕上显示一条消息,然后使用 StdIn(仅包含在 WSH 5.6 中,这表示只有安装了 WSH 5.6 才可以运行该脚本)等待用户在命令行中输入数据。StdIn 将等待您按“ENTER”键;只要一按“ENTER”键,该脚本就将继续运行。如果按了“ENTER”键以外的其他键又会怎么样?没什么大不了:所按的任何其他键的值将显示在屏幕上。在最终按到“ENTER”键之前,脚本只会显示所按的任何其他键的值。那时,脚本会结束循环并继续运行。 假如您有疑惑,记得 StdIn 确实是使用命令行向脚本输入数据的一种方法。例如,您的脚本可能会提示您输入用户名或文件名。因此等您按“ENTER”键,作为指示数据输入完成的一种方法。否则,可能键入用户名的第一个字母时,StdIn 就会开始运行。“ENTER”是表示数据输入完成的官方信号。 -------------------------------------------------------------------------------- 22 如何知道哪些脚本正在计算机上运行? 如何知道哪些脚本正在计算机上运行? 问: 嗨,Scripting Guy!如何知道哪些脚本正在计算机上运行? -- NW 答: 嗨,NW。这个问题我们通常不大愿意回答,因为有 50% 的概率您可能对所听到的解答感到不满意。如果运行的是 Windows 2000(或 Windows 的以前版本),那么答案很简单:办不到。诸如下方的脚本——可查找在 Cscript.exe 或 Wscript.exe 下运行的所有进程——可以告诉您有脚本正在计算机上运行: strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery _ ("Select
本文档为【VBS经典代码大全】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_584969
暂无简介~
格式:doc
大小:206KB
软件:Word
页数:47
分类:互联网
上传时间:2014-03-27
浏览量:1275