你好,LD。啊,这勾起了我的回忆。有一段时间,好像我们在此专栏中回答的每个问题都是由两部分构成的问题:我们已经发现我们自己做事情的方式:向人们展示如何执行任务 1(检索用户的主目录),然后向他们展示如何将任务 1 与任务 2(将默认文件位置设置为该主目录)结合起来。这段时间,我们好像没有回答多少由两部分构成的问题,可能的原因是对我们来说做一件事情就已经足够困难了,更别提去做两件事情。但是,我们会看看我们可以做些什么,只是出于对过去时间的兴趣。
首先,我们假定您要在登录脚本中完成此操作。如果是这样,处理任务 1(检索用户的主目录)将非常简单:
On Error Resume Next
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
Wscript.Echo objUser.homeDirectory
正如您所看到的,我们首先创建 ADSystemInfo 对象的一个实例;这是一个可以返回许多有关已登录用户的属性的 ADSI 对象。(然而,不幸的是,只能在本地计算机上创建 ADSystemInfo 对象;这就是为什么将它作为登录脚本使用最好,因为它始终在本地运行。)从 ADSystemInfo 返回的属性之一为 UserName,它正是已登录用户的区分名。将如下所示:
CN=kenmyer, ou=Accounting, dc=fabrikam, dc=com
有必要获得该区分名并将其存储在名为 strUser 的变量中吗?的确如此;通过将区分名与 LDAP 提供程序一起使用,可以直接绑定到 Active Directory 中的用户帐户:
Set objUser = GetObject("LDAP://" & strUser)
现在我们要做的所有事情就是回显 homeDirectory 属性的值。
我们正开始回忆,为什么我们过去一直处理这些由两部分构成的问题:它们很简单。
任务 1 就是如此。现在,我们将它与任务 2(设置 Microsoft Word 的默认文件位置)放在一起,然后看看是否可以将其结合起来:
On Error Resume Next
Const wdDocumentsPath = 0
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
If IsNull(objUser.homeDirectory) OR objUser.homeDirectory = "" Then
Else
Set objWord = CreateObject("Word.Application")
Set objOptions = objWord.Options
objOptions.DefaultFilePath(wdDocumentsPath) = objUser.homeDirectory
objWord.Quit
End If
正如您所看到的,开头的几行代码与我们用于绑定到 Active Directory 中的用户帐户的代码几乎相同。仅增加了下面一行,此行代码定义一个名为 wdDocumentsPath 的常量:
Const wdDocumentsPath = 0
稍后,我们将使用此常量来指明要修改的文件位置(用户文档的位置)。
接下来,我们检索 homeDirectory 属性的值,并检查此值看它是否为 Null 或为空:
If IsNull(objUser.homeDirectory) OR objUser.homeDirectory = "" Then
为什么?如果用户没有主目录,我们将不能尝试将默认文件位置设置为不存在的文件夹。如果用户没有主目录,那么我们什么也不做;请注意,If-Then 语句后面紧跟着 Else 语句。
但是,如果用户确实有主目录,该怎么办?在该情况下,我们运行下列几行代码:
Set objWord = CreateObject("Word.Application")
Set objOptions = objWord.Options
objOptions.DefaultFilePath(wdDocumentsPath) = objUser.homeDirectory
objWord.Quit
正如您所看到的,我们创建 Word.Application 对象的一个实例,然后创建一个对 Options 对象的对象引用。请注意,我们不将 Microsoft Word 的 Visible 属性设置为 True。这是有意的:我们不想让 Word 出现在屏幕上。相反,我们想让我们所有的配置都出现在背景中。
然后,我们将用户的主目录赋予 DefaultFilePath 属性。因为 DefaultFilePath 可以引用多个文件路径(启动路径、模板路径、图片路径等等),所以我们传递变量 wdDocumentsPath;它告诉 Word 配置默认文档路径。您可能已经猜到,我们将默认文档路径的值设置为用户的主目录:
objOptions.DefaultFilePath(wdDocumentsPath) = objUser.homeDirectory
然后,我们调用 Quit 方法以终止我们的 Microsoft Word 实例,即告完成。
这确实很有趣,不是吗?请提醒我们多回答一些由两部分构成的问题。