samba pdc, netlogon scripts
Ruslan Chekushko
R.Chekushko на mail.ru
Чт Окт 9 10:57:35 BST 2008
День добрый, столкнулся с проблемой: имеется домен Samba пользователи
хранятся в OpenLDAP. Собрал скрипт для авто- подключения дисков и
принтеров, приблизительно следующего содержания:
Option Explicit 'On
Error Resume Next
Dim WshShell, WshNetwork
Dim strUserDN, objSysInfo, GroupObj, UserGroups, UserObj
Const FileSrv1 = "\\192.168.1.10"
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set objSysInfo = CreateObject("ADSystemInfo")
strUserDN = objSysInfo.userName
Set UserObj = GetObject("LDAP://" & strUserDN)
For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next
'MsgBox "Member of "& UserGroups
if InGroup("Purchase") then
MapDrv "X:", FileSrv1 & "\Public","Общий"
MapDrv "O:", FileSrv1 & "\Purchase","Отдел закупок"
end if
if InGroup("sales") then
MapDrv "X:", FileSrv1 & "\Public","Общий"
MapDrv "O:", FileSrv1 & "\Sales","Отдел продаж"
End If
wshNetwork.AddWindowsPrinterConnection "\\192.168.1.1\MAN"
Function MapDrv(DrvLet, UNCPath, DrvName)
Dim objFSO, oShell ' Object variable
Dim Msg
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("Shell.Application")
On Error Resume Next
If objFSO.DriveExists(DrvLet) Then
WshNetwork.RemoveNetworkDrive DrvLet, true, true
End If
WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName
Select Case Err.Number
Case 0 ' No error
Case -2147023694
WshNetwork.RemoveNetworkDrive DrvLet, true, true
WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName
Case -2147024811
WshNetwork.RemoveNetworkDrive DrvLet, true, true
WshNetwork.MapNetworkDrive DrvLet, UNCPath
oShell.NameSpace(DrvLet).Self.Name = DrvName
Case Else
Msg = "Mapping network drive error: " & _
CStr(Err.Number) & " 0x" & Hex(Err.Number) & vbCrLf & _
"Error description: " & Err.Description & vbCrLf
Msg = Msg & "Domain: " & WshNetwork.UserDomain & vbCrLf
Msg = Msg & "Computer Name: " & WshNetwork.ComputerName & vbCrLf
Msg = Msg & "User Name: " & WshNetwork.UserName & vbCrLf & vbCrLf
Msg = Msg & "Device name: " & DrvLet & vbCrLf
Msg = Msg & "Map path: " & UNCPath
WshShell.LogEvent 1, Msg, FileSrv1
End Select
End Function
Function InGroup(strGroup)
InGroup=False
If InStr(UserGroups,"[CN=" & strGroup & "]") Then
InGroup=True
End If
End Function
Столкнулся с проблемой, когда происходит выполнение скрипта выдается
ошибка "Именам пользователей не сопоставлены коды защиты данных." Как
я понял это не сопопставлены группы Все и Опытные
пользователи...только не понял как их сопоставить. Может есть
предложения?
Спасибо
--
С уважением,
Руслан Чекушко
ICQ: 327335295
ЗЫ: Если убрать в скрипте блок:
strUserDN = objSysInfo.userName
Set UserObj = GetObject("LDAP://" & strUserDN)
For Each GroupObj In UserObj.Groups
UserGroups=UserGroups & "[" & GroupObj.Name & "]"
Next
'MsgBox "Member of "& UserGroups
и прописывать подключение сетевых дисков как:
MapDrv "X:", FileSrv1 & "\Public","Общий"
и т.д. то все работает, но задача стоит чтобы диски подключались по
группам пользователей (точно скрипт работал в домене win2k3,
проверено!)
Подробная информация о списке рассылки ubuntu-ru