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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 David
12/12/2007 - 14:03 | Informe spam
wow!!!

Muchas Gracias rodrigo, lo voy a probar ahora mismo y te digo.

Un saludo

david

Por cierto, no pasa nada si lo hago mientras los usuarios continuan
trabajando no¿¿¿??

David

"Rodrigo de los Santos" wrote:

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

Respuesta Responder a este mensaje
#3 Rodrigo de los Santos
12/12/2007 - 15:09 | Informe spam
... yo siempre lo hice off-time ... nunca lo probe con usuarios logueados


Saludos

Rodrigo de los Santos



MVP - Windows Server - Group Policy
MCSA Messaging - 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:
wow!!!

Muchas Gracias rodrigo, lo voy a probar ahora mismo y te digo.

Un saludo

david

Por cierto, no pasa nada si lo hago mientras los usuarios continuan
trabajando no¿¿¿??

David

"Rodrigo de los Santos" wrote:

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

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida