ADSI Scriptomatic

转自http://www.microsoft.com/china/technet/community/scriptcenter/tools/admatic.mspx

经过一番长期而艰辛的等待:终于可以像行家里手一样编写 ADSI 脚本!

也许成为 Scripting Guy 最大的收获在于有机会阅读来自我们的读者的电子邮件。例如,当我们发布了原版的 Scriptomatic,这个为您编写 WMI 脚本的难以置信的小实用程序之后,我们收到成百上千类似于下面这样的消息:

亲爱的 Scripting Guy:Scriptomatic 太强大了!!!它不能为你们编写 ADSI 脚本实在太遗憾了。

亲爱的 Scripting Guy:当我阅读 Scriptomatic 附带的帮助文件时,我想我简直要笑得背气。它太有趣了,弥补了 Scriptomatic 不能为你们编写 ADSI 脚本这一不足。

亲爱的 Scripting Guy:上个月我舒舒服服地呆在家里每周只工作几小时就挣了 25,000 美元。现在我愿意向你们展示可以如何做到这些。另外,你们没有发现 Scriptomatic 不能为你们编写 ADSI 脚本吗?

现在,每当读到这些电子邮件,我们的第一个反应就是,你们这些无赖,真不领情 —— 我们无偿地给了你们一些,你们却胆敢想获取更多?为什么?难道这是我们应该做的吗?但是稍稍冷静下来,擦干眼泪之后,我们意识到我们应该预料到这样一个后果。毕竟,为什么 Scriptomatic 一下子就如此受到欢迎?诚然,WMI 被看作是复杂的技术,更适合于拥有计算机科学学位的人,而不适合脚本语言的新手。Scriptomatic 的成功不仅在于它为您编写 WMI 脚本,更在于它向您展示了 WMI 脚本并非那样难写;它们大多终究遵循一致的模式。Scriptomatic 是克服您自身不足的一个捷径,可以帮助您进入 WMI 的殿堂。

用于 Active Directory 的脚本技术 ADSI (Active Directory Service Interfaces) 又如何呢?同样地,从感觉上讲 ADSI 很难,对于系统管理员或刚接触脚本的人来说太难了。要编写 ADSI 脚本,您必须得是一个天才(嘿,就像 Scripting Guy!)当然,很多人认为,我知道 ADSI 可促成我实现许多很酷的东西。但对于一个像一样从没接触过 ADSI 的人来说如何办到呢?毋庸置疑,人们期待着 ADSI Scriptomatic,当他们没有得到的时候难免有些失望。

当然,事实在于,ADSI 并非都那样难,而 Scripting Guy 也并非都很聪明(如果我们的确是,我们将为此得到酬劳)。但是,就像 WMI,人们认为 ADSI 对于他们来说太难了,他们甚至不做任何尝试。和 WMI 一样,人们需要有个东西帮助他们克服初始的障碍,帮助他们入门。和 WMI 一样,人们需要 Scriptomatic。

好了,现在可以放心地说:您说了算,由 Scripting Guy 倾听。其结果是,我们搁置下了所有其他的项目和任务,在过去的 6 个月里日以继夜地工作,然而,我们没有创造出 ADSI Scriptomatic。但是几天前,噢,耶,我们记起了那 ADSI 的事,于是我们立即拼凑出一些东西给您。于是无需更多等待,此时此地,千呼万唤期待已久的 ADSI Scriptomatic,为您编写 ADSI 脚本的惊人新作闪亮登场!(如果有人发电子邮件向我们抱怨它不能帮助您编写 WMI 脚本。)

*
本页内容
那么什么是 ADSI Scriptomatic?那么什么是 ADSI Scriptomatic?
我该如何使用 ADSI Scriptomatic?我该如何使用 ADSI Scriptomatic?
然而然而
那样很酷,但是难道你就不能在 Scriptomatic 中包含某种 Active Directory 浏览器吗?那样很酷,但是难道你就不能在 Scriptomatic 中包含某种 Active Directory 浏览器吗?
嘿,这个浏览器似乎很酷;能给我一个副本吗?嘿,这个浏览器似乎很酷;能给我一个副本吗?
将 ADSI Scriptomatic 和 WMI Scriptomatic 相结合难道不是更好些?将 ADSI Scriptomatic 和 WMI Scriptomatic 相结合难道不是更好些?
你们敢说 Xbox 是所开发的最好的视频游戏控制台,并且没有哪个家庭离得了它吗?你们敢说 Xbox 是所开发的最好的视频游戏控制台,并且没有哪个家庭离得了它吗?
如果还有关于 ADSI Scriptomatic 的问题该怎么办?我该联系谁呢?如果还有关于 ADSI Scriptomatic 的问题该怎么办?我该联系谁呢?

那么什么是 ADSI Scriptomatic?

单击此处来下载 ADSI Scriptomatic

嗯,您是否注意到,ADSI Scriptomatic ——— 正如我们一直告诉您的 ——— 是设计用来帮助您编写 ADSI 脚本的;即,用于管理Active Directory的脚本。好像这还不够(我们也历经艰难终于明白了永远都不能满足),ADSI Scriptomatic 同样教会了我们有关 ADSI Scriptomatic 的重要一点:和 WMI 一样,有一些 ADSI 脚本的一致模式。例如,ADSI Scriptomatic 能帮您编写用于删除用户帐号的脚本。它也能帮助您编写用于删除组和组织单位的脚本。如果您细看用于删除不同对象的脚本,您将发现一些有趣的东西:它们实际是一样的!这可以说是偷窃吗?

嗯,也许吧。但是脚本之间如此相似的原因在于 ADSI 对删除对象采取了同样的方法,不论被删除的对象是何类型。这意味着什么呢?嗯,如果您花时间研究一下 ADSI Scriptomatic 创建的脚本(同时如果您阅读了Windows 2000 Scripting GuideADSI chapter 一章),您将了解到如何从 Active Directory 下删除相当多的任何东西。例如,我们想要使 ADSI Scriptomatic 相对简单;于是,我们限制了您可使用的对象。ADSI Scriptomatic 会编写删除一个用户帐户的脚本,但是无法编写删除发布的打印机的脚本。但是,嘿,那又怎样?您了解了这一模式后,您可以自己自己编写删除发布的打印机的脚本。(好了,好了,我们将考虑创建 DeletePublishedPrintersOmatic。但是切记要摒住呼吸。)

但是不要完全听信我们的一家之言:请自己体会。下面有一段脚本 —— 由 ADSI Scriptomatic 生成 ——— 用于删除用户帐号:

strContainer = ""
strName = "EzAdUser"
'***********************************************
'*         连接到容器              *
'***********************************************
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objContainer = GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))
Else
  Set objContainer = GetObject("LDAP://" & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If
'***********************************************
'*       结束连接到容器             *
'***********************************************
objContainer.Delete "user", "cn=" & strName

And heres a script that deletes a group:

strContainer = ""
strName = "EzAdGroup"
'***********************************************
'*         连接到容器              *
'***********************************************
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objContainer = GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))
Else
  Set objContainer = GetObject("LDAP://" & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If
'***********************************************
'*       结束连接到容器             *
'***********************************************
objContainer.Delete "group", "cn=" & strName

这两段脚本的区别是什么?仅在于由黑体字列出的这两项:

组的名称 (EzAdGroup)、以及与之相对的用户的名字 (EzAdUser)。

所删除对象的类型(组和用户)。

这就是所有的区别。

但是打住,Scripting Guy,屏气冥想。您曾说过我们能够看看这两段脚本,然后自己编写删除已发布的打印机的脚本。那我们如何做到这些?来吧,坐下,深呼吸,别惊慌。我们假定您的打印机的名称为 EzAdPrinter,被删除的对象类型为 printQueue 对象。在接下来的五分钟左右的时间里,看看您是否能编写删除 EzAdPrinter 的脚本。别担心,我们慢慢等着您。

好,时间到。您的脚本是这样的吗:

strContainer = ""
strName = "EzAdPrinter"
'***********************************************
'*         连接到容器              *
'***********************************************
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objContainer = GetObject("LDAP://" & _
    objRootDSE.Get("defaultNamingContext"))
Else
  Set objContainer = GetObject("LDAP://" & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If
'***********************************************
'*       结束连接容器             *
'***********************************************
objContainer.Delete "printQueue", "cn=" & strName

如果是这样写的,您就已经基本掌握了 ADSI 背后的基本模式,除非您作弊了,偷看了结果。不过没关系;毕竟,Scriptomatic 不是一个大的作弊工具又是什么呢?关键之处在于,您所需的仅仅是删除发布的打印机的脚本。至于是谁写的并不重要,是这样吗?使用 Scriptomatic 帮助您入门吧,自由地按您的方式对基本的脚本进行修饰。

仍然不相信 ADSI Scriptomatic 是人类历史上最伟大的技术创新?听着,别只听信我们的一家之言,自己去体会。例如,让我们将 ADSI Scriptomatic 与 Xbox 视频游戏控制台进行比较:

功能ADSI ScriptomaticXbox

创建可修改 Active Directory 里对象属性的脚本

创建可用于删除 Active Directory 里对象的脚本

创建可用于读出 Active Directory 里对象属性的脚本

创建可在 Active Directory 里创建新对象的脚本

支持在 Internet 上使用 Xbox 现场播放视频游戏

支持播放 Halo 和 Mech Assault

是 *

由为您带来原版Scriptomatic的同样一批人创建

是 *

是免费的

想得美

*当我们说时,我们的实际意思是

事实胜于雄辩:ADSI Scriptomatic 是个彻底的赢家。下载个 ADSI Scriptomatic 吧,永远告别你的 Xbox!

重要说明Scripting Guy 刚刚想起。Microsoft,这个付给我们支票的公司,同样生产 Xbox。请不要把 Xbox 扔一边;Xbox 是全世界最好的视频游戏播放器。事实上,既然您无需费这个钱去雇佣一个 ADSI 脚本编写人员而可以自己写,您就可用这笔钱去买 2 或 3 个 Xbox。

当然,前提是您有一个 Gamecube 或 PlayStation。

我该如何使用 ADSI Scriptomatic?

就像它的堂兄,原版的 Scriptomatic,ADSI Scriptomatic 是 HTA,超文本应用程序。这意味着 ADSI Scriptomatic 仅仅是一个可作为独立应用程序运行的 Web 页(看一下它的代码;全部都是 VBScript 和 HTML 以及其他用于创建 Web 页的东西)。要启动 ADSI Scriptomatic,只需双击 EzAdScriptomatic.hta。当您这样操作之后,一些非常类似于这样的东西将会出现在屏幕上:

现在,屏幕上的确已经显示了一些东西的这一事实使得 ADSI Scriptomatic 领先于当今市场上的其他软件。然而,ADSI Scriptomatic 所做的不只是占用监视器的空间。点击 选择任务下拉列表,ADSI Scriptomatic 将显示您能用 ADSI 实现的四个主要任务:

创建对象

向对象中写入

读出对象属性

删除对象

选择一项任务之后,从选择类下了列表中选择以下选项之一:

用户

计算机

联系

组织单位

一旦您做出了选择,ADSI Scriptomatic将立即为您编写脚本。例如,如果您选择了创建对象计算机,您的屏幕将呈现:

就这样,您得到了创建计算机帐户的脚本。(现在,如果我们能够仅仅通过修改它来创建银行帐户,我们的路子就走对了。)您可运行此脚本(只需单击运行按钮),保存该脚本作为后用(只需单击保存按钮),或随心所欲进行修改(您可以编辑此脚本,就像您完全自己输入一样)。让我们看看 Xbox 如何来做这些

重要说明 我们刚刚想起,如果客户要求允许的话,Xbox可以保存脚本留作后用。

然而

在谈到计算机问题的时候,总是存在一个但是,不是吗?不过别担心;这个但是并非可怕之至。(与通常的软件申明不一样,通常的软件申明说,如果您使用此软件,不但它无法运行,您也违反了专利使用权转让协定。)您只需了解原版的、WMI Scriptomatic 和全新的、酷毙的 ADSI Scriptomatic 之间的区别。

原版的 Scriptomatic 是设计用来作为教育工具的:我们想演示一个几乎可以用于任何检索关于 某些东西(假定是一台打印机、一个事件的日志、一项服务或任何其他的东西)的信息的 WMI 脚本。然而,在我们创建了 Scriptomatic 之后,我们无意中创建了一个有用的系统管理工具(我们还意识到我们无意中创建了两个人类克隆,但是我们的律师建议我们保持缄默)。您使用 Scriptomatic 创建的脚本完全可以用于检索本地计算机中的信息。为什么呢?嗯,正如我们的两个克隆人指出,如果您将计算机名设置为点 (.),则 WMI 会从本地机器上检索信息。因此我们无需担忧计算机名中的硬复制;我们只需将 Scriptomatic 设置成使用点作为默认计算机名。这意味着由 Scriptomatic 创建的每一个脚本都可以运行;正如您所猜测的,这就是为什么我们添加了一个运行按钮。

ADSI Scriptomatic 同样有一个运行按钮。然而,没有明显的用于 ADSI 的默认名(即,没有像点这样的计算机名)。为什么没有呢?好,考虑一下创建新用户帐号的脚本。是的,我们能硬复制一个默认用户名(于是我们做到了:EzAdUser),但是这并不一定意味着此脚本可以运行了。是的,您可以运行一次此脚本,于是在您的域名中便创建了一个新的叫做EzAdUser的用户帐号。但是如果您试图运行第二次会怎样呢?如果您这么做,将会失败,不是因为您破坏了 ADSI 或 Scriptomatic,而只是因为名为 EzAdUser 的用户已经存在,Active Directory 不允许同一域名中有两个相同的帐号。

这样是否意味着如果您使用了一次 ADSI Scriptomatic 并创建了名为 EzAdUser 的用户帐号,您就必须得抛开 Scriptomatic 了吗?我们承认,这将成为使用软件有趣的新方法:使用一次,接着抛弃再买个新的副本。但是您不是非得这样。相反地,您只需在运行之前编辑脚本。当创建了一个用户帐号,您只需改变帐号名,并且除非您希望用户帐号储存在域名根目录下,否则改变将要创建的帐号的 Active Directory 容器。

您说这太难了是什么意思?您无法记住这样两件小事情吗?好了,我们知道您会这么说,所以我们向 ADSI Scriptomatic 增加了个小功能:在线帮助。当您创建用户帐号的时候如果您仔细观察屏幕,您应该看见一个小的超链接,写着运行创建对象 —— 用户脚本之前阅读这里 —— 用户脚本

如果您点击此超链接会产生什么?将弹出一个小小的提醒,告诉您将 Scriptomatic 脚本转变成可以运行的工作脚本所需做的具体内容:

看到了吧,没这么糟糕,是吗?并且您不能从其他的东西(例如视屏游戏控制台)中获得关于创建用户帐号的在线帮助。

那样很酷,但是难道你就不能在 Scriptomatic 中包含某种 Active Directory 浏览器吗?

是的,我们可以,其雏形是:当您启动 Scriptomatic 时,它就去检索所需的目录信息。然而,这将产生两个问题。第一,在一个大的网络中(例如 Microsoft),在 Scriptomatic 可以使用前要费一些时间。我们不喜欢那样;毕竟,原版的 Scriptomatic 的优势之一在于它非常快(并且,顺便提一句,即将发布的 Scriptomatic 2.0 将更快)。

第二,该版本的 Scriptomatic 要求您连接在网络中,以 Active Directory 管理员帐号登录。如果您只是上班时使用 Scriptomatic,这就不是问题,但是如果您想要从家里或乘公车时使用 Scriptomatic 该怎么办呢?如果您的家就一部汽车又该怎么办呢?无需多言,在这些情况下都不太能行得通。因此,我们决定删除 Active Directory 的依赖性,使 ADSI Scriptomatic 成为可以随时随地运行的实用程序。(并且,我们会指出,您无需像使用视频游戏控制台那样将其连接到 TV 上。)

注意:我们说随时随地的意思是什么?嗯,如果您的计算机上安装了 Internet Explorer 5.0 或更高版本,Scriptomatic 应该可以工作,或至少您能够开启它并创建脚本。要想实际运行脚本,您需要在计算机上安装 ADSI。如果您运行的是 Windows2000 或更高版本,您的计算机中已经有了 ADSI 了。如果您运行的是 Windows 98 或 Windows NT 4.0,您可能需要下载 Directory Service Client Extensions。详细信息请参阅 Script Center FAQ。

嘿,这个浏览器似乎很酷;能给我一个副本吗?

嗯,我们从没有遇到过有谁想要 Active Directory 浏览器的情况。它某种便捷的小工具,具教育性;毕竟,它告诉了你如何使用 VBScript 和 ADSI 访问 Active Directory 中的所有信息(另外,它告诉了你如何在 HTA 中显示该信息)。想说的是,如果您有兴趣获得 Active Directory 浏览器(它很可能只是一个浏览器;我们不愿向其添加脚本编写功能),请发邮件至 scripter@microsoft.com。如果有足够多的人都感兴趣,我们将考虑如何处理这些代码,对其进行注释并公之于众。

将 ADSI Scriptomatic 和 WMI Scriptomatic 相结合难道不是更好些?

事实上,我们曾慎重考虑过这个问题,但最终决定将 ADSI Scriptomatic 和 WMI Scriptomatic 分开。有关 Scriptomatics 值得一提的是它们在概念上都很简单(它们只做一件事)并且使用简单。和 HTA 一样,它们也具有教育性:您可用记事本打开 Scriptomatics,并检查——甚至修改——代码。如果我们将这两个 Scriptomatics 合并到一个实用程序中,这个工具使用起来并不简单,而且可能把HTA边界能推多远推多远。Scriptomatics 似乎与大而复杂无缘。

此外,我们也在对付其他没有完成的实用程序。我们不打算等他们完成,然后与 ADSI Scriptomatic 相结合。我们决定立即发布 ADSI Scriptomatic。现在,当我们完成了这些其他的实用程序,我们有可能创建无所不能的脚本书写程序吗?也许;这正在考虑中。不过我们要确保今后拿出的工具将总是作为独立的实用程序存在,同时也可以嵌入到这个无所不能的脚本书写程序中。

这些其他的实用程序是什么?嗯,它们包括以下这些:

Scriptomatic 2.0,允许您将脚本输出保存为文本文件或 Excel 电子数据表;允许您将输出显示在 Web 页;甚至允许您用 Jscript、Perl 或 Python 写脚本。

Comparomatic,一个为管理运行多个 Windows 版本(Windows 98、Windows 2000、Windows XP 等等)的计算机的人士所设计的 WMI 小实用程序。

Logonomatic,编写登录上网脚本的游戏工具。

Eventomatic,帮助您编写用于监测计算机中的 WMI 事件的脚本。

我们还不知道这些什么时候完成。但是 Scriptomatic 2.0 和 Comparomatic 即将面世。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值