LYNC 客户端现在做得更加人性化了,其中一点就是用户可以使用头像来彰显个性。这个功能大家都比较喜欢,头像可以用户自己添加,但是要用网络路径,所以用户可能不会添加。所以由管理员来添加是最方便的。今天我们来看看怎么批量的为用户添加头像。

我们先登录看看。

p_w_picpath

默认的图像,光秃秃的。很是不好看。不过通过以前的帖子,我们还知道这个图像的原型是微软的创始人盖茨先生,还是先拜一个!


开始吧!

我们要实现准备好一些照片,照片不要超过大小不要超过30KB,所以尺寸也要控制好,一般就96X96就差不多了,太大了没有意义,因为这些照片是存在AD内的,所以如果太大的话,会导致AD的数据库增大,从而影响复制。

照片就采用姓名来命名就好了,因为我们的脚本一会会读取到这个名字,然后用这个名字去搜索AD。

大家可以看我的实例,我AD里面的用户名字是张三,那么照片也是张三。

 p_w_picpath

AD里面用户的名称为张三,而AD属性里面对应名称字段的值为name,要以这个为准。因为我们一会脚本搜索的属性也是这个name属性。

 p_w_picpath

照片就非常简单了,用户的名字为文件名。

 AD里面存照片对应的值为thumbnailPhoto,我们利用adsiedit.msc看看现在的值为空。

p_w_picpath

 

脚本内容:

红色地方为关键,主要是第一个为照片所存放的文件夹。第二个标为红色是告诉大家,我们查询的是name属性。

Const ForReading = 1

'图片存的目录
InDir = "C:\photo"
Set fso = CreateObject("Scripting.FileSystemObject")
set oIADS = GetObject("LDAP://RootDSE")
strDefaultNC = oIADS.Get("defaultnamingcontext")
Set theConn = CreateObject("ADODB.Connection")
theConn.Provider = "ADsDSOObject"
theConn.Open "ADs Provider"
Set theCmd  = CreateObject("ADODB.Command")
theCmd.ActiveConnection = theConn
Set objRecordSet = CreateObject("ADODB.Recordset")
For Each tFile In fso.GetFolder(InDir).Files
    tName = tFile.Name
    tName = Left(tName, InStrRev(tName,".")-1)
      strQuery = "<LDAP://" & strDefaultNC & ">;" & "(&(objectClass=person)(name=" & tName & "));name,adspath;subtree"
    theCmd.CommandText = strQuery
    Set objRS = theCmd.Execute
    If objRS.RecordCount = 0 Then
      MsgBox "Can't find account for " & tName
    Else
      Set objUser = GetObject(objRS("adspath"))
      ObjUser.Put "thumbnailPhoto", ReadByteArray(tFile.Path)
      ObjUser.SetInfo
    End If
Next
 

Function ReadByteArray(strFileName)
    Const adTypeBinary = 1
    Dim bin
    Set bin = CreateObject("ADODB.Stream")
    bin.Type = adTypeBinary
    bin.Open
    bin.LoadFromFile strFileName
    ReadByteArray = bin.Read
End Function

双击执行,然后先不要急着去登录用户,先去看看用户的值改变了没有。

 p_w_picpath

我们看到张三这个用户的thumbnailphoto已经有值了。我们再登录看看。

 p_w_picpath

头像已经出来了。 

p_w_picpath

这里也看到了我们定义给用户图像。

 过程就这么简单,如果你有多用户,就批量的把照片弄到文件夹里,然后双击脚本执行吧。 前提条件是这些用户必须要存在于AD内,不然脚本是要报错的。

如果大家想了解脚本具体的含义,欢迎向我提问。