Mis documentos dentro de un dominio

12/12/2007 - 11:51 por David | Informe spam
Saludos a todos.

tengo un gran problema pues tengo almenos 700 usuarios en mi dominio y sus
espacios personales los crearon desde un script como administrador, con lo
cual el propietario es el administrador. Cuando activo la redirección de la
carpeta local mis documentos al espacio personal de cada user, no puedo por
culpa de que el propietario no es el user . Claro, no puedo ir carpeta por
carpeta para cambiar el propietario, tengo un comando que cambia esto pero
tendria que hacerlo uno a uno. O bien me creo un script que lo haga, o bien
si alguien sabe alguna forma más rápida para hacerlo, por favor... , me haría
un favor.

Muchas Muchas gracias

David
 

Leer las respuestas

#1 Rodrigo de los Santos
12/12/2007 - 13:32 | Informe spam
Te paso un script de mi autoría que te cambia los ownerships y los permisos
de las carpetas siempre y cuando las carpetas a cambiar sean = al nombre de
usuario
En esta línea Set colSubfolders = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='C:\shared\userhome'} " _
le indicas que carpeta queres escanear

En esta linea Set objFile = objFSO.OpenTextFile("F:\Results.txt",
ForWriting)
le decis el archivo de log en donde vas a guardar los datos (el archivo debe
existir previamente)

luego busca y reemplaza cambiardominio por tu nombre de dominio

por última descarga http://support.microsoft.com/kb/825751 y
http://www.microsoft.com/downloads/...laylang=en y
metelos en la carpeta Windows

'************************************************** BOF
strComputer = "."
Const ForWriting = 2
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "oot\cimv2")

Set colSubfolders = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='C:\shared\userhome'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")
Set objFSO = CreateObject("Scripting.FileSystemObject")
set objShell = CreateObject("Wscript.shell")


Set objFile = objFSO.OpenTextFile("F:\Results.txt", ForWriting)

For Each objFolderWMI in colSubfolders
Set objFolder = objFSO.GetFolder(objFolderWMI.Name)

' Definiendo ACL para carpeta principal
strXcacls = "cscript c:\windows\xcacls.vbs " & chr(34) & objFolderWMI.Name &
"\" & chr(34) & " /G " & chr(34) & "cambiardominio\domain admins" & chr(34)
& ":F /G " & chr(34) & "cambiardominio\" & objFolder.Name & chr(34) & ":F"
objFile.WriteLine
"##########################################################################"
objFile.WriteLine "Cambiando permisos para el usuario " & objFolder.Name & "
en la carpeta " & objFolderWMI.Name
objFile.WriteLine
"##########################################################################"
objFile.WriteLine "#### Definiendo Permisos en Carpeta Home Folder"
objFile.WriteLine "#### Sintaxis 1: " & strXcacls

set objResult = objShell.exec(strXcacls)
boolLogControl=False
Do Until objResult.StdOut.AtEndOfStream
strLine = objResult.StdOut.ReadLine()

if Instr(strLine,"******************************************") <> 0 then
boolLogControl = changeState(boolLogControl)
if boolLogControl = True then
objFile.WriteLine(strLine)

end if

Loop

'Rehabilitando Heredación en todas las subcarpetas
strXcacls = "cscript c:\windows\xcacls.vbs " & chr(34) & objFolderWMI.Name &
"\*.*" & chr(34) & " /T /S /F /I ENABLE /E"
objFile.WriteBlankLines(1)
objFile.WriteLine "#### Habilitando Heredación en SubFolders y Files"
objFile.WriteLine "#### Sintaxis 2: " & strXcacls
set objResult = objShell.exec(strXcacls)
boolLogControl=False
Do Until objResult.StdOut.AtEndOfStream
strLine = objResult.StdOut.ReadLine()

if Instr(lcase(strLine),lcase("error")) <> 0 then boolLogControl =
changeState(boolLogControl)
if Instr(lcase(strLine),lcase("operation complete")) <> 0 then
boolLogControl = changeState(boolLogControl)
if Instr(lcase(strLine),lcase("elapsed time")) <> 0 then boolLogControl =
changeState(boolLogControl)
if Instr(lcase(strLine),lcase("ending script")) <> 0 then boolLogControl =
changeState(boolLogControl)
if boolLogControl = True then
objFile.WriteLine(strLine)
boolLogControl = changeState(boolLogControl)
end if

Loop

'Definiendo Ownership en carpeta principal
strSubinacl = "c:\windows\subinacl.exe /subdirectories " & chr(34) &
objFolderWMI.Name & chr(34) & " /setowner=" & chr(34) & "cambiardominio\" &
objFolder.Name & chr(34)
objFile.WriteBlankLines(1)
objFile.WriteLine "#### Definiendo OwnerShip de usuario principal"
objFile.WriteLine "#### Sintaxis 3: " & strSubinacl
set objResult = objShell.exec(strSubinacl)
boolLogControl=False
Do Until objResult.StdOut.AtEndOfStream
strLine = objResult.StdOut.ReadLine()

if Instr(lcase(strLine),lcase("error")) <> 0 then boolLogControl =
changeState(boolLogControl)
if Instr(lcase(strLine),lcase("operation complete")) <> 0 then
boolLogControl = changeState(boolLogControl)
if Instr(lcase(strLine),lcase("elapsed time")) <> 0 then boolLogControl =
changeState(boolLogControl)
if Instr(lcase(strLine),lcase("done:")) <> 0 then boolLogControl =
changeState(boolLogControl)
if boolLogControl = True then
objFile.WriteLine(strLine)
boolLogControl = changeState(boolLogControl)
end if

Loop

'Definiendo Ownership en subcarpetas
strSubinacl = "%comspec% /c c:\windows\subinacl.exe /noverbose
/subdirectories " & chr(34) & objFolderWMI.Name & "\*.*" & chr(34) & "
/setowner=" & chr(34) & "cambiardominio\" & objFolder.Name & chr(34) &
">>g:\pete.txt"
objFile.WriteBlankLines(1)
objFile.WriteLine "#### Definiendo OwnerShip de usuario principal"
objFile.WriteLine "#### Sintaxis 4: " & strSubinacl
set objResult = objShell.exec(strSubinacl)
boolLogControl=False
Do Until objResult.StdOut.AtEndOfStream
strLine = objResult.StdOut.ReadLine()

if Instr(lcase(strLine),lcase("error")) <> 0 then boolLogControl =
changeState(boolLogControl)
if Instr(lcase(strLine),lcase("operation complete")) <> 0 then
boolLogControl = changeState(boolLogControl)
if Instr(lcase(strLine),lcase("elapsed time")) <> 0 then boolLogControl =
changeState(boolLogControl)
if Instr(lcase(strLine),lcase("done:")) <> 0 then boolLogControl =
changeState(boolLogControl)
if boolLogControl = True then
objFile.WriteLine(strLine)
boolLogControl = changeState(boolLogControl)
end if

Loop
objFile.WriteBlankLines(2)

Next
objFile.Close


Function ChangeState(boolVar)
if boolVar = True then
boolVar = False
else
boolVar = True
End if
ChangeState = BoolVar
End Function
'************************************************** EOF



Saludos

Rodrigo de los Santos



MVP - Windows Server - Group Policy
MCP - CCA - CNA
Miembro del MUG Argentina (suscribite! http://www.mug.org.ar)

Url: http://www.dlssolutions.net
Blog: http://nerdsupport.blogspot.com


"David" wrote in message
news:
Saludos a todos.

tengo un gran problema pues tengo almenos 700 usuarios en mi dominio y sus
espacios personales los crearon desde un script como administrador, con lo
cual el propietario es el administrador. Cuando activo la redirección de
la
carpeta local mis documentos al espacio personal de cada user, no puedo
por
culpa de que el propietario no es el user . Claro, no puedo ir carpeta por
carpeta para cambiar el propietario, tengo un comando que cambia esto pero
tendria que hacerlo uno a uno. O bien me creo un script que lo haga, o
bien
si alguien sabe alguna forma más rápida para hacerlo, por favor... , me
haría
un favor.

Muchas Muchas gracias

David

Preguntas similares