您好,AM。不,没有任何借口:昨天,海鹰队有很多机会从超级投球赛胜出,但是他们没能把握住机会。有时,看起来他们比赛是为了不输,而不是要赢,但这种打法总是后患无穷。唉,这就是事物发展的规律。
当然,想想官员们千里迢迢而来,您可能会认为他们应该对观看比赛会很有兴致。但是,显然不是这样。难道是因为马特哈塞尔贝克在阻挡进攻时被判违规?好的...。
不,这不是理由:这仅仅是一个...事实...。
不过,过去的总归是过去了,何况,这里应该是脚本编写专栏,而不是运动专栏。明确这一点后,我们如何能测试是否存在主目录,并在必要时为用户分配新的主目录和主驱动器?嗯,下面的代码可以达到此目的:
On Error Resume Next
Set objUser = GetObject("LDAP://cn=Ken Myer, ou=Finance, dc=fabrikam, dc=com")
If IsEmpty(objUser.homeDirectory) or IsNull(objUser.homeDirectory) Then
strUser = objUser.sAMAccountName
strHomeDirectory = "//atl-dc-01/users/" & strUser
objUser.homeDirectory = strHomeDirectory
objUser.homeDrive = "Z:"
objUser.SetInfo
End If
该脚本首先绑定 Active Directory 中的 Ken Myer 用户帐户。接下来是下面这行代码:
If IsEmpty(objUser.homeDirectory) or IsNull(objUser.homeDirectory) Then
您可能知道,Active Directory 脚本编写有时会比较复杂。假设您查看 Active Directory 用户和计算机中的用户帐户并发现主目录框为空。在这种情况下,您最先想到的可能是,“哦,估计该用户不具有主目录”。您可能是正确的。
然而,如果对此相同的帐户运行脚本,您必须考虑两点:主目录框为空是因为此属性为 Null(即,未对其赋值),还是因为此属性为空(可能因为其他管理员运行脚本将该值设置为一个空字符串)?
是的,我们知道:空属性和 Null 属性好像没什么两样。然而,不管怎样,它们是不一样的。从技术上讲,空属性实际上具有值:只是它的值为空罢了。然而,对于 Null 属性,我们是说我们不知道此属性是否具有值。这确实令人困惑,不过这是个很重要的区别。如果 homeDirectory 属性为空,意味着没有为该用户分配主目录。然而,在这种情况下,下面的测试将返回 False,因此诱使我们认为此用户确实具有主目录。
IsNull(objUser.homeDirectory)
为什么会返回 False?哈哈,因为此属性不是 Null,而是空。不管怎样,确实有区别
没错:当您的脑袋停止发晕时请告诉我们,然后我们再继续。
好点了吗?老实说,这不值得担心,至少现在是这样。相反,为谨慎起见,按照我们的套路来做:查看该属性值为空还是 Null。可在 If-Then 语句中使用 IsEmpty 和 IsNull 函数来达到此目的:
If IsEmpty(objUser.homeDirectory) or IsNull(objUser.homeDirectory) Then
通过这种方法可以将全部情况都包括在内。
那么,假定此用户不具有主目录;然后怎样呢?然后,我们执行以下代码块:
strUser = objUser.sAMAccountName
strHomeDirectory = "//atl-dc-01/users/" & strUser
objUser.homeDirectory = strHomeDirectory
objUser.homeDrive = "Z:"
objUser.SetInfo
通常,主目录以用户来命名。(并非必须如此,但这是许多组织所采用的标准方法。)因为我们太懒而没有给出我们自己的标准,因此我们将使用相同的方法;这意味着我们将把主目录 //atl-dc-01/users/logonname 分配给用户,其中 logonname 代表用户的登录名 (sAMAccountName)。是的,我们可以将此名称硬编码到脚本中。然而,我们决定使之更有创意,让脚本为我们创建主目录名。
为此,首先我们将用户的 sAMAccountName(例如,kenmyer)值赋给 strUser 变量。然后,我们使用下面这行代码构建此目录的 UNC 路径:
strHomeDirectory = "//atl-dc-01/users/" & strUser
如果用户的 sAMAccountName 确实是 kenmyer,则生成的路径(即分配给变量 strHomeDirectory 的值)将是:
//atl-dc-01/users/kenmyer
获得完整的路径之后,可以设置 homeDirectory 属性的值;然后我们可以随便将 homeDrive 属性的值设为 Z:。(对,您必须在驱动器盘符后面使用冒号。)完成所有以上操作之后,我们可以调用 SetInfo 将更改写回用户帐户。无论如何,都不要忽视调用 SetInfo:如果没有调用,您的更改将不会应用于 Active Directory。这就意味着该用户仍然不具有主驱动器和目录。
难道我们真的永远不谈论体坛消息了吗?当然不是:毕竟,超级投球赛事的结束不过意味着棒球赛季就在眼前。今年我们认为我们钟爱的西雅图水手队将 -
仔细想想,我们将再回来与您讨论有关这些体坛消息...。