您好,AC。你知道,人们在 Microsoft 工作时,会自然而然地以为自己是在象牙塔中度日,完全不需要日常活动和系统管理员。说老实话,事实不是这样:我们的塔可比象牙塔更结实、更坚固。
哦,Dean 的办公室除外。
至于完全不需要日常活动和系统管理员,嗯,这可能还有点真实成分在内。例如,脚本专家会花费大量时间编写脚本,回答有关脚本的问题,但是我们很少发现自己能坐下来编写在实际工作中使用的脚本。这未必是好事。不过,它却是科技写作工作的本质。正应了那句老话,不能者(或至少不为者)教人。
然而,我们常常确实被要求编写真正的脚本。就在一、两周前,就发生了这样一件偶然的事情,凑巧的是,我们被问及是否能做到与您现在正在询问的相同的事情:确定登录用户的 ADsPath。事实证明,我们能做到,并且为此很快整理出了一个脚本。现在我们就公开这个秘密。
让我们首先为您展示如何在一个过去使用的纯 VBScript 脚本中去实现,然后为您展示在 HTA 中嵌入代码的简单方法。下面的脚本将返回登录用户的 ADsPath:
On Error Resume Next
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
Wscript.Echo objUser.AdsPath
|
注意:当然,该脚本的确相当简单。但别忘了,我们可没说在这个实际脚本上下了大功夫,我们只是说我们真正为一个实际脚本做了一些工作。 |
该脚本首先创建 ADSystemInfo 对象实例:
Set objSysInfo = CreateObject("ADSystemInfo")
顺便说一句,这是一个非常有用的对象,它可以返回有关登录用户和本地计算机的各种信息。(您可以看一下此脚本,以便对能使用 ADSystemInfo 返回的信息有所了解。)此脚本的一个缺点是它只能在本地创建:您无法在远程计算机上创建 ADSystemInfo 实例,然后获得在此计算机上登录的用户的信息。是的,要是能这样的话可就酷极了。但是,这却无法实现。
ADSystemInfo 返回的信息中有一项是 UserName。UserName 实际上是登录用户用于和其他用户区别的名称;类似于:
CN=Ken Myer,OU=Finance,dc=fabrikam,dc=com
至此,我们自己便可以真正构造 ADsPath;毕竟,ADsPath 是简单的 LDAP:提供程序加上用于和其他用户区别的名称:
LDAP://CN=Ken Myer,OU=Finance,dc=fabrikam,dc=com
但是,我们想为您展示一种使用 ADSystemInfo 的更通用的方法,因此,我们决定继续进行,使用下面两行代码绑定到 Ken Myer 用户帐户:
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
正如您所看到的,我们所做的一切就是获取 UserName 属性值,将其存储在名为 strUser 的变量中,然后在将我们绑定到此用户帐户的 GetObject 调用过程中使用该变量。
此后我们只需回显 ADsPath 属性的值;于是,看到我们连接到 Ken Myer 用户帐户时,我们就能轻松地回显 Ken 的帐户属性的任何(或全部)值。
这确实很容易,不是吗?
现在,在 HTA 中使用这行代码又怎样呢?正好,这里有一个很简单的示例:
<html>
<head>
<title>ADSystemInfo Sample</title>
</head>
<SCRIPT LANGUAGE="VBScript">
Sub Window_OnLoad
On Error Resume Next
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
DataArea.InnerHTML = objUser.AdsPath
End Sub
</SCRIPT>
<body>
<span id=DataArea></span>
</body>
</html>
此 HTA 仅包含一个元素:名为 DataArea 的 <span> 标记。HTA 启动时,运行名为 Window_Onload 的子例程。(每当启动或刷新 HTA 时,具有该名称的子例程就自动运行。)Window_Onload 子例程的代码看上去应该很熟悉:
On Error Resume Next
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
DataArea.InnerHTML = objUser.AdsPath
没错:它就是我们刚刚为您展示过的脚本,但是有一点不同:我们不是使用 Wscript.Echo 回显登录用户的 AdsPath,而是使用以下这行代码将 AdsPath 写入 <span> 标记:
DataArea.InnerHTML = objUser.AdsPath
现在,看看吧,这像是坐在象牙塔里的人能编写出来的那类脚本吗?
是的,既然您提到了……