WSH 是"Windows Scripting Host"的缩略形式, 其通用的中文译名为"Windows 脚本宿主", 为内嵌于 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 : 用于按程序要求创建进入互联网资源的快捷方式.
- 13. WshEnvironment : 用于获取任意的环境变量(如 WINDIR, PATH, 或 PROMPT).
- 14. WshScriptExec : 用于确定一个脚本文件的运行状态及错误信息.
WSH 的正常工作的前提, 是你必须安装了微软 3.0 或更高版本的 IE, 因为 WSH 在工作时会调用 IE 中的
VBScript (*.vbs) 和 JScript (*.js) 解析引擎. WSH
的优点在于它使我们可以充分利用脚本来实现计算机工作的自动化. 但不可否认, 也正是它的这一特点, 使我们的系统又有了新的安全隐患.
许多计算机病毒制造者正在热衷于用脚本语言来编制病毒, 并利用 WSH 的支持功能, 让这些隐藏着病毒的脚本在网络中广为传播.
WMI 是 "Windows Management Instrumentation" 的缩写, 即Windows管理规范.
WMI有许多用途, 其中之一就是通过脚本编程实现管理自动化. 他是Windows 2K/XP管理系统的核心. 对于其他的Win32操作系统,
WMI 是一个有用的插件. WMI 以 CIMOM 为基础, CIMOM即公共信息模型对象管理器 (Common Information
Model Object Manager), 是一个描述操作系统构成单元的对象数据库, 为 MMC
和脚本程序提供了一个访问操作系统构成单元的公共接口. 有了WMI, 工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的 API.
你可以下载 WMI SDK
, 并且可以下载 WMI Code Creator v1.0
来生成 WMI 操作脚本.
以下脚本将实现每隔1分钟记录CPU和内存的使用率到C盘的 "Usage.log" 文件中, 当然你也可以使用文本编辑器修改这些参数,
请将以下脚本为存为 "WriteUsage.vbs", 双击运行或加入系统启动项中均可, 需要中断执行请结束 "wscript.exe" 程序:
- '/************************************************************************/
- '
- ' FileName: WriteUsage.vbs
- '
- ' Author: Chinafish
- '
- ' Email: china_fish@163.com
- '
- ' Homepage: http://www.csinx.org
- '
- ' Desc: Write CPU & Memory usage
- '
- '/************************************************************************/
- on error resume next
- const TargetFile = "C:/Usage.log"
- Dim dwTotalMem, dwAvailMem
- '定时循环记录
- do while true
- const ForReading = 1
- const ForWriting = 2
- Set fso = CreateObject( "Scripting.FileSystemObject" )
- '没有文件先创建文件
- Set MyFile = fso.CreateTextFile(TargetFile, false)
- MyFile.Close
- '打开创建的文件读出原来的内容
- Set MyFile = fso.OpenTextFile(TargetFile, ForReading)
- strContent = MyFile.ReadAll
- MyFile.Close
- '先写原文件内容
- Set MyFile = fso.OpenTextFile(TargetFile, ForWriting)
- '文件无内容时写文件头
- if strContent <> "" then
- MyFile.WriteLine(strContent)
- else
- MyFile.WriteLine( "/*Usage.log file write by Chinafish.*/" )
- MyFile.WriteBlankLines 1
- End if
- '写开始时间
- MyFile.WriteLine( "程序启动时间: " & Now())
- '本地电脑
- strComputer = "."
- '连接到本地电脑
- Set objWMIService = GetObject( "winmgmts://" & strComputer & " /root/cimv2")
- Set colItems = objWMIService.InstancesOf( "Win32_LogicalMemoryConfiguration" )
- '总计物理内存
- For Each colItem In colItems
- dwTotalMem = CLng (colItem.TotalPhysicalMemory / 1024)
- MyFile.WriteLine( "总计物理内存: " & CLng (colItem.TotalPhysicalMemory / 1024) & "MB" )
- Next
- '剩余内存
- Set colItems = objWMIService.ExecQuery( "Select * from Win32_PerfRawData_PerfOS_Memory" ,,48)
- For Each objItem in colItems
- dwAvailMem = objItem.AvailableMBytes
- MyFile.WriteLine( "剩余物理内存: " & objItem.AvailableMBytes & "MB" )
- Next
- '物理内存使用率(第一行精确到小数后2位, 第二行取整数)
- 'MyFile.WriteLine("物理内存使用: " & CInt((1 - dwAvailMem/dwTotalMem)*100*100)/100 & "%")
- MyFile.WriteLine( "物理内存使用: " & CInt ((1 - dwAvailMem/dwTotalMem)*100) & "%" )
- 'CPU数和使用率
- Set colItems = objWMIService.ExecQuery( "Select * from Win32_Processor" ,,48)
- i = 0
- For Each objItem in colItems
- MyFile.WriteLine( "CPU(" & i & ")使用率: " & objItem.LoadPercentage & "%" )
- i = i + 1
- Next
- '写结束时间
- MyFile.WriteLine( "程序结束时间: " & Now())
- MyFile.Close
- Set fso = Nothing
- Set MyFile = Nothing
- '睡眠达到定时操作目的 参数是ms 1000是1秒
- WScript.Sleep 1000*60*1
- Loop
以下为记录文件的效果:
- 程序启动时间: 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