Тема: VBScript: Формирование ФИО в авторе Office 2003 из AD
Исправляет некорректное имя автора в Office 2003 на ФИО (displayName) из AD.
Собственно баг в кодировке при добавлении в реестр. Коллеги как исправить?
Set fs = CreateObject("Scripting.FileSystemObject")
set WshShell = WScript.CreateObject("WScript.Shell")
' get UserName
strName = WshShell.ExpandEnvironmentStrings("%USERNAME%")
On Error Resume Next
' Constants for the NameTranslate object.
Const ADS_NAME_INITTYPE_DOMAIN = 1
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1179 = 1
Set objNetwork = CreateObject("Wscript.Network")
' Determine DNS domain name from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
If Err.Number <> 0 Then
Wscript.Quit
End If
strDNSDomain = objRootDSE.Get("defaultNamingContext")
' Use the NameTranslate object to find the NetBIOS domain name from the
' DNS domain name.
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_TYPE_NT4, strDNSDomain
objTrans.Set ADS_NAME_TYPE_1179, strDNSDomain
strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4)
' Remove trailing backslash.
strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
' Use the NameTranslate object to convert the NT user name to the
' Distinguished Name required for the LDAP provider.
objTrans.Init ADS_NAME_INITTYPE_DOMAIN, strNetBIOSDomain
objTrans.Set ADS_NAME_TYPE_NT4, strNetBIOSDomain & "\" & strName
strUserDN = objTrans.Get(ADS_NAME_TYPE_1179)
' Bind to the user object in Active Directory with the LDAP provider.
Set objUser = GetObject("LDAP://" & strUserDN)
'Get Common name
strUsername=objUser.Get("displayName") & ", " & objUser.Get("telephoneNumber")
'strUsername= objUser.cn
'WScript.Echo strUsername
'Convert Initials to HEX
For i = 1 to Len(strName)
strInitialsHex = strInitialsHex & "," & Hex(Asc(Mid(strName, i, 1))) & ",00"
Next
strInitialsHex = Right(strInitialsHex , Len(strInitialsHex ) -1)
strInitialsHex = strInitialsHex & ",00,00"
'Convert Username to HEX
For i = 1 to Len(strUsername)
strUsernameHex = strUsernameHex & "," & Hex(Asc(Mid(strUsername, i, 1))) & ",00"
Next
strUsernameHex = Right(strUsernameHex, Len(strUsernameHex) -1)
strUsernameHex = strUsernameHex & ",00,00"
' Create temporary registry file
Const OverwriteIfExist = -1
Const FailIfExist = 0
Const OpenAsASCII = 0
Const OpenAsUnicode = -1
Const OpenAsDefault = -2
sTmpFile = WshShell.ExpandEnvironmentStrings("%TEMP%") & "\UserInfo.reg"
Set fFile = fs.CreateTextFile(sTmpFile, OverwriteIfExist, OpenAsASCII)
' Write to the temporary registry file
fFile.WriteLine "Windows Registry Editor Version 5.00"
fFile.WriteLine
fFile.WriteLine "[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\UserInfo]"
fFile.WriteLine """UserName""=hex:" & strUsernameHex
fFile.WriteLine """UserInitials""=hex:" & strInitialsHex
fFile.Close
' Import the registry file
WshShell.Run "regedit /s " & sTmpFile, 0, True
' Delete the temporary registry file
fs.DeleteFile sTmpFile
