
欢迎来到本 TechNet 专栏,在这里,Microsoft 脚本专家将为您解答与系统管理脚本编写有关的各种常见问题。遇到了系统管理脚本编写方面的问题?请将电子邮件发送到 scripter@microsoft.com。我们不能保证回答收到的所有问题,但是我们将尽最大的努力。
同时,不要忘了查看您好,脚本专家!存档。
今日问题:如何配置用户帐户,以便用户只能使用特定计算机登录到域?
您好,脚本专家!如何配置用户帐户,以便用户只能使用特定计算机登录到域?
-- RB
您好,RB。您知道,我们曾经为您提供过一些真地很不错的解决方案。遗憾的是,Microsoft 的法律部门否决了所有这些解决方案。在他们看来,“我们认为大多数的‘人力资源’部门都不赞成系统管理员敲击用户头部的面积达到 2x4 见方”。
嗯,有可能。虽然您从未令我们信服过“人力资源”部门的工作人员尚未考虑过敲击他们客户头部的面积达到 2x4 见方。也可能不止一次这样想过。
(编辑附注:是的,再次强调,编辑需要介入并进行很小的、可能是微不足道的尝试,以使大家摆脱麻烦:Microsoft 和脚本专家不提倡、不支持工作中的暴力行为或与此相关的其他行为,且牵涉不到这些行为。嗯,好吧,橄榄球有点暴力,不过那很好玩。许多人都认为拳击是一项很好的运动,不过该项运动却具有很强的暴力倾向。好了,不提它了。我们将让律师来对其加以评判。)
当然,这就意味着,必须放弃涉及电击、机关或经过培训的电脑黑客的所有解决方案。这样,我们就只剩下一个答案了:涉及 ADSI 的有效解决方案 - 尽管有点令人生厌。就是类似下面的内容:
Set objUser = GetObject _
("LDAP://cn=Ken Myer,ou=Finance,dc=fabrikam,dc=com")
objUser.Put "userWorkstations", "atl-ws-01,atl-ws-02,atl-ws-03"
objUser.SetInfo
正如我们前面所说的那样,这不是我们的首选。尽管如此,编写并运行一个具有三行代码的脚本还是要比创建一群僵尸电脑(可保护您的计算机并防止未经授权的用户进行登录)更简单一些。正如您所看到的,该脚本的内容很少。在绑定到 Active Directory 中的 Ken Myer 用户帐户后,该脚本只需两行代码就指定了 Ken 可用来登录到域的计算机:
objUser.Put "userWorkstations", "atl-ws-01,atl-ws-02,atl-ws-03" objUser.SetInfo
在第一行中,我们只是将允许的计算机分配给了 userWorkstations 属性。请注意这里的语法:我们在一对双引号内指定了所有计算机名称,各名称间以逗号分隔。执行此操作时,请记住我们的目标:我们想说的是,这些计算机只是 Ken Myer 可用来登录到域的那三台计算机。您已经了解了该情况,但我们不希望人们感到迷惑并认为我们要拒绝 Ken 访问这些计算机。相反:我们要拒绝 Ken 访问除这些计算机之外的所有计算机。
在将计算机名称分配给 userWorkstations 后,我们将调用 SetInfo 方法以便将更改写回到 Active Directory 中的 Ken Myer 用户帐户中。就是这些,大功告成。这就意味着,我们可以将好的点子留待以后用。
当然,您以后可能会改变想法,并希望 Ken 有权使用所有计算机来登录到域。那么,该怎么办呢?
是这样,您可以只需提前两星期通知僵尸电脑即可。不过,正如我们已得知这个方法很麻烦一样,僵尸电脑也不会很顺利地获取坏消息。因此,最好的方法就是使用另一个脚本来删除 userWorkstations 属性中的所有值。当此属性为空白时,就意味着用户可使用任一计算机登录到域:
Const ADS_PROPERTY_CLEAR = 1
Set objUser = GetObject _
("LDAP://cn=Ken Myer,ou=Finance,dc=fabrikam,dc=com")
objUser.PutEx ADS_PROPERTY_CLEAR, "userWorkstations", 0
objUser.SetInfo
看看此时我们有多忙,我们不会费神去解释此附赠脚本是如何工作的。我们也不会讨论如何从 userWorkstations 属性中删除一台计算机或如何向列表中添加新计算机。毕竟,这是 Microsoft Windows 2000 Scripting Guide(英文)中的内容。
此外,电脑黑客们此时正在期盼着他们的年中业绩评估。(坦白地讲,除了在公司的圣诞晚会上那个令人遗憾的瞬间外,迄今为止,他们一年来确实过的不错。)
欢迎访问您好,脚本专家!- 存档