Permisos acceso a carpetas

31/01/2006 - 11:40 por jrubio | Informe spam
Buenos dias amigos de Microsoft.
Ayer me pidieron que hiciera un inventario de las carpetas del dominio asi
como de los accesos que tienen los diferentes usuarios a esas carpetas.
La forma que me comentand e hacerlo es ir carpeta por carpeta apuntanto los
permisos que tienen las mismas, esto me parece algo rudimentario y aparte se
tendria que invertir bastante tiempo en realizar este inventario.
Nose si habria alguna otra forma de hacerlo, quizas con "windows Script
Host", quizas con alguna otra aplicación, si alguien me puede indicar.
Muchas garcias.

Preguntas similare

Leer las respuestas

#1 jrubio
31/01/2006 - 13:38 | Informe spam
Estupendo muchismimas gracias, esto me ahorrara dias de trabajo. En cuanto
pueda los pruebo. Un saludo.
Respuesta Responder a este mensaje
#2 jrubio
02/02/2006 - 16:29 | Informe spam
Buenas.
Tengo un pequeño problema con estos scripts cuando los ejecuto me da un
error al crear el objeto FileSystemObject, en concreto el error es el
siguiente:

Linea 91
Caracter 1
Error El componente Activex no puede crear el objeto
'scripting.FileSystemObject'
codigo 800a01ad

¿Alguna idea?

Gracias

"Fernando Reyes [MS MVP]" escribió:

Mira si te vale uno de estos dos script. El primero (lee-acls.vbs) utiliza los flags de control de u objeto descriptor de seguridad y el segundo hace llamadas a CACLS.EXE. Ejecútalos desde una ventana de comandos con cscript. Los adjunto como txt, para evitar a los antivirus y pego el código para los que acceden vía web, que no pueden ver los adjuntos.

<pego lee-acls.vbs>
Option Explicit

'*****************Descripción********************************
'Este scriptmuestra las ACLs del directorio pasado como
'argumento y de aquellos que contiene. Muestra las
'ACLs de los directorios únicamente.

'Sintaxis:

'cscript lee-acls.vbs [carpeta]

'-carpèta: ruta de la carpeta inicio del árbol del que
'queremos obtener sus ACLs; parámetro opcional, si se
'omite se considera el directorio actual del inductor
'de la ventana de comandos desde la que se lanza.

'Ejemplos:

'cscript lee-acls.vbs
'cscript lee-acls.vbs c:\Moria

'© 8/2005 Fernando Reyes
'*****************Fin de la descripción**********************


'********* Declaración de variables ****************************
Dim str_CarpetaOrigen 'Albergará el nombre de la
'carpeta a la que se liste
'su ACL
Dim obj_ServicioWMI 'Objeto para acceder al
'servicio WMI
Dim obj_EntradasDeSeguridadDeCarpeta 'Objeto para
'albergar las entradas
'ACL de la carpeta
Dim obj_DescriptorDeSeguridad 'Objeto para albergar
'el descriptor de
'seguridad de la carpeta
Dim int_Devolucion 'Recogerá la devolucion de
'la llamada al método WMI
'GetSecurityDescriptor
Dim int_FlagsDeControl 'Contendrá los flags de
'control del descriptor
'de seguridad
Dim arr_ACEs 'Array que contendrá las
'entradas de seguridad
'del descriptor de
'seguridad
Dim obj_ACE 'Albergará el objeto
'de cada entrada de
'seguridad
Dim obj_FileSystemObject 'Objeto FileSystem para
'navegar la carpeta
'str_Carpeta

'********* Fin de la Declaración de variables ******************

'********* Declaración de constantes ***************************
Const SE_DACL_PRESENT = &h4
Const ACCESS_ALLOWED_ACE_TYPE = &h0
Const ACCESS_DENIED_ACE_TYPE = &h1

Const FILE_ALL_ACCESS = &h1f01ff
Const FOLDER_ADD_SUBDIRECTORY = &h000004
Const FILE_DELETE = &h010000
Const FILE_DELETE_CHILD = &h000040
Const FOLDER_TRAVERSE = &h000020
Const FILE_READ_ATTRIBUTES = &h000080
Const FILE_READ_CONTROL = &h020000
Const FOLDER_LIST_DIRECTORY = &h000001
Const FILE_READ_EA = &h000008
Const FILE_SYNCHRONIZE = &h100000
Const FILE_WRITE_ATTRIBUTES = &h000100
Const FILE_WRITE_DAC = &h040000
Const FOLDER_ADD_FILE = &h000002
Const FILE_WRITE_EA = &h000010
Const FILE_WRITE_OWNER = &h080000
'********* Fin de la Declaración de constantes *****************

'********* Cuerpo del script ***********************************

'Recogemos la carpeta suministrada como argumento; en caso de
'no ser pasado se asume el directorio actual

If Wscript.Arguments.Count = 0 Then
str_CarpetaOrigen = "."
Else
str_CarpetaOrigen = Wscript.Arguments(0)
End If

'Creamos un objeto FileSystem
Set obj_FileSystemObject = CreateObject("Scripting.FileSystemObject")

'Llamamos a la rutina que obtiene las ACLs pasando un objeto
'carpeta obtenido con la ruta recibida como parámetro y el
'método GetFolder del objeto FileSystem
Call s_Muestra_ACLs(obj_FileSystemObject.GetFolder(str_CarpetaOrigen))

Sub s_Muestra_ACLs(obj_Carpeta)

'*****************Descripción********************************
'Esta rutina muestra la ACL de la carpeta recibida y realiza
'una llamada recursiva para todas las subcarpetas que contiene
'*****************Fin de la descripción**********************

Dim obj_SubCarpeta 'Objeto que albergará cada carpeta contenida en la
'carpeta obj_Carpeta

'Mostramos la ruta de la carpeta actual
WScript.Echo "ACL de la carpeta " & obj_Carpeta.Path

'Creamos un objeto servicio WMI
Set obj_ServicioWMI = GetObject("winmgmts:")

'Creamos un objeto con las entradas de seguridad de la carpeta
Set obj_EntradasDeSeguridadDeCarpeta = _
obj_ServicioWMI.Get _
( _
"Win32_LogicalFileSecuritySetting='" & _
obj_Carpeta.Path & "'" _
)

'Creamos un objeto descriptor de seguridad con el método
'GetSecurityDescriptor del objeto que contiene las
'entradas de seguridad
int_Devolucion = _
obj_EntradasDeSeguridadDeCarpeta.GetSecurityDescriptor _
(obj_DescriptorDeSeguridad)

'Almacenamos los flags de control del descriptor de seguridad
int_FlagsDeControl = obj_DescriptorDeSeguridad.ControlFlags

'Vamos revisando la existenca de las diferentes entradas de
'control den los flags; en caso de aparecer se muestran
If (int_FlagsDeControl AND SE_DACL_PRESENT) _
= SE_DACL_PRESENT Then
arr_ACEs = obj_DescriptorDeSeguridad.DACL
For Each obj_ACE in arr_ACEs
WScript.Echo obj_ACE.Trustee.Domain & "\" & obj_ACE.Trustee.Name
If (obj_ACE.AceType = ACCESS_ALLOWED_ACE_TYPE) _
= ACCESS_ALLOWED_ACE_TYPE Then
WScript.Echo vbTab & "Allowed:"
ElseIf (obj_ACE.AceType = ACCESS_DENIED_ACE_TYPE) _
= ACCESS_DENIED_ACE_TYPE Then
WScript.Echo vbTab & "Denied:"
End If
If (obj_ACE.AccessMask AND FILE_ALL_ACCESS) _
= FILE_ALL_ACCESS Then
WScript.Echo vbTab & vbTab & "FILE_ALL_ACCESS "
End If
If (obj_ACE.AccessMask AND FOLDER_ADD_SUBDIRECTORY) _
= FOLDER_ADD_SUBDIRECTORY Then
WScript.Echo vbTab & vbTab & " FOLDER_ADD_SUBDIRECTORY "
End If
If (obj_ACE.AccessMask AND FILE_DELETE) _
= FILE_DELETE Then
WScript.Echo vbTab & vbTab & "FILE_DELETE "
End If
If (obj_ACE.AccessMask AND FILE_DELETE_CHILD) _
= FILE_DELETE_CHILD Then
WScript.Echo vbTab & vbTab & "FILE_DELETE_CHILD "
End If
If (obj_ACE.AccessMask AND FOLDER_TRAVERSE) _
= FOLDER_TRAVERSE Then
WScript.Echo vbTab & vbTab & " FOLDER_TRAVERSE "
End If
If (obj_ACE.AccessMask AND FILE_READ_ATTRIBUTES) _
= FILE_READ_ATTRIBUTES Then
WScript.Echo vbTab & vbTab & "FILE_READ_ATTRIBUTES "
End If
If (obj_ACE.AccessMask AND FILE_READ_CONTROL) _
= FILE_READ_CONTROL Then
WScript.Echo vbTab & vbTab & "FILE_READ_CONTROL "
End If
If (obj_ACE.AccessMask AND FOLDER_LIST_DIRECTORY) _
= FOLDER_LIST_DIRECTORY Then
WScript.Echo vbTab & vbTab & " FOLDER_LIST_DIRECTORY "
End If
If (obj_ACE.AccessMask AND FILE_READ_EA) _
= FILE_READ_EA Then
WScript.Echo vbTab & vbTab & "FILE_READ_EA "
End If
If (obj_ACE.AccessMask AND FILE_SYNCHRONIZE) _
= FILE_SYNCHRONIZE Then
WScript.Echo vbTab & vbTab & "FILE_SYNCHRONIZE "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_ATTRIBUTES) _
= FILE_WRITE_ATTRIBUTES Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_ATTRIBUTES "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_DAC) _
= FILE_WRITE_DAC Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_DAC "
End If
If (obj_ACE.AccessMask AND FOLDER_ADD_FILE) _
= FOLDER_ADD_FILE Then
WScript.Echo vbTab & vbTab & " FOLDER_ADD_FILE "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_EA) _
= FILE_WRITE_EA Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_EA "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_OWNER) _
= FILE_WRITE_OWNER Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_OWNER "
End If
Next
Else
WScript.Echo "No existen ACLs para esta carpeta ¿Volumen formateado con FAT?"
End If

'Realizamos una llamada recursiva en cada una de las carpetas
'contenidas en la carpeta recibida como parámetro.
For Each obj_SubCarpeta In obj_Carpeta.SubFolders
Call s_Muestra_ACLs(obj_Subcarpeta)
Next

End Sub
</pego lee-acls.vbs>
Pego a continuación el que utiliza CACLS.EXE:

<pego lee-acls.vbs>
Option Explicit

'*****************Descripción********************************
'Este script vuelca al fichero pasado como primer argumento
'las ACLs obtenidas de las llamadas recursivas a CACLS.EXE
'a partir del directorio pasado como argumento. Muestra las
'ACLs de los directorios únicamente.

'Sintaxis:

'cscript lee-acls-con-cacls.vbs fichero_destino [carpeta]

'-fichero_destino: [ruta\]nombre_de_fichero en el cual
'queremos que se guarden los resultados. Parámetro requerido

'-carpèta: ruta de la carpeta inicio del árbol del que
'queremos obtener sus ACLs; parámetro opcional, si se
'omite se considera el directorio actual del inductor
'de la ventana de comandos desde la que se lanza.

'Ejemplos:

'cscript lee-acls-con-cacls.vbs d:\SecInfo\ACLsMoria.txt
'cscript lee-acls-con-cacls.vbs d:\SecInfo\ACLsMoria.txt c:\Moria

'© 8/2005 Fernando Reyes
'*****************Fin de la descripción**********************

Dim str_CarpetaOrigen 'Recibirá la carpeta de origen de
'los argumentos
Dim obj_FileSystem 'Albergará un objeto FileSystem
dim str_FicheroDestino 'Recibirá el nombre del fichero donde
'se volcarán los resultados

'Control de argumentos; debe haber al menos un argumento:
'el nombr del fichero en el que se vuelcan los resultados
'de CACLS. El segundo es opcional, y es el nombre de la carpeta
'a revisar, si se omite se revisa el directorio desde el que
'se lanza el script (".")
If WScript.Arguments.Count = 0 Then
Wscript.Echo "Al menos se debe pasar un argumento: " & _
"el nombre del fichero donde se vuelcan " & _
"los resultados"
Wscript.Quit(1)
ElseIf Wscript.Arguments.Count = 1 Then
str_CarpetaOrigen = "."
Else
str_CarpetaOrigen = Wscript.Arguments(1)
End If

str_FicheroDestino = WScript.Arguments(0)

'Creamos un objeto FileSystem con el que obtenemos
'un objeto carpeta con la ruta de la carpeta requerida
'y lo pasamos como argumento a la función s_MuestraSubCarpetas
Set obj_FileSystem = CreateObject("Scripting.FileSystemObject")

'Volcamos la información de cabecera en el fichero destino
Call RunCmd ("@echo lee-acls-con-cacls.vbs: Resultados para " & _
str_CarpetaOrigen & ">" & _
str_FicheroDestino)
Call RunCmd ("@echo *****************************************>>" & _
str_FicheroDestino)

'Llamamos a la rutina que vuelca las ACLs en el fichero
s_MuestraSubCarpetas obj_FileSystem.GetFolder(str_CarpetaOrigen)

Sub s_MuestraSubCarpetas(obj_Folder)

'*****************Descripción********************************
'Esta rutina escribe en el fichero destino la información
'ACL de la carpeta recibida y realiza una llamada recursiva
'a las carpetas que contiene.
'*****************Fin de la descripción**********************

Dim obj_SubFolder 'Objeto que albergará las subcarpetas
Respuesta Responder a este mensaje
#3 Fernando Reyes [MS MVP]
06/02/2006 - 10:09 | Informe spam
Lo más probable es que tengas algún error en el script. ¿Lo has copiado y
pegado desde mi mensaje? En ese caso, puede ser que exista algún salto de
línea no deseado, por ejemplo. He comprobado los ficheros que adjunté y
funcionan los dos. Si es que estás accediendo desde Web, prueba a configurar
el grupo en Outlook Express.

Un saludo
Fernando Reyes [MS MVP]
MCSE Windows 2000 / 2003
MCSA Windows Server 2003
http://freyes.svetlian.com
http://www.bloglines.com/blog/urpiano

(Cómete un par de almejas para escribirme)


Fue jrubio () quien, en el mensaje
, con sus deditos
escribió:


Buenas.
Tengo un pequeño problema con estos scripts cuando los ejecuto me da
un
error al crear el objeto FileSystemObject, en concreto el error es el
siguiente:

Linea 91
Caracter 1
Error El componente Activex no puede crear el objeto
'scripting.FileSystemObject'
codigo 800a01ad

¿Alguna idea?

Gracias

"Fernando Reyes [MS MVP]" escribió:

Mira si te vale uno de estos dos script. El primero (lee-acls.vbs)
utiliza los flags de control de u objeto descriptor de seguridad y
el segundo hace llamadas a CACLS.EXE. Ejecútalos desde una ventana
de comandos con cscript. Los adjunto como txt, para evitar a los
antivirus y pego el código para los que acceden vía web, que no
pueden ver los adjuntos.

<pego lee-acls.vbs>
Option Explicit

'*****************Descripción********************************
'Este scriptmuestra las ACLs del directorio pasado como
'argumento y de aquellos que contiene. Muestra las
'ACLs de los directorios únicamente.

'Sintaxis:

'cscript lee-acls.vbs [carpeta]

'-carpèta: ruta de la carpeta inicio del árbol del que
'queremos obtener sus ACLs; parámetro opcional, si se
'omite se considera el directorio actual del inductor
'de la ventana de comandos desde la que se lanza.

'Ejemplos:

'cscript lee-acls.vbs
'cscript lee-acls.vbs c:\Moria

'© 8/2005 Fernando Reyes
'*****************Fin de la descripción**********************


'********* Declaración de variables ****************************
Dim str_CarpetaOrigen 'Albergará el nombre de la
'carpeta a la que se liste
'su ACL
Dim obj_ServicioWMI 'Objeto para acceder al
'servicio WMI
Dim obj_EntradasDeSeguridadDeCarpeta 'Objeto para
'albergar las entradas
'ACL de la carpeta
Dim obj_DescriptorDeSeguridad 'Objeto para albergar
'el descriptor de
'seguridad de la carpeta
Dim int_Devolucion 'Recogerá la devolucion de
'la llamada al método WMI
'GetSecurityDescriptor
Dim int_FlagsDeControl 'Contendrá los flags de
'control del descriptor
'de seguridad
Dim arr_ACEs 'Array que contendrá las
'entradas de seguridad
'del descriptor de
'seguridad
Dim obj_ACE 'Albergará el objeto
'de cada entrada de
'seguridad
Dim obj_FileSystemObject 'Objeto FileSystem para
'navegar la carpeta
'str_Carpeta

'********* Fin de la Declaración de variables ******************

'********* Declaración de constantes ***************************
Const SE_DACL_PRESENT = &h4
Const ACCESS_ALLOWED_ACE_TYPE = &h0
Const ACCESS_DENIED_ACE_TYPE = &h1

Const FILE_ALL_ACCESS = &h1f01ff
Const FOLDER_ADD_SUBDIRECTORY = &h000004
Const FILE_DELETE = &h010000
Const FILE_DELETE_CHILD = &h000040
Const FOLDER_TRAVERSE = &h000020
Const FILE_READ_ATTRIBUTES = &h000080
Const FILE_READ_CONTROL = &h020000
Const FOLDER_LIST_DIRECTORY = &h000001
Const FILE_READ_EA = &h000008
Const FILE_SYNCHRONIZE = &h100000
Const FILE_WRITE_ATTRIBUTES = &h000100
Const FILE_WRITE_DAC = &h040000
Const FOLDER_ADD_FILE = &h000002
Const FILE_WRITE_EA = &h000010
Const FILE_WRITE_OWNER = &h080000
'********* Fin de la Declaración de constantes *****************

'********* Cuerpo del script ***********************************

'Recogemos la carpeta suministrada como argumento; en caso de
'no ser pasado se asume el directorio actual

If Wscript.Arguments.Count = 0 Then
str_CarpetaOrigen = "."
Else
str_CarpetaOrigen = Wscript.Arguments(0)
End If

'Creamos un objeto FileSystem
Set obj_FileSystemObject = CreateObject("Scripting.FileSystemObject")

'Llamamos a la rutina que obtiene las ACLs pasando un objeto
'carpeta obtenido con la ruta recibida como parámetro y el
'método GetFolder del objeto FileSystem
Call
s_Muestra_ACLs(obj_FileSystemObject.GetFolder(str_CarpetaOrigen))

Sub s_Muestra_ACLs(obj_Carpeta)

'*****************Descripción********************************
'Esta rutina muestra la ACL de la carpeta recibida y realiza
'una llamada recursiva para todas las subcarpetas que contiene
'*****************Fin de la descripción**********************

Dim obj_SubCarpeta 'Objeto que albergará cada carpeta contenida
en la 'carpeta obj_Carpeta

'Mostramos la ruta de la carpeta actual
WScript.Echo "ACL de la carpeta " & obj_Carpeta.Path

'Creamos un objeto servicio WMI
Set obj_ServicioWMI = GetObject("winmgmts:")

'Creamos un objeto con las entradas de seguridad de la carpeta
Set obj_EntradasDeSeguridadDeCarpeta = _
obj_ServicioWMI.Get _
( _
"Win32_LogicalFileSecuritySetting='" & _
obj_Carpeta.Path & "'" _
)

'Creamos un objeto descriptor de seguridad con el método
'GetSecurityDescriptor del objeto que contiene las
'entradas de seguridad
int_Devolucion = _
obj_EntradasDeSeguridadDeCarpeta.GetSecurityDescriptor _
(obj_DescriptorDeSeguridad)

'Almacenamos los flags de control del descriptor de seguridad
int_FlagsDeControl = obj_DescriptorDeSeguridad.ControlFlags

'Vamos revisando la existenca de las diferentes entradas de
'control den los flags; en caso de aparecer se muestran
If (int_FlagsDeControl AND SE_DACL_PRESENT) _
= SE_DACL_PRESENT Then
arr_ACEs = obj_DescriptorDeSeguridad.DACL
For Each obj_ACE in arr_ACEs
WScript.Echo obj_ACE.Trustee.Domain & "\" &
obj_ACE.Trustee.Name If (obj_ACE.AceType >> ACCESS_ALLOWED_ACE_TYPE) _ = ACCESS_ALLOWED_ACE_TYPE Then
WScript.Echo vbTab & "Allowed:"
ElseIf (obj_ACE.AceType = ACCESS_DENIED_ACE_TYPE) _
= ACCESS_DENIED_ACE_TYPE Then
WScript.Echo vbTab & "Denied:"
End If
If (obj_ACE.AccessMask AND FILE_ALL_ACCESS) _
= FILE_ALL_ACCESS Then
WScript.Echo vbTab & vbTab & "FILE_ALL_ACCESS "
End If
If (obj_ACE.AccessMask AND FOLDER_ADD_SUBDIRECTORY) _
= FOLDER_ADD_SUBDIRECTORY Then
WScript.Echo vbTab & vbTab & " FOLDER_ADD_SUBDIRECTORY "
End If
If (obj_ACE.AccessMask AND FILE_DELETE) _
= FILE_DELETE Then
WScript.Echo vbTab & vbTab & "FILE_DELETE "
End If
If (obj_ACE.AccessMask AND FILE_DELETE_CHILD) _
= FILE_DELETE_CHILD Then
WScript.Echo vbTab & vbTab & "FILE_DELETE_CHILD "
End If
If (obj_ACE.AccessMask AND FOLDER_TRAVERSE) _
= FOLDER_TRAVERSE Then
WScript.Echo vbTab & vbTab & " FOLDER_TRAVERSE "
End If
If (obj_ACE.AccessMask AND FILE_READ_ATTRIBUTES) _
= FILE_READ_ATTRIBUTES Then
WScript.Echo vbTab & vbTab & "FILE_READ_ATTRIBUTES "
End If
If (obj_ACE.AccessMask AND FILE_READ_CONTROL) _
= FILE_READ_CONTROL Then
WScript.Echo vbTab & vbTab & "FILE_READ_CONTROL "
End If
If (obj_ACE.AccessMask AND FOLDER_LIST_DIRECTORY) _
= FOLDER_LIST_DIRECTORY Then
WScript.Echo vbTab & vbTab & " FOLDER_LIST_DIRECTORY "
End If
If (obj_ACE.AccessMask AND FILE_READ_EA) _
= FILE_READ_EA Then
WScript.Echo vbTab & vbTab & "FILE_READ_EA "
End If
If (obj_ACE.AccessMask AND FILE_SYNCHRONIZE) _
= FILE_SYNCHRONIZE Then
WScript.Echo vbTab & vbTab & "FILE_SYNCHRONIZE "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_ATTRIBUTES) _
= FILE_WRITE_ATTRIBUTES Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_ATTRIBUTES "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_DAC) _
= FILE_WRITE_DAC Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_DAC "
End If
If (obj_ACE.AccessMask AND FOLDER_ADD_FILE) _
= FOLDER_ADD_FILE Then
WScript.Echo vbTab & vbTab & " FOLDER_ADD_FILE "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_EA) _
= FILE_WRITE_EA Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_EA "
End If
If (obj_ACE.AccessMask AND FILE_WRITE_OWNER) _
= FILE_WRITE_OWNER Then
WScript.Echo vbTab & vbTab & "FILE_WRITE_OWNER "
End If
Next
Else
WScript.Echo "No existen ACLs para esta carpeta ¿Volumen
formateado con FAT?" End If

'Realizamos una llamada recursiva en cada una de las carpetas
'contenidas en la carpeta recibida como parámetro.
For Each obj_SubCarpeta In obj_Carpeta.SubFolders
Call s_Muestra_ACLs(obj_Subcarpeta)
Next

End Sub
</pego lee-acls.vbs>
Pego a continuación el que utiliza CACLS.EXE:

<pego lee-acls.vbs>
Option Explicit

'*****************Descripción********************************
'Este script vuelca al fichero pasado como primer argumento
'las ACLs obtenidas de las llamadas recursivas a CACLS.EXE
'a partir del directorio pasado como argumento. Muestra las
'ACLs de los directorios únicamente.

'Sintaxis:

'cscript lee-acls-con-cacls.vbs fichero_destino [carpeta]

'-fichero_destino: [ruta\]nombre_de_fichero en el cual
'queremos que se guarden los resultados. Parámetro requerido

'-carpèta: ruta de la carpeta inicio del árbol del que
'queremos obtener sus ACLs; parámetro opcional, si se
'omite se considera el directorio actual del inductor
'de la ventana de comandos desde la que se lanza.

'Ejemplos:

'cscript lee-acls-con-cacls.vbs d:\SecInfo\ACLsMoria.txt
'cscript lee-acls-con-cacls.vbs d:\SecInfo\ACLsMoria.txt c:\Moria

'© 8/2005 Fernando Reyes
'*****************Fin de la descripción**********************

Dim str_CarpetaOrigen 'Recibirá la carpeta de origen de
'los argumentos
Dim obj_FileSystem 'Albergará un objeto FileSystem
dim str_FicheroDestino 'Recibirá el nombre del fichero donde
'se volcarán los resultados

'Control de argumentos; debe haber al menos un argumento:
'el nombr del fichero en el que se vuelcan los resultados
'de CACLS. El segundo es opcional, y es el nombre de la carpeta
'a revisar, si se omite se revisa el directorio desde el que
'se lanza el script (".")
If WScript.Arguments.Count = 0 Then
Wscript.Echo "Al menos se debe pasar un argumento: " & _
"el nombre del fichero donde se vuelcan " & _
"los resultados"
Wscript.Quit(1)
ElseIf Wscript.Arguments.Count = 1 Then
str_CarpetaOrigen = "."
Else
str_CarpetaOrigen = Wscript.Arguments(1)
End If

str_FicheroDestino = WScript.Arguments(0)

'Creamos un objeto FileSystem con el que obtenemos
'un objeto carpeta con la ruta de la carpeta requerida
'y lo pasamos como argumento a la función s_MuestraSubCarpetas
Set obj_FileSystem = CreateObject("Scripting.FileSystemObject")

'Volcamos la información de cabecera en el fichero destino
Call RunCmd ("@echo lee-acls-con-cacls.vbs: Resultados para " & _
str_CarpetaOrigen & ">" & _
str_FicheroDestino)
Call RunCmd ("@echo *****************************************>>" & _
str_FicheroDestino)

'Llamamos a la rutina que vuelca las ACLs en el fichero
s_MuestraSubCarpetas obj_FileSystem.GetFolder(str_CarpetaOrigen)

Sub s_MuestraSubCarpetas(obj_Folder)

'*****************Descripción********************************
'Esta rutina escribe en el fichero destino la información
'ACL de la carpeta recibida y realiza una llamada recursiva
'a las carpetas que contiene.
'*****************Fin de la descripción**********************

Dim obj_SubFolder 'Objeto que albergará las subcarpetas
Respuesta Responder a este mensaje
#4 Ramón Sola [MVP Windows - Shell/User]
12/02/2006 - 07:16 | Informe spam
Hash: SHA1

Parece que el componente que implementa la clase Scripting.FileSystemObject
no está correctamente registrado. Prueba lo siguiente desde una ventana de
símbolo del sistema:
regsvr32 %systemroot%\system32\scrrun.dll

Si aparece el mensaje "DllRegisterServer en C:\WINNT\system32\scrrun.dll se
realizó con éxito", prueba de nuevo los scripts. Si no, exponnos el texto
del error o reinstala los componentes de Windows Script:
Windows Script 5.6 para Windows 2000 y XP
http://www.microsoft.com/downloads/...p;FamilyIDÇ17d943-7e4b-4622-86eb-95a22b832caa

Ramón Sola / / MVP Windows - Shell/User
Para obtener la dirección correcta no hacen falta los sellos.
Por favor, usar el correo sólo para cuestiones ajenas a los
grupos de noticias, gracias.

Qué hay, jrubio (), tú escribiste:
Buenas.
Tengo un pequeño problema con estos scripts cuando los ejecuto me da un
error al crear el objeto FileSystemObject, en concreto el error es el
siguiente:

Linea 91
Caracter 1
Error El componente Activex no puede crear el objeto
'scripting.FileSystemObject'
codigo 800a01ad

¿Alguna idea?

Gracias

"Fernando Reyes [MS MVP]" escribió:

> Mira si te vale uno de estos dos script. El primero (lee-acls.vbs)
> utiliza los flags de control de u objeto descriptor de seguridad y el
> segundo hace llamadas a CACLS.EXE. Ejecútalos desde una ventana de
> comandos con cscript. Los adjunto como txt, para evitar a los
> antivirus y pego el código para los que acceden vía web, que no pueden
> ver los adjuntos.
>


[...]

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