使用WSH和WMI定期记录系统CPU和内存使用情况
WSH是“Windows Scripting Host”的缩写,其常见的中文翻译是“Windows Scripting Host”,它是一种嵌入在Windows操作系统中的脚本语言工作环境。我们还可以通过了解WSH的内置对象来探索WSH可以实现的功能。 WSH共有14个内置对象,每个对象都有明确的分工。各对象的功能如下:
- 1。 Wscript:主要功能是提取命令行变量,确定脚本文件名,确定WSH执行文件名(wscript.exe或cscript.exe),确认Host版本信息,创建、关联和分离COM对象,写入事件,以编程方式结束脚本文件的运行,将信息输出到默认输出设备(如对话框、命令行)等。
- 2. WshArguments:主要功能是获取所有命令行变量。
- 3。 WshNamed:负责获取指定的命令行参数集。
- 4。 WshUnnamed:负责获取未指定的命令行参数集。
- 5。 WshNetwork:主要功能是打开或关闭网络共享、连接或断开网络打印机、映射或取消网络中的共享、获取当前登录用户的信息。
- 6。 WshController:创建远程脚本对象。
- 7。 WshRemote:实现对网络中计算机系统的远程管理,也可以按计划处理其他程序或脚本。
- 8。 WshRemote Error:其作用是当远程脚本(WshRemote 对象)由于脚本错误而终止时,获取可用的错误信息。
- 9。 WshShell:主要负责本地运行程序、处理注册表项、创建快捷方式、获取系统文件夹信息、处理环境变量等。
- 10。 WshShortcut:主要用于按计划创建快捷方式。
- 11。 WshSpecialFolders:用于获取有关任何 Windows 特殊文件夹的信息。
- 12。 WshURLShortcut:用于根据程序的需要创建Internet资源的快捷方式。
- 13。 WshEnvironment:用于获取任何环境变量(例如 WINDIR、PATH 或 PROMPT)。
- 14。 WshScriptExec:用于判断脚本文件的运行状态和错误信息。
WSH 正常工作的前提是您必须安装 Microsoft 3.0 或更高版本的 IE,因为 WSH 工作时会调用 IE 中的 VBScript (*.vbs) 和 JScript (*.js)。解析引擎。 WSH的优点在于它可以让我们充分利用脚本来自动化计算机工作。但不可否认的是,正是这个特性给我们的系统带来了新的安全风险。许多计算机病毒被创造出来,研究人员热衷于使用脚本语言来编译病毒,并利用WSH的支持功能让这些隐藏病毒的脚本在网络中广泛传播。管理规范。 WMI有很多用途,其中之一就是通过脚本编程实现管理自动化。它是Windows 2K/XP管理系统的核心。对于其他 Win32 操作系统,WMI 是一个有用的插件。 WMI 基于 CIMOM,CIMOM,即通用信息模型对象管理器,是描述操作系统组件的对象数据库。它为 MMC 和脚本程序提供访问操作系统组件的公共接口。有了WMI,工具软件使用脚本程序访问操作系统的不同部分时就不需要使用不同的API。您可以下载WMI SDK,还可以下载WMI Code Creator v1.0生成WMI操作脚本。
以下脚本将实现将每1分钟的CPU和内存使用情况记录到C盘的“Usage.log”文件中。当然,您也可以使用文本编辑器来修改这些参数。请将以下脚本另存为“WriteUsage.vbs”,双击运行或加入到系统启动项中即可。如需中断执行,请结束“wscript.exe”程序:
- '/******************************** **********************************************/
- '
- ' 文件名:WriteUsage.vbs
- '
- ' 作者:Chinafish
- '
- ' 邮箱:support@www.ydxcj.com
- '
- ' 主页:http://www.ydxcj.com
- '
- ' 描述:写入 CPU 和内存使用情况
- '
- '/******************************************** *********************************/
- 错误继续下一个
- const TargetFile = "C:/Usage.log"
- Dim dwTotalMem, dwAvailMe m
- '定时循环记录
- do while true
- const ForReading = 1
- const ForWriting = 2
- 设置 fso = CreateObject( "Scripting.FileSystemObject" )
- '没有文件先创建文件
- Set MyFile = fso.CreateTextFile (目标File, false)
- MyFile.Close
- '打开创建的文件,读取原始内容
- 设置 MyFile = fso.OpenTextFile(TargetFile, ForReading)
- StrContent = MyFile.ReadAll
- MyFile.Close
- '先写原文件内容
- 设置 MyFile = fso.OpenTextFile ( TargetFile, ForWriting)
- '当文件没有内容时写入文件头
- if strContent <> “” 然后
- else
- MyFile.WriteBlankLines 1
- End if
- '写入开始时间
- & 现在())
- ' 本地计算机
- strComputer = "."
- '连接到本地计算机
- 设置 objWMIService = GetObject( "winmgmts://" & strComputer & " /root/cimv2")
- 设置 colItems = objWMIService.InstancesOf( "Win32_LogicalMe moryConfiguration" )
- '总物理内存
- 对于 每个 colItem 在 colItems
- dwTotalMem = CLng (colItem.TotalPhysicalMemory / 1024)
- MyFile.WriteLine("总物理内存:" & CLng (colItem.TotalPhysicalMemory / 1024) & “MB” )
- 下一页
- '剩余内存
- S et colItems = objWMIService.ExecQuery( "从 Win32_PerfRawData_PerfOS_Memory 中选择 *" ,, 48 )
- 对于 每个 objItem in colItems dwAva ilMem = objItem.AvailableMBytes
- MyFile.WriteLine( "剩余物理内存:" &objItem.AvailableMBytes&“MB”)
- 下一个
- '物理内存使用情况(第一行精确到小数点后2位)的地方,第二行是圆角的Number)
- 'MyFile.WriteLine("物理内存使用量:" & CInt((1 - dwAvailMem/dwTotalMem)*100*100)/100 & "%")
- MyFile.WriteLine( "物理内存使用量:" & CInt ((1 - dwAvailMem/dwTotalMem)*100) & “%”)
- 'CPU数量及使用情况
- Set colItems = objWMIService.ExecQuery( “从 Win32_Processor 选择 *” ,,48)
- i = 0
- 对于 每个 colItems 中的 objItem MyFile.WriteLine( "CPU(" & i & " ) 使用率: " & objItem.LoadPercentage & "%" )
- i = i + 1
- 下一个
- ' 写入结束时间
- 设置 fso = 无
- 设置我的文件 = 无
- '休眠以达到定时操作目的的参数为ms。 1000 是 1 秒
- WScript.Sleep 1000*60*1
- 循环
以下是录制文件的效果:
- 程序启动时间:2008-6-10 16:57:43
- 总物理内存:1535MB
- 剩余物理内存:881MB
- 物理内存使用情况: 43 %
- CPU(0) 使用率: 4%
- CPU(1) 使用率: 5%
- 程序结束时间: 2008-6-10 16:57:45
- 程序开始时间:2008-6-10 16:58:06
- 总物理内存:1535MB
- 剩余物理内存:882MB
- 物理内存使用率:43%
- CPU(0)使用率:10%
- CPU(1)使用率:7%
- 程序结束时间:2008-6-10 16:58:08