该 WSH 网络示例演示典型的网络管理员如何在网络的若干远程计算机上使用脚本。该示例脚本将执行一些有用的管理任务,其中包括:
注意 WMI 是基于 Web 的企业管理 (WBEM) 的功能强大而又高级的技术。WMI 主要用于访问和管理企业环境中的管理信息。有关 WMI 的详细信息,请参阅 Microsoft Windows 管理规范:背景和概述,网址为 (http://msdn.microsoft.com/library/default.asp?URL=/library/backgrnd/html/wmixwdm.htm)。
管理员必须在远程计算机上进行必要的安全设置。有关详细信息,请参阅设置远程 WSH。接着,管理员必须复制示例并将其粘贴到脚本编辑器中,还要更改常数以反映相应的网络路径和计算机名称。最后,管理员就可以运行脚本了。
运行该示例
var oController = new ActiveXObject"WSHController" var oProcess = oController.CreateScript "c:\MyLocalDir\\AdminScript.vbs","remmachine" oProcess.Execute() while (oProcess.Status != 2) WScript.Sleep(100) WScript.Echo"Done"
' 远程 WSH 管理员示例 AdminScript.vbs ' ' 该示例代码执行几个常见的管理任务,网络管理员 ' 经常会需要在自己所在网络的计算机上执行 ' 这些管理任务:它将创建一个公用目录,并在其中 ' 放入一些文件,然后将该目录共享。它还将 ' 这些计算机设为默认打印机连接。 ' 注意,为使该示例代码尽可能小一些, ' 而省略了错误处理。实际的产品代码应使用相应的 ' 错误处理,因为有很多这类操作可能会失败; ' 例如,磁盘空间可能不足。 Option Explicit Dim FSO Dim Services Dim SecDescClass Dim SecDesc Dim Trustee Dim ACE Dim Share Dim InParam Dim Network Const FolderName = "C:\Public" Const AdminServer = "\\AdminMachine" Const ShareName = "Pubs" Const PrinterShare = "\\CorpPrinters\PrinterShare" ' 首先,我们在该计算机上添加一台打印机,并使其成为默认打印机。 Set Network = CreateObject("Wscript.Network") Network.AddWindowsPrinterConnection PrinterShare Network.SetDefaultPrinter PrinterShare ' 接着,我们创建一个文件夹,并在其中放入一些文件。 Set FSO = CreateObject("Scripting.FileSystemObject") If Not FSO.FolderExists(FolderName) Then FSO.CreateFolder(FolderName) End If Call FSO.CopyFile(AdminServer & "\Public\Images\*.*",FolderName) ' 通过 WMI,使该文件夹成为共享点 '有关该代码如何运行的信息,请参阅 WMI SDK。 Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!"& AdminServer & "\ROOT\CIMV2") Set SecDescClass = Services.Get("Win32_SecurityDescriptor") Set SecDesc = SecDescClass.SpawnInstance_() Set Trustee = Services.Get("Win32_Trustee").SpawnInstance_ Trustee.Domain = Null Trustee.Name = "EVERYONE" Trustee.Properties_.Item("SID") = Array(1,1,0,0,0,0,0,1,0,0,0,0) Set ACE = Services.Get("Win32_Ace").SpawnInstance_ ACE.Properties_.Item("AccessMask") = 2032127 ACE.Properties_.Item("AceFlags") = 3 ACE.Properties_.Item("AceType") = 0 ACE.Properties_.Item("Trustee") = Trustee SecDesc.Properties_.Item("DACL") = Array(ACE) Set Share = Services.Get("Win32_Share") Set InParam = Share.Methods_("Create").InParameters.SpawnInstance_() InParam.Properties_.Item("Access") = SecDesc InParam.Properties_.Item("Description") = "Public Share" InParam.Properties_.Item("Name") = ShareName InParam.Properties_.Item("Path") = FolderName InParam.Properties_.Item("Type") = 0 Share.ExecMethod_("Create",InParam) ' 现在我们大功告成了。