我这个人的技术领域搞的比较多,SE\DEV\DBA都能做做,时间长了发现见的东西多了,Desgin Solution反而成了最喜欢做的事情。
最近在一个项目中很郁闷,技术上到没什么太多的问题,关键是环境,用户的生产环境和测试环境差很多,网络状况更是非常的复杂,导致客户也无法正确的评估工作量和项目的金额,这个项目没怎么挣到钱,但是经验获取了不少。
国内的SE就是SE,一点code都不懂,DEV就是DEV,一点Server的东西都不懂,这个项目就是一个典型的SE+DEV的项目。用户功能其实很简单就是将计算机加入域,并且迁移用户配置文件。这种工作以前都是通过写脚本执行的,当然脚本的功能还是稍微弱了一点,而且UI上不是非常的理想。没办法了,只能使用VB6来做(当你了解的.net以后让你用vb6写程序是一件很痛苦的事情),毕竟不保证每个客户端都有.net framework。程序主要就是调用ADSI和+WMI来实现用户验证、OU判断、计算机名称判断、更改注册表之类的功能,但是这些功能中很多都是需要和AD进行交互。
WMI估计很多人都使用过,可以使用WMI来操作本地或远程的计算机,执行操作或查询信息,里面的CIM模型也都是通用的,只不过MS基于CIM模型实现了自己的一些Win32 CLASS,可以管理NT4以后的计算机,当然9x的也可以,但是要安装WMI Core组件。
ADSI就是一个接口,根据不同的Provider来访问不同的系统信息,例如LDAP\WinNT\IIS等,当然不同接口也有一些区别。访问AD可以使用WinNT和LDAP。WinNT使用的是SAM数据库的方式,一种在Windows NT时代的Secruity Account Management数据库,平面没有层次的可以通过Domain\Name,class,例如contoso\bob,user,来定位一个用户,书写简单。LDAP也已访问AD,但是使用DN来定位对象,例如CN=bob,OU=UserAccounts,DC=Contoso,DC=com,书写比较麻烦。使用WinNT Provider无法制定DC,因为在NT时代,只能访问PDC来修改数据,但是LDAP可以制定特定的DC,因为AD中DC都可以对数据进行修改(Win2008 中的 RODC不可以).
可能很多人还不了解AD(Active Directory),你可以理解为LDAP DB +DS Service,基本上我们的程序只需要实现对于LDAP数据库进行查询和修改就可以了。在测试环境中我们使用VPC来模拟DC和Workstation,程序运行的非常顺利,1周左右程序基本上成型了。我们就去客户现场进行测试,出现了很多诡异的问题,有一些网络问题,我们通过程序进行了一些修改,还有一些就是AD的问题。因为MS在设计AD的时候抛弃了NT时PDC(主域控制器,可以进行读写)和BDC(只读备份域控制器)的概念,提出了多主复制的理念,这样就可能出现访问域控制器的时候根据网络的不同使用的是不同的域控制器,例如,WIFI连接的时候使用DC1,LAN连接使用DC2。因为程序中我们需要实现对于计算机的命名(企业中对于名称有特定的规范),根据用户信息判断计算机名称和计算机账号所在OU,这样必须将计算机唯一的标识UUID写入计算机账号的属性中(netbootGUID)。在WMI中JoinDomain函数可以自动创建计算机账号,但是无法制定在某个DC中创建,同时我们要对创建的计算机账号写入信息,就会出现在DC1上创建计算机账号,但是在DC2中查询不到该计算机账号的情况(DC同步需要时间),这个情况在我们自己的测试环境中是测试不到的,因为无法模拟客户的网络和服务器环境。还好我们选择了在指定的DC上创建计算机账号并修改netbootGUID,然后调用JoinDomain是选择不创建计算机账号的方式可以将这个问题跳过。
总结下来,SE最好能够写代码,否则这种问题让DEV处理基本上是无解的,但是现实的情况是SE基本上开发能力很差,所以我才有了市场。
另外,测试一定要模拟真实的生产环境,如果没有,那就必须要考虑在生产环境里测试,否则程序写好了也不能运行。
打印 | 张贴于 2009-02-03 17:10:52 | Tag:暂无标签
留言反馈
不好意思,好久没回来看了。
To luke
myspace的ops当然可以写了,要不然也不可能去myspace,我有一个同事原来在ebay,也可以写的,但是大多数的IT Pro对于写程序还是差一些的,简单的script还可以,但是复杂点的东西就不好办了。
to dotage
对于操作AD或OS,我更信赖Win32 API、WMI和ADSI,对于其他的方式包括.net最多只能是辅助,毕竟.net也是调用这些接口,自己直接写更方便一些,尤其是运行在客户端的程序,很难说所有人都有.net framework.当然用.net比我们用vb更方便一些。
ew eeee
我们的ops都能写script的。
非常同意您关于AD类代码必须在尽可能真实的环境内进行测试的观点,最近我就碰到这样一件怪事,虽然最终绕过去了,但仍然不得其正解,不知您有没有什么建议:
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/1bef014a-1b91-4a69-a26e-8c886f12e92e