脚本常见问题问与答

常见问题

撰稿人: 脚本编程技术专家

*
本页内容
常规脚本编程常规脚本编程
示例脚本示例脚本
系统管理脚本编程指南系统管理脚本编程指南

常规脚本编程

脚本的准确定义是什么?

脚本只不过一种通过记事本程序或其它文本编辑器创建、并被保存为特定文件扩展名(例如:对于VBScript脚本编程语言来说,脚本文件扩展名为.VBS)的普通文本文件。

好的。那么我为何要学习脚本编程技术呢?

您是否遇到过为完成某项特定任务而不得不一遍又一遍反复输入相同命令集合的情况呢?您是否曾经仅仅为完成某些琐碎事务而在相同向导程序中以同样顺序反复点击同一套按钮,并且不得不针对多台计算机或多个用户帐号重复上述操作呢?

脚本将帮助您消除此类重复性工作。脚本是一种由您自己创建、用以描述完成特定任务所需步骤的文件。一旦创建了相应脚本,您便可以对其加以“运行”,该脚本将代替您执行所有步骤,从而为您节省大量时间与精力。您只需创建一次脚本,之后,便可根据需要在执行特定任务时随时对其进行重用。

此外,脚本还可以通过定时方式在指定日期的特定时间--甚至无人职守的午夜时分--内执行事先设定的任务。同时,脚本可以被设计为能够在多种不同计算机上执行相同任务。您是否需要从所有域控制器的事件日志中获取事件信息呢?没问题,您只需安排在午夜时分运行一个脚本,这样一来,当您第二天清晨进入办公室时,便可以直接获取所需数据了。

在脚本编程方面,我是一个彻头彻尾的新手。您能否教授我如何编写脚本?

一旦系统管理脚本编程指南发布后,它将为您提供一个良好的学习起点。届时,您可以通过查阅VBScript初级文章的方式开始涉足系统管理脚本编程领域。

A scripting guide for Windows Server 2003 might be released as early as late 2003.

您能否为我推荐一本学习脚本编程技术的有用书籍?

坦率的说,不能。这并不是因为我们认为其它介绍脚本编程技术的书籍都不够全面,而只有系统管理脚本编程指南值得一读(咳……)。仅仅是因为我们尚未阅读并审阅过目前市面上所有的脚本编程技术书籍。

为编写脚本程序,我需要在计算机上安装哪些软件产品?

信不信由你,只要您能够使用记事本程序,您便具备了开始编写脚本程序的所有必备条件。

为运行脚本程序,我需要在计算机上安装哪些软件产品?

具体需求应视脚本内容而定。以下表格列出了针对各种不同Windows操作系统版本所推荐安装的软件产品。然而,这并不意味着只要安装了这里所列出的软件产品,您便可以在计算机上运行所有脚本。由于脚本编程技术的不断被修改(特别是针对WMI的脚本编程技术),许多在Windows XP或Windows .NET Server上运行的脚本如不进行少量修改可能无法在Windows 2000上运行,而另一些脚本则从本质上讲便根本无法在Windows 2000上运行。同样,许多能够在Windows 2000上运行的脚本也将无法在Windows NT 4.0或Windows 98上运行。

平台WSHVBScriptWMIADSI

Windows 95

5.6

5.6

1085.0005 (1.5)

5,0,00,0 (DSClient)

Windows 98

5.6

5.6

1085.0005 (1.5)

5,0,00,0 (DSClient)

Windows NT 4.0

5.6

5.6

1085.0005 (1.5)

5,0,00,0 (DSClient)

Windows 2000

5.6

5.6

1085.0005 (1.5)

5,0,00,0

Windows XP

5.6

5.6

2600.0000

5,0,00,0

Windows .NET Server

TDB

TBD

TBD

TBD

如果我已经在计算机上安装了正确的软件产品,那么,接下来我应当做些什么?

复制以下脚本,将其粘贴到记事本程序中,并以.VBS文件扩展名进行保存(例如Versions.vbs)。运行该脚本,它将报告当前在您计算机上所安装的WSH、VBScript、WMI和ADSI版本。如果某个版本编号返回值为空,则意味着此项技术并未安装。

On Error Resume Next
WScript.Echo "WSH Version: " & WScript.Version
Wscript.Echo "VBScript Version: " & ScriptEngineMajorVersion _
    & "." & ScriptEngineMinorVersion
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer _
        & "\root\cimv2")
Set colWMISettings = objWMIService.ExecQuery _
    ("Select * from Win32_WMISetting")
For Each objWMISetting in colWMISettings
    Wscript.Echo "WMI Version: " & objWMISetting.BuildVersion
Next
Set objShell = CreateObject("WScript.Shell")
strAdsiVersion = objShell.RegRead
("HKLM\SOFTWARE\Microsoft\
Active Setup\Installed Components\
{E92B03AB-B707-11d2-9CBD-0000F87A369E}\Version")
If strAdsiVersion = vbEmpty Then
    strAdsiVersion = objShell.RegRead
    ("HKLM\SOFTWARE\Microsoft\ADs\Providers\LDAP\")
    If strAdsiVersion = vbEmpty Then
        strAdsiVersion = "ADSI is not installed."
    Else
        strAdsiVersion = "2.0"
    End If
End If
WScript.Echo "ADSI Version: " & strAdsiVersion

如果我所使用的软件版本不正确,将会发生什么情况?

不必担心,您可以从以下地址下载最新版本的Microsoft脚本编程技术:

ADSI:http://www.microsoft.com/windows2000/server/evaluation/news/bulletins/adextension.asp

WMI:http://www.microsoft.com/downloads/release.asp?ReleaseID=18490

WSH/VBScript:http://msdn.microsoft.com/downloads/list/webdev.asp

我能否在安装Windows NT 4.0或Windows 98操作系统的计算机上运行Active Directory脚本?

是的,您可以这样做,但您必须首先在这些系统平台上安装Active Directory客户端扩展功能(对于Windows NT 4.0,您还需安装 Service Pack 6a)。如需获取更多关于Active Directory客户端扩展功能的信息,请访问以下页面: Active Directory Client Extensions:.

是否能够通过某种方式预先确定一个脚本能否在我的计算机上运行?

目前还无法实现,但我们正在着手进行这项工作。在不久的将来,我们将对脚本中心进行更新,并通过某种方式来指示特定脚本能够在哪些系统平台上运行。

我正在尝试编写一个脚本,但它却无法正常工作。请问这时应如何是好?

在不清楚您所使用的Windows操作系统版本且尚未看到实际脚本代码之前,这个问题几乎根本无法回答。如果您正在面对脚本无法正常工作的困难,请在最新增加的microsoft.public.windows.scripting_admin新闻组中提出相应问题。同直接与我们进行联系相比,对您而言,从新闻组中获得答案将更加方便实际。

我需要一个用以对网络进行管理的脚本。您的技术人员能否为我编写这个脚本呢?

不能。在您提出这项要求时,我们既无法对您的情况进行调查了解,也无法为您编写相关学术论文。无论如何,我们并非专业脚本开发人员,我们所从事的工作只涉及教育行业。如果您希望寻找能够为您编写脚本的技术人员,请在新增的microsoft.public.windows.scripting_admin新闻组中发出询问信息,并等待是否有人应征。

返回页首返回页首

示例脚本

这些脚本看起来不错。我如何使其发挥作用呢?

以下为您介绍了运行这些脚本的最简单方式:

1.

将脚本代码粘贴到记事本程序中。

2.

在记事本程序中,使用.VBS文件扩展名存储相应文件(例如:MySc ript.vbs)。强烈建议您不要在文件名中包含空格。同时,建议您在一个公共文件夹(例如:C:\Scripts)中保存这些脚本。

3.

打开命令行窗口。如果需要,使用cd命令切换到用以存储脚本的文件夹中。

4.

在命令行窗口中,输入csript命令并在其后跟随脚本名称。例如:

cscript myscript.vbs

这里的确提供了许多脚本。我能否通过CD或其它形式获取它们呢?

不能。但实际情况是,您根本无需通过CD形式获取它们。相反,您可以在一个足以拷贝到一张软盘且仍能剩余大量空间的帮助文件中下载这些脚本。如需下载这个帮助文件,请访问:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=B4CB2678-DAFB-4E30-B2DA-B8814FE2DA5A.

为何所有示例脚本均以VBScript形式编写?

这些示例脚本全部是从系统管理脚本编程指南一书(一本专门教授系统管理员如何编写脚本程序的新书)中提取出来的。出于教学目的,我们在全书中使用了一种单一脚本编程语言。之所以选择VBScript,一方面原因在于我们认为对于初学者而言,这种语言比较易于掌握,另一方面则是因为与Windows系统平台上的Rexx或Python脚本语言相比,VBScript更加具备普遍性。

VBScript团队每年支付给我们数百万美元,以确保我们使用他们而非其它厂商的产品。嘿,开发Python的家伙们,你们听到了吗?

你们是否将会根据自身喜好使用诸如.NET、JScript、Perl、Python或Rexx之类的脚本编程语言来创建对等版本的脚本程序?

很抱歉,我们不会这样做。(仅仅开发VBScript版本的工作就已经让我们忙得不可开交了。)然而,我们已经联系到了一些表示有兴趣将某些脚本移植为其它不同语言的志愿者。如果这件事情能够如愿的话,我们将张贴他们的链接地址。

你们已经提供了一些非常实用的脚本,例如告诉我本地计算机上正在运行哪些服务。我能否进一步修改这些脚本,以便使其能够告诉我某台远程计算机上正在运行哪些服务?

您当然可以这样做。脚本中心所提供的大多数WMI脚本均创建了一个称作strComputer的变量,并将该变量取值设置为“.”。因此,脚本程序中通常包含以下一行代码:

strComputer = "."

这行代码导致脚本程序针对本地计算机运行。之所以产生这种结果,主要是由脚本构成方式所造成的,在执行过程中,WMI将以“.”表示的计算机名称视为本地计算机。如果您希望针对远程计算机运行这些脚本,只需将“.”替换为由双引号括起的远程计算机名称即可。举例来说,以下所列出的这行代码将导致脚本程序针对名为PrintServer1的远程计算机加以运行:

strComputer = "PrintServer1"

以上便是针对远程计算机运行WMI脚本时所需进行的唯一修改操作。尽管如此,您仍需牢记,为确保这些脚本成功运行,您必须在远程计算机上拥有适当的管理权限。此外,您还必须同时在本地计算机和远程计算机上安装WMI。

我创建了一些非常酷的脚本,我相信人们一定对它们非常感兴趣。那么,我能否将它们放到脚本中心上呢?

或许可以。我们正在开发一套系统,这套系统将允许用户上载自己的得意之作。然而,我们尚不知道这套系统何时--甚至能否--投入使用,我们目前仍在就技术细节进行研究,但尚未涉及到与法律责任、测试工作等环节有关的细节问题。在此期间,如果您手中拥有希望发布的脚本,请将其绑定到.ZIP文件中,并发送到以下电子邮件地址:scripter@microsoft.com。我们将在时间允许的情况下查看这些脚本。(您需要注意的是,仅仅通过以.VBS文件作为附件的邮件形式向我们发送脚本将没有任何意义。我们的邮件服务器会将其视为病毒予以自动删除。)

请问你们所提供的脚本在哪里?[用以插入特定任务的脚本:如创建组织单元、在客户端计算机上配置IP地址、向组中添加用户等等。]

这些脚本中的许多成员目前尚未准备就绪,但其即将创建完成。脚本中心最初是由从系统管理脚本编程指南中提取的脚本程序组合而成的。脚本编程指南目前正处于编写过程中,我们仍在编写其中部分章节,而有些章节则尚未动笔。随着相关章节--以及伴随这些章节所提供的脚本--相继编写完成,我们将不断向脚本中心添加新的脚本程序。我们认为,尽管从某种意义上说,脚本中心目前尚不完整,但与继续等待6个月时间并凑足所有600个脚本相比,像现在这样先期提供约400个脚本的方式将更为合理。

请问你们所提供的用以实现管理任务的脚本在哪里?[例如用以插入特定技术:如Exchange、SQL Server、IIS等。]

我们的书籍是围绕基本Windows操作系统管理任务编写的,因此,我们并未对诸如Exchange或IIS之类的技术进行处理。这的确是个坏消息。然而,好消息是我们正在与负责其它技术的团队进行沟通,而这些团队也非常愿意将他们手中的脚本添加到脚本中心内(从而使脚本中心成为您获取各种系统管理脚本的“一站式”信息源)。

嗨,我曾经写信给你们的技术人员并询问一个关于登录脚本的问题,但我一直没有得到回音。

这是因为我们并不喜欢您。

不,请等一下,这仅仅是个玩笑,我们对任何人都不抱有成见!(是的,我们的确不太喜欢内布拉斯加州奥马哈市的一个家伙。)我们将尽力回复尽可能多的邮件,但有许多原因导致我们可能无法回复您的来信。

我们每天都会收到数量惊人的邮件,其中许多邮件都会石沉大海。

尽管我们尽力回复尽可能多的邮件,然而,我们毕竟不是技术支持人员,我们的真正职责并非回复电子邮件。我们的主要工作任务是编写一本关于系统管理脚本编程技术的书籍,当管理者看到我们从事与此书无关的工作时,他们将表示出极为不满的情绪。(尽管当他们看到我们正在编写的内容时会感到更加不满。)

有些情况下(叹息!),我们并不知道应如何回答您的问题。

真实情况是,如果您拥有关于系统管理脚本编程指南的问题或意见,请发送电子邮件至scripter@microsoft.com,我们将很有可能对您予以回复。如果您的问题涉及常规脚本编程技术(例如如何编写登录脚本、如何通过脚本方式停止某种服务等等),您最好在新增microsoft.public.windows.scripting_admin新闻组中张贴相应问题。

这些脚本真的不错,我希望立即开始使用它们来管理我的所有计算机,请问在这之前还有什么问题需要解决吗?

没有了。只要别忘记当您每次在生产环境中运行我们的脚本时寄给我们一美元作为报酬就可以了。

别误会,只是开个玩笑,使用这些脚本无需支付任何费用。您完全可以放心的使用这些脚本来完成实际系统管理任务。您只需记住,这些脚本是为教学目的而创建的,因此,我们在设计过程中所关注的主要是是否清晰易懂,而非性能,这些脚本中并未包含实际生产环境中所需提供的某些特性(如错误处理能力)。另外,还请记住,我们对这些脚本能否正常工作不做任何担保,并且不提供任何形式的官方技术支持:如果您无法促使这些脚本正常工作,我们不会亲自前往您的办公室并针对您的实际情况对其进行修复。

当然,除非您的办公地点位于塔希提岛或其它类似的度假胜地……

返回页首返回页首

系统管理脚本编程指南

何谓系统管理脚本编程指南?

系统管理脚本编程指南是一本即将随Windows .NET Server资源工具包一同发布的新书。此书旨在教授系统管理员如何使用脚本编程技术对运行Windows操作系统的计算机进行管理。

我仍在使用Windows 2000。是否会有一个专门针对Windows 2000的脚本编程指南版本?

当然会有,您难道真的认为我们会忘记Windows 2000用户吗?实际上,我们的确忘记了您,但我们始终铭记必须为脚本编程指南创建一个专门适用于Windows 2000的微缩版本。

Windows Server 2003 脚本编程指南将于什么时候发布

信不信由你,我们还不知道,但是我们希望年底前可以发布

那么,针对Windows 98或Windows NT 4.0的脚本编程指南版本情况如何呢?

天啊,真不知道你们这些家伙什么时候才能满意?我们将不再提供针对Windows 98或Windows NT 4.0的版本。很抱歉,但我们必须为自己确定一道界限。

您能否将脚本编程指南发送给我一份?

很抱歉,不能。首先,脚本编程指南目前尚未完成,该书仍处于编写过程中。另外,脚本编程指南将以传统图书形式进行销售,您可以从书店中买到。毕竟,我们都要养家糊口吗!

免费声明

以上示例脚本不会获得由任何Microsoft标准支持计划或服务项目所提供的支持。这些示例脚本在提交时并未附带任何形式的保证承诺。不仅如此,Microsoft公司还不加限定条件地针对所有默许保证责任加以进一步否认,这其中便包括出于特定目的而针对适销性或适用性所承担的默许保证责任。因使用或执行上述示例脚本及文档资料而导致的全部风险均由读者自行承担。在任何情况下,Microsoft公司及其创作人员、亦或与上述脚本的创意、编制及提交有关的任何人员均无须针对因使用或无法使用上述示例脚本或文档资料所导致的任何损害(其中包括,企业利润损失、经营中断、业务信息丢失及其它经济损失)承担责任;即使Microsoft公司已被告知造成这种损害可能性,上述免责条款依然适用。


返回页首返回页首