Archivo de la etiqueta: vbscript

Borra todas la carpetas compartidas con un script vbs

Este pequeño script vbs sirve para eliminar todo tipo de recursos compartidos en equipo que lo ejecute excepto los directorios compartidos para administrar el equipo IPC$, ADMIN$ y C$.

El script consulta WMI para nuestras acciones, y mirando el tipo se puede decir si son recursos compartidos administrativos - Las comparticiones del tipo cero nunca serán las administrativas.

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
'Selecciona la lista de comparticiones del sistema

Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")
'Se mueve a través de la lista de comparticiones y las elimina
' Pero chequea el tipo para permitir las comparticiones administrativas

For each objShare in colShares
 if (objShare.Type=0) then
  WScript.Echo "Deleting Share (" & objShare.Name & ")"
  if objshare.delete then
   WScript.echo "Error Deleting Share"
  end if
 end if
Next 

Para probar antes de ejecutarlo podemos listar antes:

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")

For each objShare in colShares
 if (objShare.Type=0) then
  WScript.Echo "Share: (" & objShare.Name & ")"
 end if
Next 

Esto unido a un script de inicio de sesion puede hacer limpieza de shares en nuestra red. En Windows 7 o Vista ha de ser ejecutado como administrador por eso ha de ser puesto en el logon script del equipo, no del usuario.

Te recomiendo que hagas muchos test con el último script antes de ejecutar la opción de borrar del primero.

Visual Basic Script para conocer el propietario de un archivo.

Este es un script sencillo que nos permite conocer quien es el propietario de un archivo.

Evidentemente en este script el nombre del archivo va incluido dentro del código pero bien utilizado nos amplia un abanico de posibilidades para catalogar ficheros de un directorio de red u otras características que queramos extraer de las propiedades de un fichero.

On Error Resume Next

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2″)

strFile = “P:\EUROCAJA.XLS” ‘El fichero, cámbialo por lo que quieras

Set colItems = objWMIService.ExecQuery _
(“ASSOCIATORS OF {Win32_LogicalFileSecuritySetting=’” & strFile & “‘}” _
& ” WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner”)

For Each objItem in colItems
Wscript.Echo objItem.ReferencedDomainName
Wscript.Echo objItem.AccountName
Next

Copiar el código, pegarlo en un documento de notepad (por ejemplo) y guardarlo como FileOwner.vbs

Solucion al error 0×80041014 de Visual Basic Script

Aquí dejo este pequeño post con contenido importante sobre este error.

En los usuarios tengo un acceso directo en el escritorio que apunta a un vbs en el que se realizan una serie de tareas y en algún que otro ordenador me daba el error del titulo.

En concreto en la función que llamaba de la siguiente manera.

If IsRunning("wscript.exe") Then
WScript.Echo "La aplicación ya esta ejecutándose, espere a que termine."
WScript.Quit
End If

El motivo de la función es el destinado a esos usuarios que se impacientan y pulsan 50 veces por segundo el icono de la aplicación porque no ven que ésta “arranque”. No son capaces de pensar que por detrás puede estar haciendo otras funciones antes de mostrar el formulario de Login a la aplicación.

La función:

Function IsRunning(strName)
Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMI.ExecQuery("Select * From Win32_Process " & _
"Where Caption = '" & strName & "'")
If colProcesses.Count > 1 Then 'cuento que exista mas de un proceso wscript ejecutandose
IsRunning = True
Else
IsRunning = False
End If
End Function

El error era marcado en la primera linea de la función.

Pues después de probar y probar resulta que según parece este error es causado por el incorrecto registro de algunas dlls implicadas.

Para solucionarlo solo hay que abrir una ventana de comandos de msdos e irse hasta %windir%\System32\Wbem y cuando estemos con el prompt allí escribimos:

for %i in (*.dll) do regsvr32 -s %i

Esto registra de nuevo en modo silencioso todas las dlls de ese directorio y acaba con el problema.

Vbs para extraer mail de Active Directory

Muy simple script que sirve para extraer las cuentas de email del active directory.

Si tenéis mas cuentas en “proxyAddresses” este script no las tiene en cuenta.

[vb]
Option Explicit

Dim strDomainDN, strBase, strFilter, strAttrs, strScope
Dim objDIC
Dim objCmd, objConn, objRS
Dim iCount

strDomainDN = “dc=tudominio,dc=com”
strBase = “;”

strFilter = “(mail=*);”
strAttrs = “name,adspath,mail,url;”
strScope = “subtree”

Set objDIC = CreateObject (“Scripting.Dictionary”)

Set objConn = CreateObject (“ADODB.Connection”)
objConn.Provider = “ADsDSOObject”
objConn.Open “Active Directory Provider”

Set objCmd = CreateObject (“ADODB.Command”)

objCmd.ActiveConnection = objConn
objCmd.CommandText = strBase & strFilter & strAttrs & strScope
objCmd.Properties (“Page Size”) = 1000

Set objRS = objCmd.Execute
objRS.MoveFirst

while Not objRS.EOF
Wscript.Echo “name = ” & objRS.Fields(0).Value & “;mail = ” & objRS.Fields(2).value
wscript.echo “adspath = ” & objRS.Fields(1).Value
‘wscript.echo “url = ” & objRS.Fields(3).value
wscript.echo
objRS.MoveNext
wend
wscript.quit 0
[/vb]

Lista ficheros por extensión + DateDiff. VBScript

Este es un Script que he hecho para un amigo. Como me ha parecido un poco extraño que me preguntase por esto lo voy a plasmar aquí por si a alguien mas le ayuda.

¿Que hace el Script?

En el directorio seleccionado lista todos los ficheros con la extensión definida (en este caso “001″) y si han pasado mas de 15 días desde su última modificación lo borra.

[vb]
sExt = “001″
ahora=Now
With CreateObject(“Scripting.FileSystemObject”)
For Each oFile In .GetFolder(“c:\temp”).Files
If UCase(.GetExtensionName(oFile.Name)) = Ucase(sExt) Then
‘ Comparación con el día de la ultima modificación
If datediff(“d”,oFile.DateLastModified,ahora) >= 15 Then
Wsh.Echo oFile.Path
.deletefile(oFile.path)
End If
End If
Next
End With
[/vb]

Si queréis que la diferencia sea entre el día de creación y hoy el DateDiff ha de ser el siguiente:

[vb]
If datediff(“d”,oFile.DateCreated,ahora) >= 15 Then
[/vb]

para diferencia entre el día del ultimo acceso y hoy:

[vb]
If datediff(“d”,oFile.DateLastAccessed,ahora) >= 15 Then
[/vb]

Ojo que como os he dicho tal y como está el Script borraría el fichero.