"Полный доступ" нужен только для изменения прав доступа и давать его обычным пользователя которым вполне достаточно прав Чтения/записи, а тем более "Пользователям домена" очень вредно. Мне кажется вы взялись за проблему не с того конца так как у вас на корневой папке Users стоит наследование на суб контейнеры изначально с полным доступом. И решать эту задачу лучше не логин скриптом а все таки от имени администратора. (ИМХО)
Как я понял у каждого пользователя папка соответствует его имени и если объем данных не большой то можно и просто перегородить структуру каталогов заново.
Цитата Неизвестного админа:
Скрипт монтирует диск T:. У пользователя при этом проверяется наличие папки (соотвествующее имени пользователя) и если ее нет, то она создается по пути \\fileserver\users и на эту папку выставляются права только на этого пользователя и учетных записей Admin и Administrator. Смонтированному диску присваивается новая метка.
Код: ![Выделить весь код](images/misc/selectcode.png)
' ------ SCRIPT CONFIGURATION ------
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set objNetwork = CreateObject("Wscript.Network")
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objWSH = CreateObject("WScript.Shell")
Set objShell = CreateObject("Shell.Application")
objUserName = objNetwork.UserName
strDrive = "T:"
strNewDiskName = "Личная папка "&objUserName
strPath = "\\fileserver\users\"&objUserName
boolPersistent = True
' ------ END CONFIGURATION ---------
On Error Resume Next
if (objFS.FolderExists(strPath)) = false then
Call objFS.CreateFolder(strPath)
strACLCommand = "cmd /c echo y| CACLS "
strACLCommand = strACLCommand & strPath
strACLCommand = strACLCommand & " /g DOMAIN\" & objUserName & ":F"
return = objWSH.Run (strACLCommand , 0, True)
Call WshShell.Run("cacls " & strPath & _
" /e /g DOMAIN\" & "Administrator" & ":f", HIDE_WINDOW, WAIT_ON_RETURN)
Call WshShell.Run("cacls " & strPath & _
" /e /g DOMAIN\" & "admin" & ":f", HIDE_WINDOW, WAIT_ON_RETURN)
end if
objNetwork.MapNetworkDrive strDrive, strPath, boolPersistent
objShell.NameSpace(strDrive).Self.Name = strNewDiskName
|
ну а если этот вариант не приемлем то вначале отстроите права так сказать у корневых контейнеров а потом уже через if (objFS.FolderExists(strPath)) =
false/true и
cacls /? согласно вашего шаблона для папки пользователя и подкаталогов.