您好,脚本专家!

您好,脚本专家!

欢迎来到本 TechNet 专栏,在这里,Microsoft 脚本专家将为您解答与系统管理脚本编写有关的各种常见问题。如果遇到系统管理脚本编写方面的问题,请将电子邮件发送到 scripter@microsoft.com。我们不能保证回答收到的所有问题,但是我们将尽最大的努力。

同时,不要忘了查看您好,脚本专家!存档

今日问题:如何查看是否为某个用户设置了主驱动器和主目录,如果未设置,如何为其分配一个新的?


如何为没有主驱动器的用户分配新的主驱动器?

问:

您好,脚本专家!如何查看是否为某个用户设置了主驱动器和主目录,如果未设置,如何为其分配一个新的?

-- AM

答:

您好,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 语句中使用 IsEmptyIsNull 函数来达到此目的:

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。这就意味着该用户仍然不具有主驱动器和目录。

难道我们真的永远不谈论体坛消息了吗?当然不是:毕竟,超级投球赛事的结束不过意味着棒球赛季就在眼前。今年我们认为我们钟爱的西雅图水手队将 -

仔细想想,我们将再回来与您讨论有关这些体坛消息...。


更多信息

欢迎访问您好,脚本专家!- 存档

返回页首返回页首